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

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

    
    
    
    
    
    

     

  • 相关阅读:
    BZOJ_2039_[2009国家集训队]employ人员雇佣_ 最小割
    BZOJ_4238_电压_树上差分+dfs树
    BZOJ_4516_[Sdoi2016]生成魔咒_后缀数组+ST表+splay
    BZOJ_3048_[Usaco2013 Jan]Cow Lineup _双指针
    BZOJ_3689_异或之_可持久化Trie+堆
    BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表
    BZOJ_3675_[Apio2014]序列分割_斜率优化
    BZOJ_4518_[Sdoi2016]征途_斜率优化
    BZOJ_1407_[Noi2002]Savage_EXGCD
    [转载]ubuntu常用命令
  • 原文地址:https://www.cnblogs.com/cybg/p/12192019.html
Copyright © 2011-2022 走看看