【django】用户登录之判断用户是否登录【21】

导读:本篇文章讲解 【django】用户登录之判断用户是否登录【21】,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、展示⽤户中⼼⻚⾯

定义路由

from django.urls import path,re_path
from . import views
from django.contrib.auth.decorators import login_required

urlpatterns=[
    re_path('^register/$',views.RegisterView.as_view()),
    re_path('^usernames/(?P<username>[a-zA-Z_]{5,8})/count/$',views.UsernameCount.as_view()),
    re_path('^logout/$',views.LogoutView.as_view()),
    re_path('^phones/(?P<phone>1[3589][0-9]{9})/count/$',views.PhoneCountView.as_view()),
    re_path('^login/$',views.LoginView.as_view()),
    re_path('^usercenter/$',views.UserCenterView.as_view())
]

定义视图

import re

from django.shortcuts import render
from django.http import HttpResponse,JsonResponse
from django.views.generic.base import View
from mgproject. utils.exceptions import Forbbiden
from . models import Users
from django.db import DatabaseError
from django.contrib.auth import login,logout,authenticate
from django.shortcuts import redirect
from django.urls import reverse
from django import http

# Create your views here.
class UserCenterView(View):
    def get(self,request):
        '''
        显示用户中心页面
        :param request:
        :return:
        '''
        return render(request, 'userapp/user_center.html')

访问http://127.0.0.1:8000/login/?next=/usercenter/,进入了用户中心页面

需求:

当⽤户登录后,才能访问⽤户中⼼。
如果⽤户未登录,就不允许访问⽤户中⼼,将⽤户引导到登录界⾯。

实现⽅案:

需要判断⽤户是否登录。
根据是否登录的结果,决定⽤户是否可以访问⽤户中⼼。

二、is_authenticate 判断⽤户是否登录

介绍:
Django⽤户认证系统提供了⽅法request.user.is_authenticated()来判断⽤户是否登录。
如果通过登录验证则返回True。反之,返回False。
缺点:登录验证逻辑很多地⽅都需要,所以该代码需要重复编码好多次。

class UserCenterView(View):
    def get(self,request):
        '''
        显示用户中心页面
        :param request:
        :return:
        '''

        #判断当前访客是否登录
        if request.user.is_authenticated:
            return render(request,'userapp/user_center.html')
        else:
            return redirect(reverse('newsapp:index'))

三、login_required装饰器 判断⽤户是否登录

Django⽤户认证系统提供了装饰器login_required来判断⽤户是否登录。
内部封装了is_authenticate
位置:django.contrib.auth.decorators
如果通过登录验证则进⼊到视图内部,执⾏视图逻辑。
如果未通过登录验证则被重定向到LOGIN_URL配置项指定的地址。

如下配置:表示当⽤户未通过登录验证时,将⽤户重定向到登录⻚⾯。

# settings/dev.py 
LOGIN_URL = '/login/'

1、装饰as_view()⽅法返回值
提示:
login_required装饰器可以直接装饰函数视图,但是本项⽬使⽤的是类视图。

as_view()⽅法的返回值就是将类视图转成的函数视图。 结论:

要想使⽤login_required装饰器装饰类视图,可以间接的装饰as_view()⽅法的返回值,以达到预期效果。

from django.urls import path,re_path
from . import views
from django.contrib.auth.decorators import login_required

urlpatterns=[
    re_path('^register/$',views.RegisterView.as_view()),
    re_path('^usernames/(?P<username>[a-zA-Z_]{5,8})/count/$',views.UsernameCount.as_view()),
    re_path('^logout/$',views.LogoutView.as_view()),
    re_path('^phones/(?P<phone>1[3589][0-9]{9})/count/$',views.PhoneCountView.as_view()),
    re_path('^login/$',views.LoginView.as_view()),
    re_path('^usercenter/$',login_required(views.UserCenterView.as_view()))
]

类视图

class UserCenterView(View):
    def get(self,request):
        '''
        显示用户中心页面
        :param request:
        :return:
        '''
        return render(request, 'userapp/user_center.html')

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/74083.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!