zoukankan      html  css  js  c++  java
  • Django2.2 中间件的使用

    中间件:AOP中间件,在Django中内置了一些项目自带的中间件,那么中间件是什么呢

    这里说明一下,一开始我也不太清楚中间件到底有什么用(大家也别急,下面会有详细的例子给大家解释)--------》

    一、第一步:注册中间件文件

    前两个是由我注册的,注册步骤类似Django中的绝大多数文件注册----------写上文件的根目录即可

    二、第二步:写中间文件的切点函数----------------

      2.1举例--》指定ip用户抢票概率高

    前面说到切点有很多,其中的   def process_request(self,request):就是用来解耦合的,通俗点就是举个例子:------设计一个函数时常会用到判断从而得到不同的输出,如果写在一起会显得很乱,于是用到

    def process_request(self,request)  来解耦合,拆分出开,市面上的很多游戏都有新手必得奖励,这里的抽卡奖励就用到了类是中间件的东西,判断是新手则执行中间切点函数,跳过主程序的 一般抽卡函数,------------------------你是不是想到的什么。。。。。。。。。。。。。哈哈哈哈,非酋和欧皇的由来

    #利用中间件来查看模拟抢手机的过程-------#模拟抢手机必中-----白名单---中间件
    def get_phone(request):
        if random.randrange(100)>95:
            return HttpResponse("恭喜您,抢到小米20!")
        return HttpResponse("正在排队....")

    这是原函数的判断过程----------


    class HelloMiddle(MiddlewareMixin):#---------------------------------第一个类
    #---------------------------------打印ip
    def process_request(self,request):
    print(request.META.get("REMOTE_ADDR"))#统计访问服务器的ip可用于进行数据分析
    #
    # #模拟抢手机必中-----白名单
    # ip=request.META.get("REMOTE_ADDR")
    #----------------------------------------------------
    # if request.path=="/App1/getphone/":
    # if ip=="127.0.0.1":
    # if random.randrange(100)>30:
    # return HttpResponse("恭喜您免费抢到小米20")
    这是中间件的函数,无形中便可区分开来,class类和def process_request()只需要写一次,不同的路由,统统用if判断即可

      2.2举例--》10秒内只能搜索一次,频率控制反爬

     #AOP控制搜索频率---10秒内只能搜索一次
    def search(request):
        return HttpResponse("这是你搜索到的种子资源!")
    
    
    ---------------------------------------------------------
    # # AOP控制搜索频率---10秒内只能搜索一次
            # if request.path=='/App1/search/':
            #     #通过Cache缓存----这里用ip作为唯一标识
            #     result=cache.get(ip)
            #     if result:
            #         return HttpResponse("您的访问过于频繁,请10秒后再试!")
            #     #不存在则设置cache
            #     cache.set(ip,ip,timeout=10)#第一个ip为设置的cache的名字,后一个为cache存的内容为ip

    通过以上的我们可以得出结论,中间件用于解耦合很强大,非常方便,用的时候也要注意中间件的注册顺序哟!!!!

    
    
    
    
    
    

     

  • 相关阅读:
    Notes of Daily Scrum Meeting(12.18)
    Notes of Daily Scrum Meeting(12.17)
    Notes of Daily Scrum Meeting(12.16)
    Notes of Daily Scrum Meeting(12.8)
    Notes of Daily Scrum Meeting(12.5)
    Notes of Daily Scrum Meeting(12.3)
    Notes of Daily Scrum Meeting(11.12)
    Linux中profile、bashrc、bash_profile之间的区别和联系
    Linux GCC编译
    mysql 5.7.16 远程连接
  • 原文地址:https://www.cnblogs.com/cybg/p/12192019.html
Copyright © 2011-2022 走看看