Django的is_authenticated和定义Mixin 扩展类. 实现登录校验
作者:互联网
is_authenticated
该方法能够帮助我们判断用户是否登录
is_authenticated 方法的了解:
这是 django 提供的一个用于判断用户是否登录的方法
该方法想要调用, 前面必须是 user. 拿到 user 才可以调用该方法
例如:
# is_authenticated 前面一定要是 request.user # 或是 user request.user.is_authenticated 用户登录: request.user.is_authenticated 为 True 用户未登录: request.user.is_authenticated 为 False
如果用户登录, 则该方法返回 True. 否则: 返回 False.
缺点:
如果在每个登录方法中都进行验证
则, 很多地方都需要添加这些代码,
例如, 下面的情况:
class UserInfoView(View): """用户中心""" def get(self, request): """提供个人信息界面""" # 判断用户是否登录: if request.user.is_authenticated(): # 如果登录, 则正常返回该页面数据 else: # 否则, 进入登录页面,让用户进行登录
备注: 我们在使用时, 可以使用 is_authenticated 也可以使用 is_authenticated( ) 都是可以的. 大家可以思考一下为什么...
注意:
上面的写法虽然看起来问题不大, 但是需要注意, 如果有多个接口
都需要进行上面的验证, 那么在每个函数中都添加如上的判断吗?
显然是不合适的.
那么我们该怎样解决呢?
定义 Mixin 扩展类. 实现登录校验
该代码定义的是 Mixin 扩展类:
from django.http import JsonResponse def my_decorator(func): '''自定义的装饰器:判断是否登录''' def wrapper(request, *args, **kwargs): if request.user.is_authenticated: # 如果用户登录, 则进入这里,正常执行 return func(request, *args, **kwargs) else: # 如果用户未登录,则进入这里,返回400的状态码 return JsonResponse({'code':400, 'errmsg':'请登录后重试'}) return wrapper class LoginRequiredMixin(object): '''自定义的Mixin扩展类''' # 重写的 as_view 方法 @classmethod def as_view(cls, **initkwargs): view = super().as_view(**initkwargs) # 调用上面的装饰器进行过滤处理: return my_decorator(view)
标签:authenticated,登录,request,用户,Django,user,Mixin,view 来源: https://www.cnblogs.com/tracydzf/p/12914842.html