django - 检查请求中是否存在表单数据

0 投票
3 回答
4821 浏览
提问于 2025-04-18 16:53

我知道这个问题听起来有点奇怪,但我想确认一下。

Django 中有一段代码:

if request.method == 'POST':
     do_something()

这段代码是用来检查表单是否真的通过 POST 方法提交的。我的问题是:它是否也检查请求中是否有表单数据?我的意思是,我可以直接打开 preview 页面的网址,而不填写任何表单字段。上面的检查能发现这种情况吗?

如果它不检查表单数据是否存在,那我该怎么做呢?顺便说一下,我并没有使用 Djangoforms。我只是像这样在视图中接收数据:

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 的信息

撰写回答