当我想检查是否使用POST
提交表单数据时,有什么区别:
if request.method == 'POST'
和
if form.validate_on_submit():
答案 0 :(得分:1)
form.validate_on_submit()
会执行request.method == 'POST'
以及更多内容,因此它就像是一个更高级的功能。
form.validate_on_submit()
是“Flask-WTF”包中实现的功能,它是两个功能的快捷方式:form.is_submitted()
和form.validate()
def validate_on_submit(self):
"""Call :meth:`validate` only if the form is submitted.
This is a shortcut for ``form.is_submitted() and form.validate()``.
"""
return self.is_submitted() and self.validate()
注意:self.validate()
由“wtforms”包实现,“Flask-WTF”使用wtforms.Form
作为基础不推荐使用的flask_wtf.FlaskForm
或flask_wtf.Form
的类。
更深入一点,self.is_submitted()
函数的作用是返回_is_submitted()
布尔函数:
def is_submitted(self):
"""Consider the form submitted if there is an active request and
the method is ``POST``, ``PUT``, ``PATCH``, or ``DELETE``.
"""
return _is_submitted()
_is_submitted()
定义为:
def _is_submitted():
"""Consider the form submitted if there is an active request and
the method is ``POST``, ``PUT``, ``PATCH``, or ``DELETE``.
"""
return bool(request) and request.method in SUBMIT_METHODS
SUBMIT_METHODS
常量以这种方式定义:
SUBMIT_METHODS = set(('POST', 'PUT', 'PATCH', 'DELETE'))
从代码段中,您可以看到form.validate_on_submit()
处理request.method
并执行更多操作。
因此,如果您正在使用 Flask-WTF 包并且您的表单继承自“FlaskForm”类,那么最好使用form.validate_on_submit()
比request.method == 'POST'
,因为前者处理验证表格是否已提交以及发出的请求是否也有效。