django项目如何判断访问用户的登录状态并让其跳转到登录页?

这个东西,咳咳咳
有很多写法,我这里就列举三个:
1,你可以自己写一个装饰器,用在需要进行用户登录验证的视图上,
2,也可以写一个自定义中间件,过滤请求,
3,还可以写一个mixin类,帮助类视图进行验证

第一个:装饰器:

def loginValid(fun):
    def inner(request,*args,**kwargs):
        cookie = request.COOKIES.get('username')
        session = request.session.get('username')
        user_id = request.COOKIES.get('user_id')
        if cookie and session and cookie == session:
            user = Seller.objects.filter(username=cookie).first()
            if user:
                return fun(request,*args,**kwargs)
            else:
                return redirect('store:login')
        else:
            return redirect('store:login')
    return inner

这是自定义的一个简单的装饰器
利用cookie和session进行判断用户登录状态,其实单独判断session或cookie的键是否存在就行了,我这里算是多写了

如果你的用户表继承自AbstrctUser,
那么你可以使用自带的验证装饰器@login_required
但是这种装饰器装饰类的时候,需要在url中使用
例如:

url(r'content/(?P<uid>\S+)/$',login_required(views.Content.as_view()),name="content"),

这样子写会使url写的十分臃肿,且加起来也不是很方便,于是第三种方法我就提前说了:写个mixin类

from django.contrib.auth.decorators import login_required


class LoginRequiredMixin(object):
    @classmethod
    def as_view(cls,**initkwargs):
        view = super(LoginRequiredMixin,cls).as_view(**initkwargs)
        return login_required(view)

然后在想要的加登录验证的类视图中继承就好了,就像下面这样:

class Content(LoginRequiredMixin,DetailView):
    model = Article
    template_name = 'article_content.html'
    slug_field = 'uid'
    slug_url_kwarg = 'uid'

好了,这样就完成了

但是还是需要每个视图都加,很麻烦
于是乎
啊哈哈哈哈
我就用中间件了,简单快捷,浪人必备

class AccountsAuthMiddleware(object):

    def __init__(self,get_response):
        self.get_response = get_response

    def __call__(self,request, *args, **kwargs):
        ret_url = request.get_full_path()
        if ret_url[1:9] == 'accounts' and ret_url != '/accounts/user/login/' and ret_url[:22] != '/accounts/verify/code/':
            user = request.user
            if user.is_anonymous:
                return render(request,'error.html')
        response = self.get_response(request)
        return response

我写的这个中间件直接获取请求过来的地址,然后根据地址前缀判断此地址是否需要登录验证
囖囖囖,然后就ojbk了
嗯嗯,目前差不多就分享到这了

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值