Django登录跳转login_required

login_required是对Auth认证模块的补充,Auth模块:  https://www.cnblogs.com/weiyiming007/p/12419317.html


1、login_required介绍

判断用户是否登录, 如果用户没有登录, 默认会跳转到'/accounts/login/', 并且URL会自动加上你请求的url作为登录后的跳转地址, 
如:'/accounts/login/?next=/user/address/'登入完后会去请求'/user/address/', 如果登录了, 会正常执行;


可以在settings.py中设置默认跳转地址, 如:

LOGIN_URL = '/login.html'


2、login_required使用

1)函数视图使用

from django.contrib.auth.decorators import login_required
      
@login_required   #添加一个登录校验的装饰器,登录成功才会走到下面,否则会跳转到django默认的登录
def my_view(request):
  ...


2)类视图使用

方法一:将views.UserOrderViews.as_view()当做参数传入login_required

from django.contrib.auth.decorators import login_required
from . import views

app_name = 'user'

urlpatterns = [
    url(r'^login/', views.LoginView.as_view(), name='login'),
    url(r'^order/', login_required(views.UserOrderView.as_view())),
]


方法二:    重写as_view方法, 让类视图继承该父类

utils/mixin.py
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)


views.py中让类视图继承上面的工具类:

from utils.mixin import LoginRequiredMixin

class IndexView(LoginRequiredMixin,View):
    def get(self, request, *args, **kwargs):
        return render(request, 'index.html')
原文地址:https://www.cnblogs.com/weiyiming007/p/12660601.html