Python的web框架中如何实现表单的验证?

yzhengwei
  • 170

请问在python 的web框架中是如何实现表单验证的呢? 一般像django和flask都有自己的方式,但是一般都是前后端一体的,无法做到前后端分离。比如flask的 wtforms,验证后的错误信息无法直接返回给前端js,只能通过jinja2语法让其显示到页面上,这样的话如果表单使用ajax提交的话,就无法获得验证的错误信息了,想知道这种情况下如何处理的?
如果是靠自己手写的话,能否给个相关的例子参考一下?

回复
阅读 3.2k
2 个回答

wtforms 可以实现你的需求。

写一个简单的 Flask 例子吧

#: form.py

from flask.ext.wtf import FlaskForm
from wtform import TextField
from wtforms.validators import InputRequired


class TestForm(FlaskForm):
    username = TextField(u'姓名', validators=[InputRequired(message=u'姓名不能为空')])
#: view.py

from flask import jsonify, request, Flask
from form import TestForm

app = Flask(__name__)


@app.route('/submit', methods=['POST'])
def submit():
    form = TestForm(request.form)
    if form.validate_on_submit():
        return jsonify(status=0)
    return jsonify(form.errors), 422

在运用 wtform 的时候,不必用它的模板渲染,定义一个 Form 类,然后参数传进去实例化之后,该怎么用怎么用,最后直接返回 json 即可。

一楼的回答不是题主的答案。


正常的使用 flask 的前后端一体化架构的话,在 web 页面中使用到的是 jinja2 模板,wtforms 的错误显示是用如下方式的:

这是一个登录错误提示实例。

<!-- 错误信息form提示 -->
{% for field_name, field_errors in loginForm.errors|dictsort if field_errors %}
    {% for error in field_errors %}
        <div class="alert alert-danger alert-dismissible" role="alert">
            <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            <strong>{{ loginForm[field_name].label }}错误:</strong> {{ error }}
        </div>
    {% endfor %}
{% endfor %}
<!-- 错误信息form提示 end >

按照题主的询问是需要用 ajax 捕捉到错误提示的,也就是说 wtforms 的验证结果需要用 json 的格式发送到页面,这也是一个 flask-restful 验证的一个难点。


最后,希望大侠能给出一个更好的答案,或者哪位大侠能够修改一下 wtforms 源码

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