使用Django自带的登录访问限制login_required

本文介绍了如何利用Django内置的login_required装饰器实现登录访问限制。当未登录用户尝试访问受保护的页面时,系统会将他们重定向到登录界面,并在URL中携带next参数。登录成功后,用户将被自动重定向回先前尝试访问的页面。如果登录后未正确跳转,可能需要在登录视图中处理next参数并进行重定向。

在网站开发过程中,经常会遇到这样的需求:

  • 用户登陆系统才可以访问某些页面

  • 如果用户没有登陆而直接访问就会跳转到登陆界面,

  • 用户在跳转的登陆界面中完成登陆后,自动访问跳转到之前访问的地

完成这样的功能其实不难,最简单的一种方法即为使用django自带的登录访问限制login_required。其使用方法非常简单,只需要在视图函数views.py中引入(login_required是一个装饰器)并装饰(所有)需要进行登录访问限制的视图函数即可,详情如下:

#views.py
...

from djanco.contrib.auth.decorators import login_required

@login_required             # 例子比较简单
def myview(request):
    return render_to_response('index.html')    # 假设其对应路由为/index/
                                                                                                              

#settings.py
....
LOGIN_URL = '/login/'  #这个路径需要根据你网站的实际登陆地址来设置,也就是登录路由
....
                                                                                                                 

以上做好以后,没有登录的情况下直接访问/index/路由(本地为127.0.0.1:8000/index/)会发现出现类似下面的界面



说明以上代码生效了,然后大家看路由地址发现有了参数?next=/index/登录成功后就会跳转路由到/index/。

如果说以上都执行后发现并没有跳转到next指向的路由,此时要注意了,注意做以下操作:

    此时我们的登录路由/login/有了参数next=/.../,我们只需要在登录的视图函数中获取到这个参数并在能获取到该next参数时重定向到next指向的路由即可,例如:

                                                                                                                                        

#views.py      在登录的视图函数逻辑中修改
def userlogin(request):
   next_to = request.GET.get('next', false)
   if request.user:       #判断用户是否登录成功
       if next_to:
       return HttpResponseRedirect( next_to )

    return render_to_response('index.html')    # 跳转到首页         

                                                                                                                                                      

如果是其它的路由/detail/等等操作都是一样的,三步走  1.挂视图(装饰器)2.设路由(登录路由)3.截跳转(获取到next就重定向)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值