当前位置:   article > 正文

django自定义中间件--------登录验证中间件_django中间件权限验证

django中间件权限验证

django自带的七个中间件

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',     
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',]

 1.介绍

1.当请求来的时候,先经过中间件的过滤

2.响应走了最后,也要经过中间件

2.django的中间件给我们暴露了一些方法

  1. class SessionMiddleware(MiddlewareMixin):
  2. def process_request(self,request) #请求过来时,会触发process_request方法,
  3. def process_response(self, request, response): #响应有的时候,会触发process_pesponse方法
  4. 还有
  5. process_view----------------》是跟视图函数相关的
  6. process_exception----------------》跟异常相关的
  7. process_template_response----------------》跟模板相关的
  8. # 在一个中间件中,暴露的这几个方法不是每个类都必须有的,而是需要什么就写什么

自定义中间件

from django.utils.deprecation import MiddlewareMixin

定义一个类,必须继承MiddlewareMixin,类名要符合命名规范

然后就是重写方法

        def process_request(self, request):

        def process_response(self, request, response):

        process_view----------------》是跟视图函数相关的
         process_exception----------------》跟异常相关的
         process_template_response----------------》跟模板相关的

# 在一个中间件中,暴露的这几个方法不是每个类都必须有的,而是需要什么就写什么

举个列子----在自定义中间件实现认证登录

重新建一个文件夹,建一个py文件

  1. from django.shortcuts import redirect
  2. from django.utils.deprecation import MiddlewareMixin
  3. from django.conf import settings
  4. class Mylogins(MiddlewareMixin):
  5. def process_request(self, request):
  6. path_a=request.path_info #获取请求url的后缀,/index/
  7. if path_a not in settings.WHITE_LIST: #判断路径是否在这个白名单中
  8. user_obj = request.session.get('user') #在登录后,设置session
  9. if not user_obj: #不存在 就重定向到登陆页面
  10. return redirect('login')
  11. pass

settings.py配置白名单

  1. #白名单
  2. WHITE_LIST = ['/reg/', '/login/', '/get_code/','/home/']

最后一定要在配置文件中,注册你的中间件

中间件问题

# 针对process_reqeust
    1. 执行顺序是按照配置文件中注册的顺序,从上往下依次执行
    2. 视图函数在中间件的process_reqeust函数之后执行
    3. 如果在process_reqeust里面直接返回HttpResponse,之后的中间件一律不在走了,包括视图函数
# # 针对process_response
     1. 必须要返回一个HttpResponse
    2. 执行顺序:是按照配置文件的注册顺序,从下往上依次执行

# 最后一个问题:
研究我在第一个中间件的process_reqeust方法中,直接返回HttpResponse,然后,观察所有中间件的process_response的执行顺序?
# 结论:如果在第一个中间件中得process_reqeust中直接拦截,只走第一个中间件的process_reqeust和第一个中间件的process_response,直接原路返回.

# 但是,在flask框架中,如果你在第一个拦截了,后面的类似于是process_response都会走一遍.
'''flask框架中实际上没有真正的中间件,它是需要你看源码自己做成类似于django的这种中间件'''

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/71757
推荐阅读
相关标签
  

闽ICP备14008679号