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

Evan
Evan
发布时间:2026-10-13 | 1人浏览过
原创

本文介绍如何在 Django 项目中通过编写自定义中间件来实现详细的权限控制。通过配置 MIDDLEWARE_CLASSES 注册中间件,并在 process_request 方法中检查用户会话、Token 有效性及 URL 路径,从而实现对特定页面的访问限制和登录状态校验,保障系统安全性。

在 Django 开发中,经常需要一种机制来进行更细粒度的权限管理,比如限制特定用户访问特定页面或校验登录状态。实现这一功能的关键在于编写自定义中间件。

Django 项目的 settings.py 文件中包含 MIDDLEWARE_CLASSES 配置项,用于定义中间件列表。用户的请求会先经过这些中间件处理,然后再分发给相应的视图函数。我们需要在配置中添加即将编写的中间件类:

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 相关产品和应用

全部下载

专题列表