zoukankan      html  css  js  c++  java
  • 六 .Django---framework框架 throttle(访问频率)组件

    一 throttle(访问频率)组件

    https://www.cnblogs.com/apollo1616/articles/10101236.html       Django DRF频率组件限制用户一分钟访问次数

    https://www.diandian100.cn/8c6a0357.html       DRF频率组件的使用方式

    from rest_framework.views import APIView  源码中
       self.check_throttles(request)  # 频率组件  必须是   

    def allow_request():
    pass
    
    
    views
    
    from rest_framework import serializers
    
    from django.shortcuts import render,HttpResponse
    from django.views import View
    from rest_framework.response import Response
    from .models import *
    from rest_framework.views import APIView
    
    
    # 序列化
    class AuthorModelSerializers(serializers.ModelSerializer):
        class Meta:
            model = Author
            fields = "__all__"
    
    
    
    
    # 频率组件
    class VisitRateThrottle(object):
        def allow_request(self,request,view):
            # 要求访问站点的频率不能超过每分钟20次
            if 1:
                print(request.META.get("REMOTE_ADDR"))
    
                return True
            else:
                return False
    
    
    from rest_framework.response import  Response
    class AuthorModelView(viewsets.ModelViewSet):
    
        #authentication_classes = [TokenAuth,]  认证组件
        #permission_classes=[SVIPPermission,]   权限组件
        throttle_classes = [VisitRateThrottle]    # 限制某个IP每分钟访问次数不能超过20次
        queryset = Author.objects.all()
        serializer_class = AuthorModelSerializers
        renderer_classes = []
    url(r'^authors/$', views.AuthorModelView.as_view({"get":"list","post":"create"}),name="author"),
     认证权限频率 组件   

     print(request.META) # 一个标准的Python 字典,包含所有的HTTP 首部。具体的头部信息取决于客户端和服务器,下面是一些示例:
        CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。
        CONTENT_TYPE —— 请求的正文的MIME 类型。
        HTTP_ACCEPT —— 响应可接收的Content-Type。
        HTTP_ACCEPT_ENCODING —— 响应可接收的编码。
        HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。
        HTTP_HOST —— 客服端发送的HTTP Host 头部。
        HTTP_REFERER —— Referring 页面。
        HTTP_USER_AGENT —— 客户端的user-agent 字符串。
        QUERY_STRING —— 单个字符串形式的查询字符串(未解析过的形式)。
        REMOTE_ADDR —— 客户端的IP 地址。
        REMOTE_HOST —— 客户端的主机名。
        REMOTE_USER —— 服务器认证后的用户。
        REQUEST_METHOD —— 一个字符串,例如"GET""POST"。
        SERVER_NAME —— 服务器的主机名。
        SERVER_PORT —— 服务器的端口(是一个字符串)。
       从上面可以看到,除 CONTENT_LENGTH 和 CONTENT_TYPE 之外,请求中的任何 HTTP 首部转换为 META 的键时,
        都会将所有字母大写并将连接符替换为下划线最后加上 HTTP_  前缀。
        所以,一个叫做 X-Bender 的头部将转换成 META 中的 HTTP_X_BENDER 键
    
    
    
       
          
        request.META:    包含的信息
            {'ALLUSERSPROFILE': 'C:\ProgramData', 
            'APPDATA': 'C:\Users\Administrator\AppData\Roaming', 
            'COMMONPROGRAMFILES': 'C:\Program Files\Common Files', 
            'COMMONPROGRAMFILES(X86)': 'C:\Program Files (x86)\Common Files',
            'COMMONPROGRAMW6432': 'C:\Program Files\Common Files', 
            'COMPUTERNAME': 'PC201712041709',
            'COMSPEC': 'C:\Windows\system32\cmd.exe', 
            'DJANGO_SETTINGS_MODULE': 'restdemo.settings', 
            'FP_NO_HOST_CHECK': 'NO', 'HOMEDRIVE': 'C:', 
            'HOMEPATH': '\Users\Administrator',
            'LOCALAPPDATA': 'C:\Users\Administrator\AppData\Local', 
            'LOGONSERVER': '\\PC201712041709', 
            'NUMBER_OF_PROCESSORS': '4', 'OS': 'Windows_NT',
            'PATH': 'C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Users\Administrator\AppData\Local\Programs\Python\Python36;C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Scripts;C:\Python27;E:\MySQL Server 5.6\bin;C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Scripts\;C:\Users\Administrator\AppData\Local\Programs\Python\Python36\;C:\Users\Administrator\AppData\Local\atom\bin', 
            'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC', 
            'PROCESSOR_ARCHITECTURE': 'AMD64', 
            'PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 60 Stepping 3, GenuineIntel',
            'PROCESSOR_LEVEL': '6', 'PROCESSOR_REVISION': '3c03', 
            'PROGRAMDATA': 'C:\ProgramData',
            'PROGRAMFILES': 'C:\Program Files',
            'PROGRAMFILES(X86)': 'C:\Program Files (x86)', 
            'PROGRAMW6432': 'C:\Program Files', 
            'PSMODULEPATH': 'C:\Windows\system32\WindowsPowerShell\v1.0\Modules\', 
            'PUBLIC': 'C:\Users\Public', 'PYCHARM_HOSTED': '1', 'PYTHONIOENCODING': 'UTF-8', 
            'PYTHONPATH': 'C:\Users\Administrator\PycharmProjects\s9\restdemo', 'PYTHONUNBUFFERED': '1', 
            'SESSIONNAME': 'Console', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C:\Windows', 
            'TEMP': 'C:\Users\ADMINI~1\AppData\Local\Temp', 'TMP': 'C:\Users\ADMINI~1\AppData\Local\Temp',
            'USERDOMAIN': 'PC201712041709', 
            'USERNAME': 'Administrator', 
            'USERPROFILE': 'C:\Users\Administrator', 
            'WINDIR': 'C:\Windows', 'WINDOWS_TRACING_FLAGS': '3', 
            'WINDOWS_TRACING_LOGFILE': 'C:\BVTBin\Tests\installpackage\csilogfile.log',
            'RUN_MAIN': 'true', 'SERVER_NAME': 'PC201712041709', 
            'GATEWAY_INTERFACE': 'CGI/1.1', 'SERVER_PORT': '8000', 
            'REMOTE_HOST': '', 
            'CONTENT_LENGTH': '', 
            'SCRIPT_NAME': '', 
            'SERVER_PROTOCOL': 'HTTP/1.1', 
            'SERVER_SOFTWARE': 'WSGIServer/0.2', 
            'REQUEST_METHOD': 'GET', 
            'PATH_INFO': '/authors/', 
            'QUERY_STRING': 'token=8204b8e3ac40bf59ae480d17c146b51a', 
            'REMOTE_ADDR': '127.0.0.1', 
            'CONTENT_TYPE': 'text/plain', 
            'HTTP_HOST': '127.0.0.1:8000', 
            'HTTP_CONNECTION': 'keep-alive', 
            'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36', 
            'HTTP_UPGRADE_INSECURE_REQUESTS': '1', 
            'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'HTTP_ACCEPT_ENCODING': 'gzip, deflate, br', 'HTTP_ACCEPT_LANGUAGE': 'zh-CN,zh;q=0.9', 'HTTP_COOKIE': 'csrftoken=jtus3l4GJEc9TFXWYCWxkBIZprcOv7C1vFMIyOHs7Zkxt015FwVZ2KEEeDV6LOyN', 'wsgi.input': <_io.BufferedReader name=832>, 'wsgi.errors': <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>, 'wsgi.version': (1, 0), 'wsgi.run_once': False, 'wsgi.url_scheme': 'http', 'wsgi.multithread': True, 'wsgi.multiprocess': False, 'wsgi.file_wrapper': <class 'wsgiref.util.FileWrapper'>}
        
  • 相关阅读:
    解决行内块元素(inline-block)之间的空格或空白问题
    gzip压缩文件&webPack配置Compression-webpack-plugin
    IOS微信禁用分享跳转页面返回BUG修复
    开发自己的composer包
    深入理解Java中的迭代器
    理解JDK1.5的自动装箱拆箱
    [design-patterns]设计模式之一策略模式
    [java]final关键字的几种用法
    [java]static关键字的四种用法
    [java]我的数据在哪里?——数据的内存模型
  • 原文地址:https://www.cnblogs.com/lovershowtime/p/11651676.html
Copyright © 2011-2022 走看看