根據(jù)請(qǐng)求方式的不同(post、get),來調(diào)用views.py文件中不同的方法(例如:post請(qǐng)求的話就調(diào)用redirect(reverse('goods:index222')),get請(qǐng)求的話就調(diào)用 render(request,'register.html'))。
urls.py文件中的代碼
from django.conf.urls import url
from apps.user.views import RegisterView
urlpatterns = [
url(r'^register',RegisterView.as_view(),name='register'),
]
views.py文件中的代碼

image.png
from django.shortcuts import render,redirect
from django.urls import reverse
from apps.user.models import User
#繼承View
from django.views.generic import View
import re
class RegisterView(View):
'''注冊(cè)'''
def get(self,request):
# GET請(qǐng)求方式的話,就顯示注冊(cè)界面的UI
return render(request,'register.html')
def post(self,request):
# POST請(qǐng)求方式的話,就進(jìn)行用戶注冊(cè)邏輯處理
username = request.POST.get('user_name')
password = request.POST.get('pwd')
email = request.POST.get('email')
allow = request.POST.get('allow')
# 進(jìn)行數(shù)據(jù)校驗(yàn)
if not all([username, password, email]):
# 數(shù)據(jù)不完整
return render(request, 'register.html', {'errmsg': 'CoderZB提醒:數(shù)據(jù)不完整'})
# 校驗(yàn)郵箱
if not re.match(r'^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$', email):
return render(request, 'register.html', {'errmsg': 'CoderZB提醒:郵箱格式不正確'})
if allow != 'on':
return render(request, 'register.html', {'errmsg': 'CoderZB提醒:請(qǐng)同意協(xié)議'})
# 校驗(yàn)用戶名是否存在
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
# 用戶名不存在
user = None
if user:
# 用戶名已存在
return render(request, 'register.html', {'errmsg': 'CoderZB提醒:用戶名已存在'})
# 進(jìn)行業(yè)務(wù)處理:進(jìn)行用戶注冊(cè)
user = User.objects.create_user(username, email, password)
# 寫上這句代碼,數(shù)據(jù)庫里面存儲(chǔ)的當(dāng)前用戶的is_active字段就為0(未激活),不加這行代碼is_active就為1
user.is_active = 0
user.save()
# 返回應(yīng)答,跳轉(zhuǎn)到首頁
return redirect(reverse('goods:index222'))
我實(shí)際的頁面執(zhí)行步驟

image.png
使用類視圖的話,注冊(cè)頁面的顯示訪問的是127.0.0.1:8000/user/register,那么點(diǎn)擊注冊(cè)按鈕也必須通過/user/register的方式訪問,不能通過/user/register_handle的訪問。

image.png
如果堅(jiān)持不改的話,會(huì)造成訪問的路徑不一致,導(dǎo)致正則匹配無法匹配到任何URL。如下動(dòng)圖效果

101.175518.gif