這篇文章給大家分享的是有關(guān)Python中如何使用django form表單驗證的方法的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、富川ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學管理、有技術(shù)的富川網(wǎng)站制作公司python常用的庫:1.requesuts;2.scrapy;3.pillow;4.twisted;5.numpy;6.matplotlib;7.pygama;8.ipyhton等。
一. django form表單驗證引入
有時時候我們需要使用get,post,put等方式在前臺HTML頁面提交一些數(shù)據(jù)到后臺處理例 ;
Form
前端提交后臺獲?。?/p>
from django.shortcuts import render,HttpResponse,redirect from app01 import models def Login(request): if request.method == "POST": username = request.POST.get("username") password = request.POST.get("password") return HttpResponse("Hello,%s"%(username))
這樣就完成了基本的功能,基本上可以用了。
但是,如果用戶輸入并未按照要求(比如手機號要輸數(shù)據(jù)11位長度,密碼的復(fù)雜度等),還有就是提交后再回來已經(jīng)輸入的數(shù)據(jù)也會沒了
當然如果我們手動將輸入之后的數(shù)據(jù)在 views 中都獲取到再傳遞到網(wǎng)頁,這樣是可行的,但是很不方便,所以 Django 提供了更簡單易用的 forms 來解決驗證等這一系列的問題
,在這里不得不提Django的插件庫真的很強大,簡單易擴展,上面的內(nèi)容只是引進為什么要使用form,下面著重記錄django form的使用
二.form表單驗證應(yīng)用
需要在django的APP中新建一個模塊form.py,具體內(nèi)容如下
class RegisterForm(forms.Form): email = forms.EmailField(required=True, error_messages={'required': "郵箱不能為空"}) password = forms.CharField(max_length=120, min_length=6, required=True, error_messages={'required': "密碼不能為空"}) invite_code = forms.CharField(required=True,error_messages={'required': "驗證碼不能為空"})
前端頁面
register
后臺views處理
def register(request): if request.method == "POST": f = Reg_Form(request.POST) if f.is_valid(): user = f.cleaned_data["username"] pwd = f.cleaned_data["password"] code = f.cleaned_data["code"] res_code = request.session.get("code", None) result = models.UserInfo.objects.filter(user__exact=user,pwd__exact=pwd) if code.upper() == res_code.upper() and result: models.UserInfo.objects.filter(user__exact=user).update(status=1) request.session["user"] = user return redirect("/home") else: return render(request, "register.html", {"error": f.errors, "form": f})else:return render(request, "register.html")
Reg_Form(request.POST) 使用form類來處理提交的數(shù)據(jù)來驗證數(shù)據(jù)的合法性,is_valid()合法后的邏輯處理,驗證后的數(shù)據(jù)保存在實例化后返回的cleaned_data中,
cleaned_data是個字典的數(shù)據(jù)格式,錯誤信息保存在form.errors中比如說想在views中查看所有報錯信息print(f.errors),如果只想看用戶的可以
print(form.errors['username'][0])
錯誤信息我們可以通過 模板渲染回前端頁面,例
三.自生成input框
Form類
class RegisterForm(forms.Form): style = 'form-control input-lg' phone = forms.CharField(widget=forms.TextInput(attrs={'class': style, 'name': 'title'})), required=True, error_messages={'required': ugettext_lazy('*Required')}) code = forms.CharField(widget=forms.NumberInput(attrs={'placeholder': '驗證碼', 'class': style}), min_length=4, max_length=4, required=True, error_messages={'required': ugettext_lazy('*Required')}) password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': '請輸入密碼', 'class': style}), min_length=6, required=True, error_messages={'required': ugettext_lazy('*Required')})
views
def register(request): if request.method == "POST": f = RegisterForm(request.POST) if f.is_valid(): user = f.cleaned_data["username"] pwd = f.cleaned_data["password"] code = f.cleaned_data["code"] res_code = request.session.get("CheckCode", None) result = models.UserInfo.objects.filter(user__exact=user,pwd__exact=pwd) if code.upper() == res_code.upper() and result: models.UserInfo.objects.filter(user__exact=user).update(status=1) request.session["user"] = user return redirect("/home") else: return render(request, "login.html", {"error": f.errors, "form": f}) else: return render(request, "login.html", {"error": f.errors, "form": f}) else: # 如果不是post提交數(shù)據(jù),就不傳參數(shù)創(chuàng)建對象,并將對象返回給前臺,直接生成input標簽,內(nèi)容為空 f = Log_Form() return render(request, "login.html", {"form": f})
前端頁面