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

原文地址:https://www.cnblogs.com/wdbgqq/p/9822535.html

时间: 2024-08-26 21:52:08

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

Django+中间件+登陆验证

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

DJANGO用户登录验证完整代码

1,urls.py内容: from django.conf.urls import url from django.contrib import admin from myApp import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^login/$', views.login), url(r'^index/$', views.index), ] 2,views.py内容 说明: 要使用session前提是要在s

Django通过中间件实现登录验证demo

前提:中间件版的登录验证需要依靠session,所以数据库中要有django_session表. 1 from django.conf.urls import url 2 from django.contrib import admin 3 from app01 import views 4 5 urlpatterns = [ 6 url(r'^admin/', admin.site.urls), 7 url(r'^login/$', views.login, name='login'), 8

巨蟒django之CRM1 需求分析&&表结构设计&&注册登录验证

1.需求分析 1.项目 (1)业务 (2)权限的管理 2.CRM customer relationship management 客户关系管理系统 3.谁来使用CRM? 销售&&班主任&&讲师&&助教 4.项目的需求分析 (1)注册 (2)登录 (3)销售 1.客户信息管理 增加 编辑 展示 客户信息(删除一般不用它做,后台管理员来做,为了信息安全) 2.跟进信息管理 增加 编辑 展示 跟进信息 3.报名信息的管理 增加 编辑 展示 报名信息 4.缴费记录

Django user authenticate 登录验证

Django视图函数 view视图函数 from django.shortcuts import render,redirect from django.contrib.auth import authenticate,login,logout def acc_login(request): “登录验证”’ error_msg = '' if request.method == "POST": username = request.POST.get('username') passwo

django -- 登录验证

django -- 登录验证 环境说明 Django:1.10 Python:3.6 以 AbstractUser 方式扩展内置 User # models.py 定义 model from django.db import models from django.contrib.auth.models import AbstractUser # Create your models here. class UserProfile(AbstractUser): # 昵称 nick_name = m

django 的用户验证及登录状态保持

一.用户验证功能 Django自带用户验证及登录功能,引入模块为: from django.contrib.auth import authenticate 其中方法authenticate()的接收参数为: def authenticate(request=None, **credentials): 传入参数: user = authenticate(username=login_user, password=login_password) authenticate方法自动在数据库中匹配.验证

Django装饰器验证登录

#登录验证装饰器 def auth(func): def inner(request,*args,**kwargs): username1 = request.session.get('username') username2 = request.COOKIES.get('username') if not username1 or not username2: return redirect('/login') return func(request, *args,**kwargs) retu

django中间件

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