判断用户是否登录

用户中心页面规定:
当用户登录后,才能访问用户中心

如果用户未登录,就不允许访问用户中心,将用户引导到登录界面

  • (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)
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值