烧瓶 - 检测' POST&#39 ;?的方法之间的区别

时间:2017-11-02 19:03:28

标签: flask

当我想检查是否使用POST提交表单数据时,有什么区别:

if request.method == 'POST'

if form.validate_on_submit():

1 个答案:

答案 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.FlaskFormflask_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',因为前者处理验证表格是否已提交以及发出的请求是否也有效。