django - 检查请求中是否存在表单数据
我知道这个问题听起来有点奇怪,但我想确认一下。
在 Django
中有一段代码:
if request.method == 'POST':
do_something()
这段代码是用来检查表单是否真的通过 POST 方法提交的。我的问题是:它是否也检查请求中是否有表单数据?我的意思是,我可以直接打开 preview
页面的网址,而不填写任何表单字段。上面的检查能发现这种情况吗?
如果它不检查表单数据是否存在,那我该怎么做呢?顺便说一下,我并没有使用 Django
的 forms
。我只是像这样在视图中接收数据:
data['year'] = request.POST.get('year')
而所有的验证都是在前端用 Javascript
完成的。
3 个回答
1
不,这只是一个 HTTP 请求
方法的检查。
为了检查表单数据是否存在(也就是表单是否有效),你需要在 Form
实例上调用 is_valid()
方法。
1
这段话的意思是,检查方法只是在看你用的是什么方法,并没有检查表单里的数据。有些情况下,使用POST方法的时候并不一定需要表单数据,比如说如果创建资源所需的信息都已经在网址里了。
如果你在用Django的表单系统,那么如果没有表单数据,表单验证自然就会失败。
1
首先,我鼓励大家使用django-forms。 从现在开始,我也会逐步切换到django表单。
不过对于像我一样错过了django表单美好之处的人来说,这里有一个快速的方法来检查请求体中是否有表单数据。
if len(request.body) > 0:
# there is something inside request body
else:
# random link visit and no form data at all
这里有更多关于 HttpRequest.body 的信息