django 实现编写控制登录和访问权限控制的中间件方法
作者:云中不知人 发布时间:2021-04-26 21:08:53
标签:django,登录,访问,中间件
django中,很多时候我们都需要有一个地方来进行更加详细的权限控制,例如说哪些用户可以访问哪些页面,检查登录状态等,这里的话就涉及到了中间件的编写了。
在django项目下的setting.py文件中,有一个MIDDLEWARE_CLASSES的字段,这里存放的就是中间件,用户的访问会先经过这些中间件的处理之后再给各种views函数进行处理。在这个参数中加入我们接下来要编写的中间件:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'myTransport.views.ExteriorAuthMiddleware',
)
接下来实现:
class ExteriorAuthMiddleware(object):
#判断登录 权限控制
def process_request(self,request):
if request.method == 'GET':
requestData = request.GET
else:
requestData = request.POST
request.session['errmsg']=''
#如果用户没有认证,需要转到登录界面
if not request.session.has_key('_auth_user_id') and 'login' not in request.path:
return HttpResponseRedirect('/login/')
#如果用户已经登录
elif request.session.has_key('_auth_user_id') and 'logout' not in request.path:
###权限检验
try:
u=User.objects.get(username=request.user)
#判断token是否过期
if u.usertoken_set.all():
if u.usertoken_set.all()[0].token != request.session['Token']:
logger.error("token 不一致!")
return HttpResponseRedirect('/login/')
else:
logger.error("获取不到token!")
return HttpResponseRedirect('/login/')
url=request.META['PATH_INFO']
print request.get_full_path()
#判断用户是否有某些页面的访问权限,如果没有,转到404页面
if not u.is_superuser:
if url.startswith('/transport/user_') or url.startswith('/log/'):
return error403(request, "权限不够!")
except Exception,e:
logger.error("in function process_request :"+ str(e))
return HttpResponseRedirect('/login/')
#用户已登录,而且url是login,将转到首页
if request.session.has_key('_auth_user_id') and 'login' in request.path:
return HttpResponseRedirect('/index/')
以上只是个简单的示例。
这篇django 实现编写控制登录和访问权限控制的中间件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
来源:https://blog.csdn.net/u011085172/article/details/79044195


猜你喜欢
- 场景昨天系统自动备份了某一个数据库的全部表数据,名dbAll.sql.gz。文件较大(如40G)今天因发现某一个表tableA的一条数据存在
- 目录一·Numpy库中操作文件1.操作csv文件2.在pycharm中操作csv文件3.其他情况(.npy类型文件)二·Pandas库中操作
- 当我写下如下sql语句时,我得到了输入@c参数时想得到的结果集。select * from @tb t where t.id in (sel
- 1 环境准备192.168.1.34 服务器A(主机)192.168.1.35 服务器B(从机)2 安装mysqlMySQL版本:这里采用S
- 本文实例讲述了Python实现按照指定要求逆序输出一个数字的方法。分享给大家供大家参考,具体如下:问题是:输入一个数字,按照指定要求逆序输出
- datetime的astimezone设置时区遇到的坑datetime有四个主要的模块:1、date 处理年、月、日。2、time 处理时、
- 一.使用Python为二年级的学生批量生成数学题1.1 背景我妹妹今年上二年级,她的老师今天给他们布置了一项作业:从今天起到开学,每天坚持做
- 1. 优化你的MySQL查询缓存在MySQL服务器上进行查询,可以启用高速查询缓存。让数据库引擎在后台悄悄的处理是提高性能的最有
- 写在前面在QQ群,微信群,论坛中经常帮助使用SQL Server数据库的朋友解决问题,但是有一些最常见最基本的问题,每天都有人问,回答多了也
- 通过my.ini更改默认字符集这里通过my.ini文件来设置默认字符集打开 my.ini在 [mysqld] 下面写上character-s
- 一、先来看备份mysql数据库的命令mysqldump -u root --password=root --database abcData
- 一,什么是mycat一个彻底开源的,面向企业应用开发的大数据库集群支持事务、ACID、可以替代MySQL的加强版数据库一个可以视为MySQL
- 一、SQL Server 和SSMS的安装1. SQL的安装下载地址:SQL Server。进入下载地址选择Developer或者Expre
- 本文实例讲述了Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法。分享给大家
- golang字符串比较的三种常见方法fmt.Println("go"=="go")fmt.Print
- 在pc端开发,模态框是一个很常用的插件,之前一直用的第三方插件,比如bootstrap,jQuery的模态框插件,最近还用了elementU
- 前言加密技术在数据安全存储,数据传输中发挥着重要作用,能够保护用户隐私数据安全,防止信息窃取。RSA是一种非对称加密技术,在软件、网页中已得
- 前言Celery在python中的应用除了实现异步任务(async task)外也可以执行定时任务(beat)一、Celery定时任务是什么
- 无聊的人在无聊的时间做无聊的事打发自己,结果在无聊的事情中发现了IE对内联文字解释的一些疑惑。以下问题在FF2中没发现,而我也只
- 下面开始构造HTTP数据包,IP层和TCP层使用python的Impacket库,http内容自行填写。#!/usr/bin/env pyt