用戶注冊(cè)案例(form寫法)

image.png

一、切入點(diǎn)使用form

讓頁(yè)面生成寫好的表單,從form切入,注冊(cè)用戶名,昵稱,密碼,確認(rèn)密碼,郵箱,驗(yàn)證碼

  • 常用的函數(shù)

  • {{obj_register.non_field_errors.0}}顯示all
  • from django.core.validators import RegexValidator用來寫正則的
  • from django.core.exceptions import ValidationError用來捕獲clean異常的
  • from django import forms 用來繼承的
  • from django.forms import fields 用來調(diào)用字段的
  • from django.forms import widgets 用來引入頁(yè)面插件的
  • 注意點(diǎn)

  • 驗(yàn)證碼判斷

首先我們將驗(yàn)證是儲(chǔ)存在session中,而session是在request中,這里我們需要構(gòu)造一個(gè)繼承的函數(shù),給我們form表單函數(shù)加入一個(gè)屬性

class Base(object):
    def __init__(self,request,*args,**kwargs):
        self.request = request
        super(Base,self).__init__(*args,**kwargs)
  • clean_name 重寫
  • 用戶名、郵箱、判斷是結(jié)合數(shù)據(jù)庫(kù)查找判斷是否存在
  • 驗(yàn)證碼是去session判斷
  • 多字段判斷clean
  • 判斷兩次輸入的密碼是否正確使用clean
    當(dāng)我們想給某個(gè)字段加上額外的判斷時(shí)候,一定要重寫clean_name
  • widgets.TextInput 為標(biāo)簽屬性賦值
  • widgets.CheckboxInput({'value':"0"}),checkbox設(shè)置
from  django import forms
from  django.forms import fields
from  django.core.validators import RegexValidator
from .base import Base
from repository import models
from django.core.exceptions import  ValidationError
from django.forms import widgets
class accountform(Base,forms.Form):
    username = fields.CharField(
        label= "用名",
        widget= widgets.TextInput(attrs={'class':'form-control'}),
        validators=[RegexValidator(r'^[a-zA-Z0-9_-]{4,16}$','4到16位(字母,數(shù)字,下劃線,減號(hào))')],
        error_messages = {'required':'不能為空',}
    )

    nickname = fields.CharField(
        label="昵稱",

        widget=widgets.TextInput(attrs={'class': 'form-control'}),
        validators=[RegexValidator(r'^[a-zA-Z0-9_-]{4,16}$', '4到16位(字母,數(shù)字,下劃線,減號(hào))')],
        error_messages={'required': '不能為空', }
    )
    password = fields.CharField(
        label="密碼",
        widget=widgets.PasswordInput(attrs={'class': 'form-control'}),
        validators=[RegexValidator(r'^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$','以字母開頭,字母,數(shù)字,減號(hào),下劃線')]
        ,error_messages = {'required': '不能為空', }
    )

    confirm_password = fields.CharField(
        label="密碼",
        widget=widgets.PasswordInput(attrs={'class': 'form-control'}),
        validators=[RegexValidator(r'^[a-zA-Z]([a-zA-Z0-9]{5,19})+$', '以字母開頭,字母,數(shù)字,減號(hào),下劃線')]
        ,error_messages = {'required':'不能為空',}
     )

    email = fields.EmailField(
        label="郵箱",
        widget=widgets.TextInput(attrs={'class': 'form-control'}),
        error_messages={'inisvalid':'請(qǐng)輸入正確的郵箱','required':'郵箱不能為空'})

    check_code = fields.CharField(
        label="驗(yàn)碼",
        error_messages={'required':'驗(yàn)證碼不能為空'}
    )

    # avatar_img = fields.ImageField(
    #     label="頭像",
    #     error_messages={'invalid_image':"請(qǐng)上傳圖片類型",'required':'不能為空'}
    # )

    def clean_username(self):
        v = self.cleaned_data['username']
        have_name = models.UserInfo.objects.filter(username=v).count()
        if have_name:
            raise ValidationError('用戶名存在')
        return v

    def clean_email(self):
        v = self.cleaned_data['email']
        has_email = models.UserInfo.objects.filter(email=v).count()
        if has_email:
            raise ValidationError('郵箱存在')
        return v

    def clean_check_code(self):
        v = self.cleaned_data['check_code']
        if self.request.session.get('CheckCode').upper() != v.upper():
            raise ValidationError('驗(yàn)證碼錯(cuò)誤')
        return v
    def clean(self):
        value_dict = self.cleaned_data
        paw = value_dict.get('password')
        con_pax = value_dict.get('confirm_password')
        print(paw)
        if paw != con_pax:
            raise ValidationError('密碼不一致')
        return  value_dict


最后編輯于
?著作權(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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 在上一個(gè)章節(jié),我們已經(jīng)創(chuàng)建了一個(gè)基礎(chǔ)的Blog程序?,F(xiàn)在我們將使用一些Dajngo高級(jí)功能,去實(shí)現(xiàn)一個(gè)完整的blo...
    金金剛狼閱讀 3,755評(píng)論 1 12
  • ModelForm 請(qǐng)參考官方文檔 一、Form組件初識(shí) 參考博客一 武沛奇老師博客參考博客二 Django的F...
    CaiGuangyin閱讀 3,822評(píng)論 1 3
  • 關(guān)于JET是新式的Django管理界面并且增強(qiáng)了功能。 內(nèi)容 文檔 開始 安裝django-jet 安裝儀表盤...
    CNSumi閱讀 8,028評(píng)論 2 15
  • 小時(shí)候在姥姥家的小農(nóng)村上的小學(xué),那里每天中午都要自己帶飯,那個(gè)時(shí)候,每家每戶也不是很富裕,雖然姥爺開小賣部還算不錯(cuò)...
    美啦美啦美啦閱讀 203評(píng)論 0 0
  • 三伏已過,暑熱未消。 本以為今天會(huì)是個(gè)適合外出活動(dòng)的陰涼天,誰(shuí)知道我們幾個(gè)又曬黑了一層回來,哈哈! 早早地叫醒了苗...
    飄揚(yáng)007閱讀 753評(píng)論 0 3

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