zoukankan      html  css  js  c++  java
  • Django+中间件+登录验证

      Django的request请求需要首先经过中间件处理,再通过URL查找到对应的views函数进行处理。在settings的MIDDLEWARE_CLASSES中

    添加设置中间件进行激活,大致原理如下图所示:

      

          在使用Django框架进行开发的过程中,遇到一个问题:要求对觉得多数页面请求request进行用户登录验证,如果用户没有登录则跳转回到登录页面;

    如果用户登录了,则直接跳转到新的链接页面?

          在django中提供了一种自定义装饰器@login_required来实现验证用户登录:

    复制代码
    1 # coding: utf-8
    2 from django.shortcuts import render
    3 from django.contrib.auth.decorators import login_required
    4 
    5 @login_required
    6 def home(request):
    7     return render(request, 'home.html')
    复制代码

        但是这种方式有一个不方便的地方:如果每添加一个功能需要验证登录,就需要添加@login_required来进行装饰。如果有大量的功能需要进行登录验证,

    工作量会增大。或者如果因为需求变化,删除装饰器,这种工作量会比较麻烦。

        所以在学习过程中,想到使用django的中间件来进行登录验证,在settings中增加参数,排除不需要登录的url,如:

    1
    2
    3
    4
    EXCLUDE_URL =  (
         '/login/',
        '/logout',      
    )

        然后再创建一个中间件模块,将此中间件添加到MIDDLEWARE_CLASSES中,定义process_request函数,对登录的url进行验证:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # coding: utf-8
    from djangoMiddleware.settings import EXCLUDE_URL
    from django.shortcuts import HttpResponseRedirect
    import re
     
    exclued_path = [re.compile(item) for item in EXCLUDE_URL]
     
    class PubAuthMiddleWare(MiddlewareMixin):
        def process_request(self, request):
            url_path = request.path
            for each in exclued_path:
                if re.match(each, url_path):
                    return
            if request.user.is_authenticated:
                return HttpResponseRedirect('/logout')
            else:
                return

         其中的exclude_path为不需要验证登录的url(白名单),直接return进入响应的views.fun进行处理。

        Django的中间件是很方便的,当需要对所有的request进行相同的处理时,可以使用中间件进行处理,很方便。

  • 相关阅读:
    HDU5418.Victor and World(状压DP)
    POJ2686 Traveling by Stagecoach(状压DP)
    POJ3254Corn Fields(状压DP)
    HDU5407.CRB and Candies(数论)
    CodeForces 352D. Jeff and Furik
    CodeForces 352C. Jeff and Rounding(贪心)
    LightOj 1282 Leading and Trailing
    Ural 1057. Amount of Degrees(数位DP)
    HDU 2089 不要62 (数位DP)
    HDU5366 The mook jong (DP)
  • 原文地址:https://www.cnblogs.com/wdbgqq/p/9822535.html
Copyright © 2011-2022 走看看