标签:有一个 部件 动作 att res ber clean boolean 导入
django中的表单继承自forms.Form:
主要功能有两个:页面渲染和表单数据验证
一般都是用来做表单验证
如果想从表单接收用户名数据,一般情况下,需要在HTML中手动编写一个如下的表单元素:
<form action="/your-name/" method="post"> <label for="your_name">Your name: </label> <input id="your_name" type="text" name="your_name" value="{{ current_name }}"> <input type="submit" value="OK"> </form>
使用django的表单
在Django中,Form类来自用生成上面的表单,不再需要手动在HTML中编写。
首先,在当前app内新建一个forms.py
文件(这个套路是Django的惯用手法,就像views.py
,models.py
等等),然后输入下面的内容:
from django import forms class NameForm(forms.Form): your_name = forms.CharField(label=‘Your name‘, max_length=100)
要点:
<form>
元素中的表单元素。这一点和Django模型系统的设计非常相似。max_length
限制最大长度为100。它同时起到两个作用,一是在浏览器页面限制用户输入不可超过100个字符,二是在后端服务器验证用户输入的长度不可超过100。(警告:由于浏览器页面是可以被篡改、伪造、禁用、跳过的,所有的HTML手段的数据验证只能防止意外不能防止恶意行为,是没有安全保证的,破坏分子完全可以跳过浏览器的防御手段伪造发送请求!所以,在服务器后端,必须将前端当做“裸机”来对待,再次进行完全彻底的数据验证和安全防护!)
每个Django表单的实例都有一个内置的is_valid()
方法,用来验证接收的数据是否合法。如果所有数据都合法,那么该方法将返回True,并将所有的表单数据转存到它的一个叫做cleaned_data
的属性中,该属性是以个字典类型数据。
上边的表单在前端会渲染成
<label for="your_name">Your name: </label> <input id="your_name" type="text" name="your_name" maxlength="100" required />
一定要注意,它不包含<form>
标签本身以及提交按钮!!!为什么要这样?方便你自己控制表单动作和CSS,JS以及其它类似bootstrap框架的嵌入!
上边只是简单的一个例子,还有很多属性
在class NameForm(forms.Form)中,
属性=forms.类型(参数)
类型和html标签类型的对应关系如下:
1.类型:
1.BooleanField:checkbox
2.CharField:text
3.ChoiceField:select
4.EmailField:email
5.URLField:url
6.DateField:date
7.IntegerField:number
2.参数:
1.required 默认为True,表示该控件不能为空
2.label 控件前面的文本
3.initial 控件的初始化值,相当于value
4.widget 指定控件的小部件
5.error_message 错误时候的文本提示
6.disabled 为True时表示该空间会被禁用
widget小部件:生成到网页上的控件
Textinput:type="text"
Passwordinput:type="paddword"
Numberinput:type="number"
Emailinput:type="email"
URLinput:type="url"
Hiddeninput:type="hidden"
Textarea:<textarea>
CheckboxSelectMultipe:type="checkbox"
RadioSelect:type="radio"
Select:<select>
SelectMultipe:<select multipe>
widget小部件的使用:
属性=forms.CharField(
label="用户",
widget=forms.小部件类型)
属性=forms.CharField(
label="用户",
widget=forms.小部件类型(
attrs={
"html属性值":"值"}))
# views.py from django.shortcuts import render from django.http import HttpResponseRedirect from .forms import NameForm def get_name(request): # 如果form通过POST方法发送数据 if request.method == ‘POST‘: # 接受request.POST参数构造form类的实例 form = NameForm(request.POST) # 验证数据是否合法 if form.is_valid(): # 处理form.cleaned_data中的数据 # ... # 重定向到一个新的URL return HttpResponseRedirect(‘/thanks/‘) # 如果是通过GET方法请求数据,返回一个空的表单 else: form = NameForm() return render(request, ‘name.html‘, {‘form‘: form})
要点是:
通过表单的is_bound
属性可以获知一个表单已经绑定了数据,还是一个空表。
xxx.html
<form action="/your-name/" method="post"> {% csrf_token %} {{ form }} <input type="submit" value="Submit" /> </form>
要点:
<form>...</form>
标签要自己写;{% csrf_token %}
标签,用于处理csrf安全机制;{{ form }}
代表Django为你生成其它所有的form标签元素,也就是我们上面做的事情;提示:默认情况下,Django支持HTML5的表单验证功能,比如邮箱地址验证、必填项目验证等等。
不仅可以通过{{ form }}渲染
模板,还有更多的方式:
{{ form.as_table }}
将表单渲染成一个表格元素,每个输入框作为一个<tr>
标签{{ form.as_p }}
将表单的每个输入框包裹在一个<p>
标签内 tags{{ form.as_ul }}
将表单渲染成一个列表元素,每个输入框作为一个<li>
标签注意:你要自己手动编写<table>
和<ul>
标签。
标签:有一个 部件 动作 att res ber clean boolean 导入
原文地址:https://www.cnblogs.com/pfeiliu/p/11929267.html