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: 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进行相同的处理时,可以使用中间件进行处理,很方便。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!