https://www.cnblogs.com/jabbok/p/9273786.html
在之前学习了html form信息传递到django,然后进行处理,但是这很不方便。
django有自己的组件Form
1 django Form的验证思路
前端:还是提交form表单
后端:在app.views的函数里,把请求传递到forms.py的forms.Form类,进行匹配,得到正确和错误信息。
主要有三部分只是,views里的响应机制,form.py里创建响应的表单类,html里的模板信息
views:
def user_login(request): if request.method == 'POST': #当收到POST请求 form = AddForm(request.POST) #实例化表单类,将接受到的数据通过AddForm验证 if form.is_valid(): #验证请求的内容是否验证通过。通过是True,否则False。 a = form.cleaned_data['a'] #cleaned_data类型是字典,里面是提交成功后的信息 b = form.cleaned_data['b'] #从表单类中获取的数据赋值给a,b。 return HttpResponse(str(int(a) + int(b))) else: #当收到GET请求 form = AddForm() #实例化表单类,展示表单类中的字段,表现到HTML就是<form>元素,实质就是渲染一张空表单,让用户填数据 return render(request,'index.html',{'form':form}) def get_name(request): if request.method == 'POST': form = NameForm(request.POST) print(type(form),form) if form.is_valid(): return HttpResponse('good!') else: form = NameForm() print(type(form),form) return render(request,'name.html',{'form':form})
forms
from django import forms class AddForm(forms.Form): a = forms.IntegerField() #表单类的字段会映射到HTML表单的<input>元素 b = forms.IntegerField() #这和models类似 c = forms.IntegerField() #forms可选多种字段类型,对应不同的HTML输入元素 class NameForm(forms.Form): your_name = forms.CharField(label='your name',max_length=120)
html
user_login:
{# 这是一个表单渲染#} <form method="post"> {# 防伪保护#} {% csrf_token %} {{ form }} <input type="submit" value="提交"> </form>
{{ form }}在get和post时,都会渲染为:
<tr><th><label for="id_a">A:</label></th><td><input type="number" name="a" required id="id_a"></td></tr> <tr><th><label for="id_b">B:</label></th><td><input type="number" name="b" required id="id_b"></td></tr> <tr><th><label for="id_c">C:</label></th><td><input type="number" name="c" required id="id_c"></td></tr>
getname:
<form action="/getname/" method="post"> {% csrf_token %} {{ form }} <input type="submit" value="提交"> </form>
{{ form }}在get和post的渲染,post多了一个value。
<tr><th><label for="id_your_name">your name:</label></th><td><input type="text" name="your_name" maxlength="120" required id="id_your_name"></td></tr>
<tr><th><label for="id_your_name">your name:</label></th><td><input type="text" name="your_name" value="jab" maxlength="120" required id="id_your_name"></td></tr>