djangoForm组件
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>
2 表单功能

浙公网安备 33010602011771号