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上传package到Pypi(代码简单)
Feb 06 Python
python简单实现刷新智联简历
Mar 30 Python
全面了解Python环境配置及项目建立
Jun 30 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
Python元组知识点总结
Feb 18 Python
python+numpy按行求一个二维数组的最大值方法
Jul 09 Python
将python2.7添加进64位系统的注册表方式
Nov 20 Python
Django密码存储策略分析
Jan 09 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
Jupyter notebook运行Spark+Scala教程
Apr 10 Python
Python如何定义有默认参数的函数
Aug 10 Python
python全面解析接口返回数据
Feb 12 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工厂模式的好处
2013/06/18 PHP
laravel 5 实现模板主题功能
2015/03/02 PHP
递归实现php数组转xml的代码分享
2015/05/14 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
PHP分页显示的方法分析【附PHP通用分页类】
2018/05/10 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
PHP字符串与数组处理函数用法小结
2020/01/07 PHP
html中的input标签的checked属性jquery判断代码
2012/09/19 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
[38:40]2018DOTA2亚洲邀请赛 4.6淘汰赛 mineski vs LGD 第一场
2018/04/10 DOTA
Python使用爬虫猜密码
2016/02/19 Python
利用ctypes提高Python的执行速度
2016/09/09 Python
你应该知道的python列表去重方法
2017/01/17 Python
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
异常和异常类的概念
2014/09/12 面试题
Linux文件系统类型
2012/09/16 面试题
机电一体化应届生求职信范文
2014/01/24 职场文书
经济管理毕业生求职信
2014/03/15 职场文书
关于爱国的演讲稿
2014/05/07 职场文书
护士医德医风自我评价
2014/09/15 职场文书
关于调整工作时间的通知
2015/04/24 职场文书