【发布时间】:2014-02-02 13:41:15
【问题描述】:
我已经阅读了很多关于在 Django 中创建和处理表单的 tuts 和文档,但我仍然对实现的某些方面感到困惑。具体来说,我不明白我应该在哪里处理表单发送的数据。是在使用表单模板的视图上还是在另一个视图上?
例如,假设索引模板只有一个表单:
*index.html*
{% load url from future %}
<form action="{% url 'Directories:_results'%}" method="post">
Name: <input type="text" name="txtField" />
<input type="submit" name="submit" />
</form>
所以现在我认为我有两个版本:
#1 版本(1 个视图):同一个视图显示和处理表单
def index(request):
if request.method == 'POST': # If the form has been submitted...
form = dbForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
field = form.cleaned_data['txtField']
#doSomething
else:
form = dbForm() #unbound form
return render(request, 'Directories/index.html', {'form': form})
#2 版本(2 个视图):一个视图显示表单,一个视图处理表单数据
#the view that creates the form (unbound)
def index(request):
form = dbForm()
return render(request, 'Directories/index.html', {'form':form})
#the view that handles the data sent during form submission in the index template.
def results(request):
if request.method == 'POST':
form = dbForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
field = form.cleaned_data['txtField']
#doSomething
else:
form = dbForm() #unbound form
return render(request, 'Directories/index.html', {'form': form})
这是我的 urls.py:
from django.conf.urls import patterns, url
from Directories import views
urlpatterns = patterns('',
url(r'^$', views.index, name='_index'),
url(r'^results$', views.results, name='_results'),)
正如您所见,每个版本的数据处理方式都不同,因此我想知道其中是否有任何错误,如果两者都正确,那么哪个被认为是最佳实践。
【问题讨论】:
-
不知道你为什么要问这个,真的。在版本 2 中,第二个视图与版本 1 的视图完全相同:那么版本 2 中的第一个视图有什么意义?
-
对于这个过于简单的示例,第 2 版似乎是多余的,但我想了解的是在哪里处理数据?因此,我并没有试图强调示例本身,而是强调其背后的概念以及哪个版本被认为是最佳实践。例如,在一个更复杂的示例中,您必须处理多个表单,每个表单都有多个提交按钮,那么与版本 1 相比,版本 2 可以更好地分离关注点。我相信这取决于您正在处理的情况,但是我的问题更像是什么是规范
标签: django forms form-submit