用户中心页面规定:
当用户登录后,才能访问用户中心
如果用户未登录,就不允许访问用户中心,将用户引导到登录界面
- (1)传统实现方式:
如果已经登陆:request.user.is_authenticated == True
如果未登陆: request.user.is_authenticated == False
# 获取用户中心数据
class UserInfoView(View):
def get(self, request):
if not request.user.is_authenticated:
# 未登陆
return JsonResponse({'code': 0, 'errmsg': '未登陆!'}, status=401)
# 获取用户对象,构造响应参数
return JsonResponse({
'code': 0,
'errmsg': 'ok',
'info_data': {
'username': request.user.username,
'mobile': request.user.mobile,
'email': request.user.email
}
})
-
(2)其实Django提供有登陆验证拓展类
LoginRequiredJSONMixin
使用:
我们只需在视图函数中继承该类即可(以后每个继承该类的视图,需要登录状态才可以访问视图函数)。 -
(3)由于业务中规定,如果用户未登录,也应该返回数据给前端,但该类规定如果用户未登录,会自动重定向到
Django的登录主页
。源码如下图。所以我们应该重写该拓展类。
- 重写:
新建meiduo_mall/utils/views.py
文件,并自定义登陆验证拓展类LoginRequiredJSONMixin
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import JsonResponse
class LoginRequiredJSONMixin(LoginRequiredMixin):
def handle_no_permission(self):
# 该函数返回值就是没有登陆的时候,视图的返回
return JsonResponse({'code': 400, 'errmsg': '未登陆'}, status=401)