4.8 KiB
如何使用 Python Django 表单
原文:https://www.pythoncentral.io/how-to-use-python-django-forms/
Django 形式
什么是 HTML 表单?它有什么样的用例?
网页上的 web 表单、web 表单或 HTML 表单允许用户输入发送到服务器进行处理的数据。表单可以类似于纸张或数据库表单,因为 web 用户使用复选框、单选按钮或文本字段来填写表单。例如,表单可用于输入运输或信用卡数据以订购产品,或者可用于从搜索引擎检索搜索结果。
HTML 表单是从客户端应用程序向服务器发送数据的最常见方式。在本文中,我们将学习如何使用 Django 的表单库来处理 HTML 表单。
使用 Django 表单库的好处
在之前的一篇文章中,为您的第一个 Python Django 应用程序编写上传帖子的视图,我们学习了如何使用request.POST变量从 HTML 表单中检索数据。然而,仅仅检索数据是不够的,因为我们可能希望处理数据验证,并避免在模板中手动编写 HTML 表单。
幸运的是,Django 的表单库提供了以下好处:
- 从表单小部件自动生成 HTML 表单。
- 根据一组规则验证提交的数据。
- 如果有错误,重新显示 HTML 表单。
- 将提交的数据转换成 Python 兼容的类型。
基本概念
在我们深入讨论编写表单的细节之前,我们需要了解以下概念:
- Widget :一个 Python 类,将自己呈现为 HTML 形式。
- 字段:验证数据的 Python 类,例如限制最大字符数的
CharField。 - 表单:字段的集合。
- 表单资产:与呈现表单相关联的 CSS 和 Javascript。
设计正确的话,Form库与其他 Django 组件是分离的,比如数据库层甚至模板。通过将Form库与 Django 的其余部分分离,我们可以独立于应用程序的其余部分编写和测试表单,这增加了应用程序的可维护性。
表单和视图
现在让我们继续创建一个表单对象,它表示myblog/forms.py中的一个Post。
from django import forms
类后置形式(形式。形式):
内容=形式。CharField(max _ length = 256)
created _ at = forms。DateTimeField()
然后我们创建一个新的视图,返回我们在上下文中的表单。
from myblog.forms import PostForm
def POST _ Form _ Upload(request):
if request . method = = ' GET ':
Form = PostForm()
else:
# A POST 请求:处理表单上传
form = PostForm(request。POST) #从请求绑定数据。投寄成一种邮件形式
#如果数据有效,则继续创建新的帖子并重定向用户
If form . is _ valid():
content = form . cleaned _ data[' content ']
created _ at = form . cleaned _ data[' created _ at ']
post = m . post . objects . create(content,
created _ at = created _ at)
return httpresponseredict(reverse(' post _ detail ',
kwargs={'post_id': post.id})
return render(request,' post/post_form_upload.html ',{
'form': form,
})
然后我们创建一个新的模板,在myblog/templates/post_form_upload.html的 HTML 页面中呈现我们的表单。
<form action='/post/form_upload.html' method='post'>{% csrf_token %}
{{ form.as_p }}
<input type='submit' value='Submit' />
</form>
最后,我们修改myblog/urls.py以追加以下条目:
urlpatterns = patterns('',
...
url(r'^post/form_upload.html$',
'myblog.views.post_form_upload', name='post_form_upload'),
...
)
现在我们可以访问 URL http://localhost:8000/post/form_upload.html来看看我们新的帖子表单页面:
我们的空表单页面。
填写表格并点击“提交”会将您重定向到新帖的详细信息页面:
我们的表格填好了。
提交后我们的页面。
因为“内容”和“创建者”字段都是必填的,所以当您试图上传一个空字段时,会出现一个错误。
所需输入误差..
总结和提示
在本文中,我们学习了如何使用 Django 的表单库来处理 HTML 表单。虽然手工创建 HTML 表单是常见的做法,但是创建 Django 的表单对象可以提供更好的可维护性、可读性和功能性。在下一篇文章中,我们将学习如何使用 Django 的ModelForm从模型中自动生成表单。



