django 实现编写控制登录和访问权限控制的中间件方法


Posted in Python onJanuary 15, 2019

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 实现编写控制登录和访问权限控制的中间件方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python简单实现刷新智联简历
Mar 30 Python
python正则中最短匹配实现代码
Jan 16 Python
pytorch构建网络模型的4种方法
Apr 13 Python
python 通过 socket 发送文件的实例代码
Aug 14 Python
Python遍历文件夹 处理json文件的方法
Jan 22 Python
Python3字符串encode与decode的讲解
Apr 02 Python
Django基础三之视图函数的使用方法
Jul 18 Python
python中count函数简单用法
Jan 05 Python
Python Numpy之linspace用法说明
Apr 17 Python
pytorch损失反向传播后梯度为none的问题
May 12 Python
使用python向MongoDB插入时间字段的操作
May 18 Python
python树莓派通过队列实现进程交互的程序分析
Jul 04 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
Jan 15 #Python
Python3中lambda表达式与函数式编程讲解
Jan 14 #Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
Jan 14 #Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 #Python
python 根据时间来生成唯一的字符串方法
Jan 14 #Python
python ipset管理 增删白名单的方法
Jan 14 #Python
python 监听salt job状态,并任务数据推送到redis中的方法
Jan 14 #Python
You might like
php字符串截取问题
2006/11/28 PHP
php字符串替换函数substr_replace()用法实例
2015/03/17 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
2016/05/20 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
js获取form的方法
2015/05/06 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
2017/03/22 jQuery
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
Vue多组件仓库开发与发布详解
2019/02/28 Javascript
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
JS实现使用POST方式发送请求
2019/08/30 Javascript
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
Python中内建函数的简单用法说明
2016/05/05 Python
浅谈Python中的私有变量
2018/02/28 Python
python3.8下载及安装步骤详解
2020/01/15 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
2020/11/30 Python
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
四种会话跟踪技术
2015/05/20 面试题
环境工程大学生自荐信
2013/10/21 职场文书
追悼会子女答谢词
2014/01/28 职场文书
学雷锋志愿服务月活动总结
2014/03/09 职场文书
工程部文员岗位职责
2015/02/04 职场文书
创卫工作总结2015
2015/04/22 职场文书
民间借贷借条范本
2015/05/25 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书
辞职申请书范本
2019/05/20 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
pandas:get_dummies()与pd.factorize()的用法及区别说明
2021/05/21 Python
Python合并多张图片成PDF
2021/06/09 Python
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python