這篇文章給大家介紹使用Django怎么實(shí)現(xiàn)一個(gè)注冊(cè)功能模塊,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
靖邊ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!forms組件進(jìn)行表單驗(yàn)證;
用戶頭像前端實(shí)時(shí)展示;
ajax發(fā)送post請(qǐng)求;
應(yīng)用forms組件實(shí)現(xiàn)用戶輸入信息的校驗(yàn)。首先在app目錄下創(chuàng)建一個(gè)myform.py的文件。
如果你的項(xiàng)目至始至終只用到一個(gè)forms組件那么你可以直接建一個(gè)py文件書寫即可。
但是如果你的項(xiàng)目需要使用多個(gè)forms組件,那么你可以創(chuàng)建一個(gè)myforms文件夾在文件夾內(nèi),根據(jù)forms組件功能的不同創(chuàng)建不同的py文件。
regform.py
loginform.py
userform.py
orderform.py
......
# 書寫針對(duì)用戶表的forms主鍵代碼 from django import forms from app01 import models class MyRegForm(forms.Form): username = forms.CharField(label='用戶名',min_length=3,max_length=8, error_messages={ 'required':'用戶名不能為空', 'min_length':'用戶名最少3位', 'max_length':'用戶名較大8位' }, # 還需要讓標(biāo)簽有Bootstrap樣式 widget=forms.widgets.TextInput(attrs={'class':'form-control'}) ) password = forms.CharField(label='密碼',min_length=3,max_length=8, error_messages={ 'required':'密碼不能為空', 'min_length':'密碼最少3位', 'max_length':'密碼較大8位' }, # 還需要讓標(biāo)簽有Bootstrap樣式 widget=forms.widgets.PasswordInput(attrs={'class':'form-control'}) ) confirm_password = forms.CharField(label='確認(rèn)密碼',min_length=3,max_length=8, error_messages={ 'required':'確認(rèn)密碼不能為空', 'min_length':'確認(rèn)密碼最少3位', 'max_length':'確認(rèn)密碼較大8位' }, # 還需要讓標(biāo)簽有Bootstrap樣式 widget=forms.widgets.PasswordInput(attrs={'class':'form-control'}) ) email = forms.EmailField(label='郵箱', error_messages={ 'required': '郵箱不能為空', 'invalid':'郵箱格式不正確', }, widget=forms.widgets.EmailInput(attrs={'class':'form-control'}) ) # 鉤子函數(shù) # 局部鉤子:校驗(yàn)用戶名是否已存在 def clean_username(self): username = self.cleaned_data.get('username') # 去數(shù)據(jù)庫(kù)中校驗(yàn) is_exist = models.UserInfo.objects.filter(username=username) if is_exist: # 提示信息 self.add_error('username','用戶名已存在') return username # 全局鉤子:校驗(yàn)兩次密碼是否一致 def clean(self): password = self.cleaned_data.get('password') confirm_password = self.cleaned_data.get('confirm_password') if not password == confirm_password: self.add_error('confirm_password','兩次密碼不一致') return self.cleaned_data
然后在urls.py
中配置注冊(cè)頁(yè)的路由信息。
from django.contrib import admin from django.urls import path from app01 import views urlpatterns = [ path('admin/', admin.site.urls), path('register/',views.register,name='reg'), ]
在視圖函數(shù)views.py
中編寫forms組件檢驗(yàn)、ajax發(fā)送的post請(qǐng)求獲取數(shù)據(jù)、調(diào)用django orm功能存儲(chǔ)數(shù)據(jù)、將后端的處理結(jié)果返回給前端進(jìn)行校驗(yàn)。
from app01.myforms import MyRegForm from app01 import models from django.http import JsonResponse # Create your views here. def register(request): form_obj = MyRegForm() if request.method == 'POST': # 定義返回給前端的js數(shù)據(jù)結(jié)果 back_dic = {"code": 1000, 'msg': ''} # 校驗(yàn)數(shù)據(jù)是否合法 form_obj = MyRegForm(request.POST) # 判斷數(shù)據(jù)是否合法 if form_obj.is_valid(): # form_obj.cleaned_data:{'username': 'zhangsan', 'password': '123456', 'confirm_password': '123456', 'email': '123@qq.com'} # 將校驗(yàn)通過(guò)的數(shù)據(jù)字典賦值給一個(gè)變量 clean_data = form_obj.cleaned_data # 將字典里面的confirm_password鍵值對(duì)刪除 clean_data.pop('confirm_password') # {'username': 'zhangsan', 'password': '123456', 'email': '123@qq.com'} # 注意用戶頭像是一個(gè)圖片的文件,request.POST中只有鍵值對(duì)的數(shù)據(jù) file_obj = request.FILES.get('avatar') """ 針對(duì)用戶頭像一定要判斷是否傳值,不能直接添加到字典里面去 否則file_obj=None,會(huì)將數(shù)據(jù)庫(kù)中默認(rèn)的圖片路徑覆蓋。 """ if file_obj: # 向字典數(shù)據(jù)clean_data中增加一個(gè)圖片頭像的字段 clean_data['avatar'] = file_obj # 操作數(shù)據(jù)庫(kù)保存數(shù)據(jù) models.UserInfo.objects.create_user(**clean_data) # 注冊(cè)成功則跳轉(zhuǎn)到登錄頁(yè)面 back_dic['url'] = '/login/' else: back_dic['code'] = 2000 # 校驗(yàn)存在錯(cuò)誤 back_dic['msg'] = form_obj.errors # 將字典類型的數(shù)據(jù)封裝成json返回到前端 return JsonResponse(back_dic) return render(request,'register.html',locals())
前端的注冊(cè)頁(yè)面:register.html
用戶注冊(cè) 注冊(cè)
【重難點(diǎn)】在于書寫JS處理邏輯:包括了圖片上傳加載、ajax發(fā)送的post請(qǐng)求以及后端注冊(cè)結(jié)果的信息處理。
關(guān)于使用Django怎么實(shí)現(xiàn)一個(gè)注冊(cè)功能模塊就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。