Flask 表单处理

发布时间:2026/9/26 4:17:46
Flask 表单处理 FlaskFlask在Flask Web应用程序里, 用原始SQL来对数据库执行CRUD操作可能是挺乏味的。相反地,这个工具包是一个功能很强大的OR映射器, 它给应用开发者提供了SQL的全部功能和灵活性。而Flask-是Flask的一个扩展, 这个东西把对相关内容的支持添加到了Flask应用中。什么是ORM这个概念呢, 它全称叫做对象关系映射。大多数编程语言平台是面向对象的, 而另一方面, 关系型数据库管理系统服务器中的数据是以表格的形式来存储的, 对象关系映射作为一种技术, 是将对象的参数映射到深层的关系型数据库管理系统的表结构之上的工具, 对象关系映射的应用程序编程接口提供了执行创建、读取、更新和删除这种操作的方法, 从而让开发者无需编写原始的SQL语句即可完成相关任务。在这一小节里, 咱们要去学着怎么利用Flask这个工具自带的ORM技术, 然后动手去搭建一个规模不大不小的小型Web应用程序。第一步, 进行Flask扩展的安装操作。# Filename : example.py# Copyright : 2020 By Nhooo# Author by :# Date : 2020-08-08pip install flask-sqlalchemy进入第二步, 也就是需要从该模块导入类的阶段。# Filename : example.py# Copyright : 2020 By Nhooo# Author by :# Date : 2020-08-08from flask_sqlalchemy import SQLAlchemy进行第3步的操作, 也就是要创建一个Flask应用程序的对象, 并且为将要使用的数据库去设置对应的URI地址。# Filename : example.py# Copyright : 2020 By Nhooo# Author by :# Date : 2020-08-08app Flask(__name__)app.config[SQLALCHEMY_DATABASE_URI] sqlite:///students.sqlite3第4步是使用应用程序对象当做参数去创建一个类的对象。那个对象里面包含了专门用来做操作数据映射关系的辅助函数。同时它还提供了一些功能, 让那些自己写的用户模型类能够继承到一个基础的模型类上去。在下面显示出来的这一些代码片段当中, 就是建立了一个叫做学生类型的模型的过程。# Filename : example.py# Copyright : 2020 By Nhooo# Author by :# Date : 2020-08-08db SQLAlchemy(app)class students(db.Model):id db.Column(student_id, db.Integer, primary_key True)name db.Column(db.String(100))city db.Column(db.String(50))addr db.Column(db.String(200))pin db.Column(db.String(10))def __init__(self, name, city, addr,pin):self.name nameself.city cityself.addr addrself.pin pin在第5步的时候, 为了能够创建那个数据库, 或者是使用在URI里面所提到的数据库, 需要去运行那个括号里面的方法。# Filename : example.py# Copyright : 2020 By Nhooo# Author by :# Date : 2020-08-08db.create_all()在针对对象的整个管理范畴之内, ORM对象会负责处理并维持那一种被称为所有持久性操作的任务环节。通过执行下面提到的这种会话办法, 可以完成对数据进行的增加、读取、更新以及删除之类的操作。用 db 下面的 add 方法去插入一个模型对象, 这就相当于把一条记录插入了到那个映射表里面。然后用不带名的或者括号包起来的那个操作去删除记录, 这个操作是针对表进行的。最后, 用 model 下面的 query 方法来调用 all 函数, 这样就能从表中把所有记录都检索出来, 这一点是跟那个查询对应的。你可以通过运用属性的方式, 对检索出来的记录集实施筛选这个操作。具体来说, 如果你的目标是在一个数据表当中把那些其城市字段的值等于空字符串的记录给找出来, 那么你应该使用下面给出的这句语句来进行实现。# Filename : example.py# Copyright : 2020 By Nhooo# Author by :# Date : 2020-08-08Students.query.filter_by(city Haikou).all()有了这么多这样的背景知识之后, 我们现在将会为我们的那个应用程序, 去提供那些视图函数, 用来添加学生数据。该应用程序的入口点是一个被绑定到了URL ‘/‘上的函数。学生的记录集会被当作参数发送给HTML模板。然后, 模板中包含的服务器端代码会将这些记录以HTML表格的形式来展示出来。# Filename : example.py# Copyright : 2020 By Nhooo# Author by :# Date : 2020-08-08app.route(/)def show_all():return render_template(show_all.html, students students.query.all() )该模板所包含的HTML脚本代码, 也就是那些扩展名为html的文件所包含的代码, 它们的表现形式是如同下面这种状况那样。# Filename : example.py# Copyright : 2020 By Nhooo# Author by :# Date : 2020-08-08Flask示例学生列表 - FlaskSQLAlchemy示例{%- for message in get_flashed_messages() %}{{ message }}{%- endfor %}学生 (添加)[PROTECTED_ceec643ed4327be2ae3164fc72fed4fa]上面的页面含有一个URL, 其路径为/new, 这个路径用来映射名为new()的函数, 该网页上存在一个超链接指向这里的地址。当你点击这个超链接时, 系统会让一个包含学生信息的数据表单呈现于用户面前。此时, 你所填入的各项内容会以POST这种请求方式被提交至上述那个同样命名为/new的路径之中。模板文件: new.html 的代码如下 -# Filename : example.py# Copyright : 2020 By Nhooo# Author by :# Date : 2020-08-08Flask示例学生信息 - Flask SQLAlchemy示例{%- for category, message in get_flashed_messages(with_categories True) %}{{ message }}{%- endfor %}姓名城市地址城市当应用程序检测到Http方法处于Post状态的时候, 那些表单数据将会被插入到表格之中, 紧接着, 该程序会跳转去显示包含这些数据的主页面。# Filename : example.py# Copyright : 2020 By Nhooo# Author by :# Date : 2020-08-08app.route(/new, methods [GET, POST])def new():if request.method POST:if not request.form[name] or not request.form[city] or not request.form[addr]:flash(Please enter all the fields, error)else:student students(request.form[name], request.form[city],request.form[addr], request.form[pin])db.session.add(student)db.session.commit()flash(Record was successfully added)return redirect(url_for(show_all))return render_template(new.html)下面是咱们这个整个应用程序的完整源程序代码信息, 这份代码的具体内容是在app.py这个文件里面的哦。# Filename : example.py# Copyright : 2020 By Nhooo# Author by :# Date : 2020-08-08from flask import Flask, request, flash, url_for, redirect, render_templatefrom flask_sqlalchemy import SQLAlchemyapp Flask(__name__)app.config[SQLALCHEMY_DATABASE_URI] sqlite:///students.sqlite3app.config[SECRET_KEY] random stringdb SQLAlchemy(app)class students(db.Model):id db.Column(student_id, db.Integer, primary_key True)name db.Column(db.String(100))city db.Column(db.String(50))addr db.Column(db.String(200))pin db.Column(db.String(10))def __init__(self, name, city, addr,pin):self.name nameself.city cityself.addr addrself.pin pinapp.route(/)def show_all():return render_template(show_all.html, students students.query.all() )app.route(/new, methods [GET, POST])def new():if request.method POST:if not request.form[name] or not request.form[city] or not request.form[addr]:flash(Please enter all the fields, error)else:student students(request.form[name], request.form[city],request.form[addr], request.form[pin])print(student)db.session.add(student)db.session.commit()flash(Record was successfully added)return redirect(url_for(show_all))return render_template(new.html)if __name__ __main__:db.create_all()app.run(debug True)从命令行界面启动脚本文件, 接着打开网络浏览器, 在地址栏当中输入网址这一形式, 此时屏幕上所展示出来的具体结果表现为如下所示的情况。点击一下“加入”那个连接的地方, 这样就打开了关于学生信息的表格。你要把那个表单认真填写完整, 然后直接提交上去, 这时候, 主页就会把你刚才提交的那些数据全部都列在上面呈现出来, 当你完成了这些操作之后, 你就会看到在下面这个位置显示了出来的具体输出结果。Flask