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