在用django写项目时,项目中经常会有地方要判断用户是否登陆。不做特殊处理每次都要去session,cookie中取了做判断,
可以利用django中间件设置黑白路由名单,进行判断,代码简单,写一次就可以了。
# 用户登陆验证及操作时的的白名单设置,中间件。
from django.utils.deprecation import MiddlewareMixin
from lib.http import render_json
from common import errors
from user.models import User
# 很多地方都会用到user.id,所以把这个做成一个全局的。
class AuthMiddleware(MiddlewareMixin): # 记得在setting中配置好'common.moddleware.AuthMiddleware'(commom是这个文件所在的文件夹)
white_list = [
'/api/user/vcode',
'/api/user/login',
]
def process_request(self, request):
#检查当前path是否是白名单内
if request.path in self.white_list:
return
#用户登陆验证
uid = request.session.get('uid')
if uid is None:
return render_json(None,errors.LoginRequire.code)
else:
try:
user = User.objects.get(id=uid)
except User.DoesNotExist:
return render_json(None,errors.UserNotExits.code)
else:
# 将user 对象添加到request身上
request.user = user