小编给大家分享一下django处理表单的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!

使用表单

假设你想从表单接收用户名数据,一般情况下,你需要在HTML中手动编写一个如下的表单元素:

<formaction="/your-name/"method="post"><labelfor="your_name">Yourname:</label><inputid="your_name"type="text"name="your_name"value="{{current_name}}"><inputtype="submit"value="OK"></form>

<form action="/your-name/" method="post">这一行定义了我们的发送目的地/your-name/和HTTP方法POST。form元素内部还定义了一个说明标签<label>和一个发送按钮‘submit’,以及最关键的接收用户输入的<input>元素。

一、编写表单类

我们可以通过Django提供的Form类来自用生成上面的表单,不再需要手动在HTML中编写。

首先,在你当前app内新建一个forms.py文件(这个套路是Django的惯用手法,就像views.py,models.py等等),然后输入下面的内容:

fromdjangoimportformsclassNameForm(forms.Form):your_name=forms.CharField(label='Yourname',max_length=100)

提前导入forms模块所有的表单类都要继承forms.Form类每个表单字段都有自己的字段类型比如CharField,它们分别对应一种HTML语言中的<form>元素中的表单元素。这一点和Django模型系统的设计非常相似。例子中的label用于设置说明标签max_length限制最大长度为100。它同时起到两个作用,一是在浏览器页面限制用户输入不可超过100个字符,二是在后端服务器验证用户输入的长度不可超过100。

每个Django表单的实例都有一个内置的is_valid()方法,用来验证接收的数据是否合法。如果所有数据都合法,那么该方法将返回True,并将所有的表单数据转存到它的一个叫做cleaned_data的属性中,该属性是以个字典类型数据。

当我们将上面的表单渲染成真正的HTML元素,其内容如下:

<labelfor="your_name">Yourname:</label><inputid="your_name"type="text"name="your_name"maxlength="100"required/>

二、视图处理

需要在视图中,实例化我们编写好的表单类。

#views.pyfromdjango.shortcutsimportrenderfromdjango.httpimportHttpResponseRedirectfrom.formsimportNameFormdefget_name(request):#如果form通过POST方法发送数据ifrequest.method=='POST':#接受request.POST参数构造form类的实例form=NameForm(request.POST)#验证数据是否合法ifform.is_valid():#处理form.cleaned_data中的数据#...#重定向到一个新的URLreturnHttpResponseRedirect('/thanks/')#如果是通过GET方法请求数据,返回一个空的表单else:form=NameForm()returnrender(request,'name.html',{'form':form})

要点是:

对于GET方法请求页面时,返回空的表单,让用户可以填入数据;

对于POST方法,接收表单数据,并验证;

如果数据合法,按照正常业务逻辑继续执行下去;

如果不合法,返回一个包含先前数据的表单给前端页面,方便用户修改。

通过表单的is_bound属性可以获知一个表单已经绑定了数据,还是一个空表。

三、模板处理

在Django的模板中,我们只需要按下面处理,就可以得到完整的HTML页面:

<formaction="/your-name/"method="post">{%csrf_token%}{{form}}<inputtype="submit"value="Submit"/></form>

要点:

<form>...</form>标签要自己写;

使用POST的方法时,必须添加{% csrf_token %}标签,用于处理csrf安全机制;

{{ form }}代表Django为你生成其它所有的form标签元素,也就是我们上面做的事情;

提交按钮需要手动添加!

提示:默认情况下,Django支持HTML5的表单验证功能,比如邮箱地址验证、必填项目验证等等。

看完了这篇文章,相信你对django处理表单的方法有了一定的了解,想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!