Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >tornado 结合wtforms使用表单操作

tornado 结合wtforms使用表单操作

作者头像
编程黑洞
发布于 2023-03-06 11:29:07
发布于 2023-03-06 11:29:07
43900
代码可运行
举报
文章被收录于专栏:编程黑洞编程黑洞
运行总次数:0
代码可运行

# 简介

在获取请求时,需要将请求的参数进行验证。 使用wtformstornado的结合,可以获取到请求的参数,并且对参数进行验证。

该项目的github地址: tornado_learning.git (opens new window)

# 例子

创建student的form

代码: apps/shchool/forms.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from wtforms_tornado import Form
from wtforms import StringField, IntegerField, TextAreaField
from wtforms.validators import DataRequired, Length

class StudentForm(Form):
    """
    可以作为student的 post 和 put 的表单使用。
    """

    id = IntegerField("id", null=True)
    name = StringField("姓名", validators=[DataRequired("请输入姓名")])
    age = IntegerField("年龄", validators=[DataRequired("请输入年龄")])
    desc = TextAreaField("个人简介", validators=[DataRequired("请输入个人简介")])

然后通过form接收参数,对参数进行验证,验证通过则操作model,对数据库进行保存操作

通过遍历student_from.errors得到校验失败的字段,然后再返回到前端提示。

代码: apps/school/handler.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tornado

from apps.school.forms import StudentForm
from apps.school.models import Student
from tornado_learning.handler import BaseHandler

class StudentHandler(BaseHandler):

        async def post(self):

        ret_data = {}

        student_form = StudentForm(self.request.arguments)
        if student_form.validate():
            await self.application.objects.create(Student, **student_form.data)

            ret_data["ret"] = "success"
        else:
            for field in student_form.errors:
                ret_data[field] = ret_data.errors[field][0]

        return self.finish(ret_data)

# html表单

还可以通过wtforms创建对应的model模板表单。

个人不是很推荐使用,因为前后端耦合性太强。

获取表单

代码: apps/school/forms.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class StudentFormHandler(BaseHandler):

    def get(self):
        studentForm = StudentForm()
        return self.render("student.html", studentForm=studentForm)

表单的html模板 将该文件放在templates路径下

代码: templates/student.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<form action="/student" , method="post">
    {% autoescape None %}
    {% for field in studentForm %}
        <span>{{ field.label.text }} :</span>
        {{ field(placeholder="请输入"+field.label.text) }}

        {% if field.errors %}
            {% for error_msg in field.errors %}
                <div class="error-msg">{{ error_msg }}</div>
                {% end %}
                {% else %}
                <div class="error-msg"></div>
            {% end %}
    {% end %}

    <label>
        <span>&nbsp;</span>
        <input type="submit" class="button" value="提交"/>
    </label>
</form>
</body>
</html>

需要在设置项中设置模板路径 代码:tornado_learning/settings.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
settings = {
    "template_path": "templates"
}

# wtforms 读取json

使用wtforms_json可以使表单直接对json参数的读取。

初始化wtforms_json

首选需要对wtforms_json初始化。 代码: server.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import wtforms_json
wtforms_json.init()

在handler中获取json参数,然后读入到form中

代码: apps/school/handler.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class TeacherHandler(BaseHandler):
   
    async def post(self):

        ret_data = {}

        param = self.request.body.decode("utf8")
        param = json.loads(param)

        teacherForm = TeacherForm.from_json(param)
        print(teacherForm.data)
        if teacherForm.validate():
            teacher = await self.application.objects.create(Teacher, **teacherForm.data)

            ret_data["ret"] = "success"
        else:
            for field in teacherForm.errors:
                ret_data[field] = teacherForm.errors[field][0]

        return self.finish(ret_data)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
wtforms
 简介 WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。 安装: ? 1 pip3 install wtforms 用户登录注册示例 1.用户登录 当用户登录时
