Django登录跳转login_required


login_required介绍

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

设置默认跳转URL

在settings.py中通过设置LOGIN_URL参数来设定

# 配置登录url地址
LOGIN_URL = '/user/login/'

函数视图使用

views.py
from django.contrib.auth.decorators import login_required
@login_required def Order(request):
return render(request, 'user_center_order.html')

类视图使用

方法一:    将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()), name='order'),
]

方法二:    重写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)
from utils.mixin import LoginRequiredMixin
class
UserOrderView(LoginRequiredMixin, View): def get(self, request): return render(request, 'user_center_order.html', {'msg': 'order'})

登录跳转逻辑

class LoginView(View):
    def get(self, request):
        '''
        判断COOKIE中是否保存用户名, 保存了用户名则传入用户名, 达到记住用户名的效果
        :param request:
        :return:
        '''
        back_dic = {'username': '', 'checked': ''}
        if 'username' in request.COOKIES:
            back_dic['username'] = request.COOKIES.get('username', '')
            back_dic['checked'] = 'checked'
        return render(request, 'login.html', back_dic)

    def post(self, request):
        '''
        登录验证
        :param request: 
        :return: 
        '''
        back_dict = {'code': 200, 'msg': ''}
        username = request.POST.get('username', '')
        password = request.POST.get('pwd', '')
        # 使用了login_required未登录会传入next参数, 没有传入则为index
        next_url = request.GET.get('next', reverse('goods:index'))
        if not (username and password):
            back_dict['msg'] = '数据不完整!'
            return redirect(request, 'login.html', back_dict)
        user = authenticate(request, username=username, password=password)
        if user is not None:
            # 判断是否激活
            if user.is_active:
                login(request, user)
                # 跳转到next的路由
                response = redirect(next_url)
                remember = request.POST.get('remember', '')
                # 判断是否记住用户名
                if remember == 'on':
                    response.set_cookie('username', username, 7 * 24 * 3600)
                else:
                    response.delete_cookie('username')
                return response
            else:
                back_dict['msg'] = '账号未激活!'
                return render(request, 'login.html', back_dict)
        else:
            back_dict['msg'] = '用户名或密码不正确'
            return render(request, 'login.html', back_dict)

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM