自定义频率组件,django自带的组件,解析器

自定义频率组件

from rest_framework.throttling import BaseThrottle, SimpleRateThrottle
        import time

        # 设置一分钟只能访问三次
        class MyThrottle(BaseThrottle):
            visitor_dic = {}

            def __init__(self):
                self.history = None

            def allow_request(self, request, view):
                # META:请求所有的东西的字典
                # 拿出ip地址
                ip = request.META.get(‘REMOTE_ADDR‘)
                ctime = time.time()

                # 判断ip在不在字典里,不再说明是第一次访问,往字典里添加时间
                if ip not in self.visitor_dic:
                    self.visitor_dic[ip] = [ctime, ]
                    return True

                # ip在字典里,取出ip对应的访问时间列表
                history = self.visitor_dic[ip]
                self.history = history
                # 当字典里有值和列表里当前时间减去第一次的时间差大于60s,超过了一分钟就不让访问,
                # 则把最后一次时间删掉
                while history and ctime - history[-1] > 60:
                    history.pop()
                # 判断列表里时间元素,是不是大于3,,大于3直接False
                if len(history) < 3:
                    # 把当前时间放在列表第0位
                    history.insert(0, ctime)
                    return True
                # 大于3直接False
                return False

            -设置等待时间
            def wait(self):
                ctime = time.time()
                # ctime - self.history[-1] 表示当前时间超了多长时间
                print(self.history[-1])
                # 当前时间减去第一次访问时间
                return 60 - (ctime - self.history[-1])

            -错误信息显示成中文
            def throttled(self, request, wait):
                class MyThrottled(exceptions.Throttled):
                    default_detail = ‘傻逼‘
                    extra_detail_singular = ‘还剩 {wait} 秒.‘
                    extra_detail_plural = ‘还剩 {wait} 秒‘
                raise MyThrottled(wait)

视图函数中

-频率组件局部使用
  # 调用上面的频率组件  throttle_classes = [ MyThrottle,]

频率组件全局配置

settings里
REST_FRAMEWORK = {
  # 自定义频率组件全局使用
  ‘DEFAULT_THROTTLE_CLASSES‘: [‘app01.MyAuth.MyThrottle‘, ],
}

django自带的频率组建

class MyThrottle(SimpleRateThrottle):
  scope = ‘aaa‘
  def get_cache_key(self, request, view):
    return self.get_ident(request)

视图里引用上面自带的频率组件

class Test(APIView):
    # 调用频率组件
    throttle_classes = [MyThrottle,]

    def get(self, request):
        print(type(request._request))
        print(request._request)
        print(request.data.get(‘name‘))
        return HttpResponse(‘ok‘)

    def post(self, request):
        print(request.data)
        return HttpResponse(‘post‘)

    # 错误信息显示成中文
    def throttled(self, request, wait):
        class MyThrottled(exceptions.Throttled):
            default_detail = ‘傻逼‘
            extra_detail_singular = ‘还剩 {wait} 秒.‘
            extra_detail_plural = ‘还剩 {wait} 秒‘

        raise MyThrottled(wait)

自带的频率组建全局配置

REST_FRAMEWORK = {
    # django自带频率组件使用
    ‘DEFAULT_THROTTLE_RATES‘: {
        ‘aaa‘: ‘10/m‘},

RestFramework之解析器

解析器:

对请求的数据进行解析-请求体进行解析。解析器在你不拿请求体数据时,不会被调用。
from rest_framework.parsers import JSONParser,FormParser

解析器局部使用

在视图类中
  # 两种格式都能解析,不写全部解析
  parser_classes = [FormParser,JSONParser]

解析器全局配置

REST_FRAMEWORK = {    # 解析器全局使用    ‘DEFAULT_PARSER_CLASSES‘: [        ‘rest_framework.parsers.JSONParser‘,    # 客户端发送 application/json 的形式的值        ‘rest_framework.parsers.FormParser‘    # 客户端发送 application/x-www-form-urlencoded 的形式的值    ]}

原文地址:https://www.cnblogs.com/liu--huan/p/10121498.html

时间: 2024-11-09 23:02:02

自定义频率组件,django自带的组件,解析器的相关文章

使用java自带的xml解析器解析xml

使用java自带的xml解析器解析xml,其实我不推荐,可以用Dom解析,或其他的方式,因为Java自带的解析器使用不但麻烦,且还有bug出现. 它要求,针对不同的xml(结构不同),必须写对应的handler处理类,而Dom解析可以写通用的方法(前提是要写出通用逻辑)来处理,开发比较快.下面上代码 1 //------------------ main point --------------------- 2 javax.xml.parsers.SAXParserFactory 3 publ

rest framework认证组件和django自带csrf组件区别详解

使用 Django 中的 csrf 处理 Django中有一个django.middleware.csrf.CsrfViewMiddleware中间件提供了全局的csrf检查.它的原理是在<form>标签中生成一个隐藏的<input>标签,提交表单时将这个隐藏的<input>一起提交,服务器端验证这个字段是否正确. 官方给出的csrf的操作步骤是: 在MIDDLEWARE_CLASSES中添加django.middleware.csrf.CsrfViewMiddlewa

SpringMVC自动封装List对象——自定义参数解析器

前台传递的参数为集合对象时,后台Controller希望用一个List集合接收数据. 原生SpringMVC是不支持,Controller参数定义为List类型时,接收参数会报如下错误: org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.List]: Specified class is an interface at org.springframework.beans.B

使用自定义的任务解析器

有时候我们想为activiti中每个任务绑定一个类似全局监听器的东西,但是又不能每次手动为任务添加监听器(太繁琐了),所以就会用到自定义的任务解析器. 先看activiti的配置,这样可以用自定义的任务解析器代替activiti默认的任务解析器(原理可以自行查询源码) <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"

django中的admin组件之自定义组件

内容回顾: 一 admin的使用 app01的admin.py文件:                  class BookConfig(admin.ModelAdmin):               list_display=[]               list_display_links=[]               list_filter=[]               search_fields=[]                              def pat

django rest framework 解析器组件 接口设计,视图组件 (1)

一.解析器组件 -解析器组件是用来解析用户请求数据的(application/json), content-type 将客户端发来的json数据进行解析 -必须适应APIView -request.data触发 二.序列化组件 2.1.django 自带组件serializer 2.1.1 from django.serializers import serialize2.1.2 origin_data = Book.objects.all()2.1.3 serialized_data = se

Django之auth认证组件

原文链接:https://www.jianshu.com/p/612b3d76a1f5 Django之auth组件 前言:我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统. 此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点.它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据. auth中提供的实用方法: - 创建用户 pytho

Django 框架篇(九): Django中的Form 组件

Django中的Form组件,帮我们处理了 form表单中的校验, 和错误提示的处理: 主要功能: 生成页面可用的HTML标签 对用户提交的数据进行校验 保留上次输入内容 使用form组件实现注册功能 1.  定义一个类, 继承django中的 forms.Form 代码实例: from django import forms # 按照Django form组件的要求自己写一个类 class RegForm(forms.Form): name = forms.CharField(label="用

$Django Rest Framework-频率组件,解析器

1 频率组件 #自定义组件写频率认证(重点继承BaseThrottle) from rest_framework.throttling import BaseThrottle import time class Thro(BaseThrottle): dic={} def allow_request(self, request, view): ''' :param request: :param view: :return: 布尔类型 ''' ctime=time.time() self.ip=