用户1214487
2018/01/24
1.2K0
tornado 使用peewee-async 完成异步orm数据库操作
tornado是一个异步web框架,其中不能使用阻塞的操作,不然会导致整个程序的阻塞。数据库操作时不可避免的需要使用,这里采用的是peewee-async去解决。
编程黑洞
2023/03/06
9440
大白话说Python+Flask入门(三)
我能想到的是,大概率是这部分知识,应该是超出了我现在的水平了,也就是说我存在知识断层了,整体感觉真的是一知半解。
软件测试君
2023/11/23
2710
大白话说Python+Flask入门(三)
flask 登录/注册表单(flask 20)
from flask import Flask,flash,redirect,render_template,url_for import os from form import LoginForm,RegisterForm
用户5760343
2019/08/13
9850
flask 自定义表单验证器(flask 19)
from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, BooleanField, IntegerField, TextAreaField, SubmitField, MultipleFileField from wtforms.validators import DataRequired, Length, ValidationError, Email
用户5760343
2019/08/13
1.5K0
Flask WTForms 表单插件的使用
在Web应用中,表单处理是一个基本而常见的任务。Python的WTForms库通过提供表单的结构、验证和渲染等功能,简化了表单的处理流程。与此同时,Flask的扩展Flask-WTF更进一步地整合了WTForms,为开发者提供了更便捷、灵活的表单处理方式。Flask-WTF是建立在WTForms之上的Flask扩展,旨在简化Web应用中表单处理的流程。它提供了与Flask框架的无缝集成,使得表单的创建、验证和渲染变得非常容易。通过Flask-WTF,开发者能够轻松地构建具有强大功能和良好用户体验的表单页面。
王瑞MVP
2023/11/26
2980
Flask WTForms 表单插件的使用
开心!发现一款功能强大的 Python 组件 FlaskForm
WTForms 是一个 Flask 集成的框架,也可以说是库。用于处理浏览器表单提交的数据。
Wu_Candy
2022/07/05
1.5K0
开心!发现一款功能强大的 Python 组件 FlaskForm
python flask web开发实战 表单 form flask-wtf
app = Flask(name) app.config['SECRET_KEY'] = 'hard to guess string' 1、
用户5760343
2019/07/05
7090
6.Flask-WTForms
 Flask-WTF是简化了WTForms操作的一个第三方库。WTForms表单的两个主要功能是验证用户提交数据的合法性以及渲染模板。还有其它一些功能:CSRF保护,
zhang_derek
2018/08/01
8520
6.Flask-WTForms
Flask表单之WTForms和flask-wtf
Flask-WTF是简化了WTForms操作的一个第三方库。WTForms表单的两个主要功能是验证用户提交数据的合法性以及渲染模板。还有其它一些功能:CSRF保护,文件上传等。
菲宇
2020/08/11
4.2K0
Flask框架(四)之表单验证
Flask的表单验证 wtforms 安装:pip3 install wtforms 使用1: from flask import Flask, render_template, request, redirect from wtforms import Form from wtforms.fields import simple from wtforms import validators from wtforms import widgets app = Flask(__name__, templat
GH
2020/03/19
8550
Flask-wtforms类似django中的form组件
一.安装 pip3 install wtforms 二.简单使用 1.创建flask对象 from flask import Flask, render_template, request, redirect from wtforms import Form from wtforms.fields import simple from wtforms import validators from wtforms import widgets app = Flask(__name__, template_f
小小咸鱼YwY
2020/06/19
1.1K0
Flask信号和wtforms 一、信号二、wtforms组件使用
一、信号 1.1.所有内置信号 request_started = _signals.signal('request-started') # 请求到来前执行 request_finished = _signals.signal('request-finished') # 请求结束后执行 before_render_template = _signals.signal('before-render-template') # 模板渲染前执行 temp
zhang_derek
2018/05/30
7860
Flask表单处理
在Web应用程序中,表单是非常常见的元素,用户可以通过表单来输入数据并将其提交到服务器。在Flask中,您可以使用Flask-WTF扩展来轻松地处理表单。
堕落飞鸟
2023/05/05
1.1K2
Python 系列文章 —— flask 表单案例
app.py from flask import Flask, render_template, redirect, url_for, request from flask_wtf import FlaskForm from wtforms import StringField, PasswordField from wtforms.validators import DataRequired, EqualTo from werkzeug.security import generate_passwor
玩转编程
2022/01/13
5820
带你认识 flask web 表单
我将使用Flask-WTF插件来处理本应用中的Web表单,它对WTForms进行了浅层次的封装以便和Flask完美结合。这是本应用引入的第一个Flask插件,但绝不是最后一个。插件是Flask生态中的举足轻重的一部分,Flask故意设计为只包含核心功能以保持代码的整洁,并暴露接口以对接解决不同问题的插件。
公众号---人生代码
2019/11/09
2.4K0
带你认识 flask web 表单
BBS论坛(五)
5.1.cms后台修改密码功能完成 (1)新建app/forms.py # app/forms.py from wtforms import Form class BaseForm(Form): def get_error(self): message = self.errors.popitem()[1][0] return message (2)cms/forms.py # cmd/forms.py from wtforms import StringFiel
zhang_derek
2019/02/13
8K0
BBS论坛(五)
tornado 文件上传
该项目的github地址: tornado_learning.git (opens new window)
编程黑洞
2023/03/06
5980
flask 表单 flask-wtf
from flask import Flask from flask import render_template from flask_bootstrap import Bootstrap from flask_wtf import Form from wtforms import StringField,SubmitField from wtforms.validators import Required
用户5760343
2019/07/07
6580
flask 留言板(flask 39)
from flask import flash,render_template,redirect,url_for from app import app,db from models import Message from forms import HelloForm
用户5760343
2019/08/13
1.4K0
相关推荐
wtforms
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验