我刚开始使用Django,我有一些关于处理请求的基本问题。
说我是否有两个功能。
如果我有观点,请说
def test():
return render(request, 'form.html')
在form.html中,我有一个包含method="POST"
和action="/submitted/"
所以现在如果我想对表单的提交数据做一些事情,我应该在同一个test()
视图中执行它,或者我必须在另一个视图中执行它来处理`/提交/ URL?
我一直在用后者做,但后来我读到了这个:
Need a minimal Django file upload example。
在这里,关于views.py
的第4点,他们将表格与他们处理表格的视图相同。
这是如何工作的?这似乎非常不直观。或者我错过了什么?
答案 0 :(得分:2)
在django中,GET
和POST
方法可以在同一视图中处理,除非您要将表单发布到与当前URL不同的URL。阅读以下代码:
url(r'^test/$', 'myapp.views.test', name='test'),
url(r'^test_post/$', 'myapp.views.test_post', name='test_post'),
def test(request):
#Do your regular get method processes here
if request.POST:
#Do something with post data here
return render_to_response('form.html', locals(), context_instance = RequestContext(request))
def test_post(request):
if request.POST:
#Do something with post data here
return render_to_response('form.html', locals(), context_instance = RequestContext(request))
如果您希望在同一视图中处理您的帖子数据test
,请在表单中包含设置action="."
,如下所示。
<form method="post" action="." id="form_id" name="form_name">
如果您希望在不同的视图test_post
处理您的帖子数据,请在表单中包含设置action="/test_post/"
,如下所示。
<form method="post" action="/test_post/" id="form_id" name="form_name">
答案 1 :(得分:1)
在您的视图中,您将检查表单是否已过帐,如下所示。
def test(request): # A view always needs a request
if request.method == "POST":
# Do validation stuff here
else:
return render(request, 'form.html')
但我建议你看一下Django forms,它是一个内置函数,可以使表单和验证变得更加容易。
答案 2 :(得分:0)
上面的答案很棒,但是如果你仍然有点困惑,那么让我们分解你提供的一些信息,看看我们是否能够理解核心问题,即确定何时会发生什么。
如果您的函数“test()”被映射到诸如“/ test /”之类的URL ...那么我们也可以假设您试图找出提交到URL时会发生什么“/提交/".
在表单提交期间指向“表单操作”的地方是数据的去向(例如/提交/)。
如果您告诉表单在HTML表单代码中提交“/ submitted /”,那么所有表单数据处理都将在视图“submitted()”中处理,如果您提交你还没有(为了便于理解而假设命名)。
与arulmr建议的一样,根据您的示例场景,您的代码可能看起来像这样:
def test(request):
return render(request, 'form.html')
def submitted(request):
if request.POST:
#Do something with post data here
return render_to_response('form_message.html')
更为人熟知和“直观”的方法是让表单提交给自己,而不是另一个视图或URL。
def test(request):
if request.POST:
#Do something with post data here
return render_to_response('form_message.html')
和...
<form method="post" action=".">
'action =“。”'表示提交给自己。
希望增加清晰度。