一、展示?户中???
定义路由
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
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配置项指定的地址。 如下配置:表示当?户未通过登录验证时,将?户重定向到登录??。
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')
|