Django類視圖as_view()的原理和操作不當(dāng)造成的相關(guān)問題。

根據(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 切換到創(chuàng)建項(xiàng)目的目錄 cd C:\Users\admin\Desktop\DjangoProject創(chuàng)建名為pr...
    在努力中閱讀 3,537評(píng)論 2 3
  • 此段內(nèi)容簡要來自自強(qiáng)學(xué)堂的教程詳情請(qǐng)查詢自強(qiáng)學(xué)堂 一、 后臺(tái)的運(yùn)作流程 接收request請(qǐng)求 處理數(shù)據(jù) 獲取請(qǐng)求...
    coder_ben閱讀 5,345評(píng)論 6 56
  • 用戶注冊(cè)并向163郵箱發(fā)送郵件(兩種方式:同步和異步,ubuntu和windows上的不同) **********...
    楚糖的糖閱讀 1,551評(píng)論 0 5
  • 模塊間聯(lián)系越多,其耦合性越強(qiáng),同時(shí)表明其獨(dú)立性越差( 降低耦合性,可以提高其獨(dú)立性)。軟件設(shè)計(jì)中通常用耦合度和內(nèi)聚...
    riverstation閱讀 2,212評(píng)論 0 8
  • 一、斷舍離 物《斷舍離》停止購買、舍棄換季小長假實(shí)施 食、對(duì)身體斷舍離,飲食調(diào)整;凈食 氣、好的居家辦公空間調(diào)整風(fēng)...
    小兵_快跑閱讀 193評(píng)論 0 1

友情鏈接更多精彩內(nèi)容