日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django--form验证及错误处理

發(fā)布時(shí)間:2025/3/13 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django--form验证及错误处理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


需求

from表單驗(yàn)證和ajax驗(yàn)證時(shí)返回的錯(cuò)誤信息處理


速查

1、form表單提交時(shí)錯(cuò)誤信息顯示

views

12error = form表單實(shí)例化對(duì)象.errorsreturn render(request,'前端html',{'obj':form表單實(shí)例化對(duì)象,'error':error})??? #傳到前端用simple_tag解析

html

12{% load xx %}??? <!--導(dǎo)入自定義sample_tag語言文件--><span>{% error_msg error.username %}</span>??? <!--error.username當(dāng)做參數(shù)傳給error_msg函數(shù),并獲取返回值-->

simple_tag

12345@register.simple_tagdef error_msg(error_list):????if error_list:????????return error_list[0]????return ''

2、ajax提交時(shí)錯(cuò)誤信息返回

views

12error = obj.errors.as_json()return HttpResponse(error)

html

123456$.ajax({????????????success: function(arg){??????????????? //arg是返回值,必須是字符串????????????????var callback_dict = $.parseJSON(arg);????????????????$('#uname_error').text(callback_dict.username[0].message);????????????}????????})



知識(shí)點(diǎn)

obj=表單生成文件.表單創(chuàng)建的類(request.POST)

request.POST:所有提交信息

obj.is_valid():判斷提交數(shù)據(jù)是否正確

obj.clean():獲取提交的所有數(shù)據(jù)

obj.errors():獲取提交的所有錯(cuò)誤信息,有三種表示方式(as_ul、as_json、as_data):

  • form表單提交用默認(rèn)的,type<class django.forms.utils.ErrorDict>

  • ajax返回信息用as_json(),type<'str'>

錯(cuò)誤信息里包含的字段和form里的字段一樣,錯(cuò)誤是個(gè)列表,取值obj.errors['username'][0]

html中jinja2語法取字典是不能用errors['key']的方式,得用errors.key;如果獲取obj.errors['username'][0],就得用sample_tag


詳細(xì)

1、form表單提交時(shí)錯(cuò)誤信息顯示

app01/views/account.py
1234567891011from app01.forms import account as AccountFormdef login(request):????obj = AccountForm.LoginForm(request.POST)????if request.method=='POST':????????if obj.is_valid():????????????all_data = obj.clean()????????else:????????????error = obj.errors????????????return render(request,'account/login.html',{'obj':obj,'error':error})????return render(request,'account/login.html',{'obj':obj})

為什么使用sample_tag去取值,而不取好了再傳到html,因?yàn)槿绻侄魏芏嗟脑?#xff0c;要分別定義每個(gè)的錯(cuò)誤;

templates/login.html
12345678910111213141516{% load xx %}??? <!--導(dǎo)入自定義sample_tag語言文件--><html lang="en"><head></head><body>????<form action="/login/" method="post">????????<p>????????????{{ obj.username }}????????????<span>{% error_msg error.username %}</span>??? <!--error.username當(dāng)做參數(shù)傳給error_msg函數(shù),并獲取返回值-->????????</p>????????<p>????????????{{ obj.password }}<span>{% error_msg error.password %}</span>????????</p>????????<input type="submit" value="submit" />????</form></body></html>
app01/templatetags/xx.py
12345678910from django import templatefrom django.utils.safestring import mark_safefrom django.template.base import resolve_variable, Node, TemplateSyntaxErrorregister = template.Library()@register.simple_tagdef error_msg(error_list):????if error_list:????????return error_list[0]
browser


2、ajax提交時(shí)錯(cuò)誤信息返回

ajax必須返回的是字符串,所以用as_json()格式。

先看as_json獲取的信息格式

12345678{????"username": [????????{"message": "This field is required.", "code": "required"}????],????"password": [????????{"message": "This field is required.", "code": "required"}????]}

app01/views/account.py

1234567891011from app01.forms import account as AccountFormdef login(request):????obj = AccountForm.LoginForm(request.POST)????if request.method=='POST':????????if obj.is_valid():????????????all_data = obj.clean()????????else:????????????error = obj.errors.as_json()????????????return HttpResponse(error)????return render(request,'account/login.html',{'obj':obj})

templates/login.html

1234567891011121314151617181920212223242526272829<form action="/login/" method="post">????<p>????????{{ obj.username }}????????<span id="uname_error"></span>????</p>????<p>????????{{ obj.password }}????????<span id="pwd_error"></span>????</p>{#??????? <input type="submit" value="submit" />#}????<input type="button" value="AjaxSubmit" onclick="AjaxSubmit();"/></form><script src="{{ STATIC_URL }}js/jquery-2.1.4.min.js"></script><script type="text/javascript">????function AjaxSubmit(){????????$.ajax({????????????url: '/login/',????????????type: 'POST',????????????data: {'username':'','password':''},??? //就當(dāng)提交了一個(gè)空數(shù)據(jù),制造錯(cuò)誤????????????success: function(arg){??????????????? //arg是返回值,必須是字符串????????????????var callback_dict = $.parseJSON(arg);????????????????$('#uname_error').text(callback_dict.username[0].message);????????????????$('#pwd_error').text(callback_dict.password[0].message);{#??????????????????? console.log(callback_dict.username[0].message)#}????????????}????????})????}</script>

app01/forms/account.py

12345from django import formsclass LoginForm(forms.Form):????username = forms.CharField()????password = forms.CharField(widget=forms.PasswordInput())

browser
























來自為知筆記(Wiz)

轉(zhuǎn)載于:https://www.cnblogs.com/daliangtou/p/5307087.html

總結(jié)

以上是生活随笔為你收集整理的Django--form验证及错误处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。