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,如:

EXCLUDE_URL =  (
     ‘/login/‘,
    ‘/logout‘,
)

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

  

# 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进行相同的处理时,可以使用中间件进行处理,很方便。

  

  

时间: 2024-11-16 19:44:41

Django+中间件+登陆验证的相关文章

Django+中间件+登录验证

Django的request请求需要首先经过中间件处理,再通过URL查找到对应的views函数进行处理.在settings的MIDDLEWARE_CLASSES中 添加设置中间件进行激活,大致原理如下图所示: 在使用Django框架进行开发的过程中,遇到一个问题:要求对觉得多数页面请求request进行用户登录验证,如果用户没有登录则跳转回到登录页面: 如果用户登录了,则直接跳转到新的链接页面? 在django中提供了一种自定义装饰器@login_required来实现验证用户登录: 1 # c

Django中间件进行用户登陆验证

通常情况下我们在django中设置登陆验证,使用装饰器来检验是否登陆过.这种情况,我们所有的视图函数都需要加上,太low. 下面我们使用中间件来进行登陆验证~~~ 我们先做出登陆页面: 1.models.py #先在models中设置用户名密码字段 from django.db import models class UserInfo(models.Model): # nid = models.AutoField(primary_key=True) # nid = models.BigAutoF

Django中间件 及 form 实现用户登陆

Django中间件 及 form 实现用户登陆 Form 验证 密码调用md5 加密存储 form.add_error("字段名", "错误信息") 自定义错误信息 装饰器实现 用户认证 中间件实现 用户认证 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影响到性能. django默认的中间件在settings.py中 当用户发起请求

django简单用户登陆验证

一.django简单用户登陆验证   前端页面:     <div class="container  col-lg-6  col-lg-offset-4">         <br><br><br><br><br>       <form class="form-signin col-sm-4 col-lg-offset-2" action="{% url 'login' %}

Django之session验证的三种姿势

一.什么是session session是保存在服务端的键值对,Django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中. 二.FVB中使用装饰器进行session验证 认证装饰器: # 登陆验证 def auth(func): '''判断是否登录装饰器''' def inner(request, *args, **kwargs): ck = request.session.get("username") '''如果没有登

Flask(2):登陆验证

装饰器补充: import functools def auth(func): @functools.wraps(func) # 作用:把原函数的原信息封装到 inner 中 def inner(*args,**kwargs): ret = func(*args,**kwargs) return ret return inner @auth def index(): print("index") # function.__name__ # 获取函数名 print(index.__nam

Django中间件、csrf跨站请求伪造以及基于Django中间件思想实现功能的插拔式配置

一.django中间件 1.1解释:django中间件是类似于是django的保安,请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models),响应走的时候也需要经过中间件才能到达web服务网关接口 1.2django默认的七个中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.Session

19 Django中间件

目录 一.前言 二.中间件介绍 2.1 什么是中间件 2.2 自定义中间件 2.3 自定义一个中间件示例 三.自定义中间价 process_request 四.自定义中间件 process_response 五.自定义中间件 process_view(了解) 六.自定义中间件方法 process_exception(了解) 七.自定义中间件 process_template_response(了解) 八.中间件的执行流程 九.中间件版登录验证 十.伪站请求伪造 十一.截取钓鱼网站的策略(伪站请求

django中间件

django的中间件就是一个对整体请求过程的装饰器,可以对请求到达view之前,view处理和响应后,通过定义process_request,process_view,process_response进行处理. 然后在settings.py的MIDDLEWARE_CLASSES里,添加自定义的中间件类路径,路径规则与import路径一致即可. 中间件在验证用户登录状态,权限等方面很便利哇.