flask请求参数,工厂函数及简单子应用实现
Posted DoomLs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask请求参数,工厂函数及简单子应用实现相关的知识,希望对你有一定的参考价值。
视图处理过程中,都是接收请求,处理逻辑,返回响应
flask中
request
对象 不是 局部对象,也不属于某个视图函数,而是在 全局中 拥有同一个 请求对象
路径参数
GET student/1/
-
int
: 获取整数 -
string
: 也是默认类型,得到字符串
# GET student/1/
查询字符串参数
GET student/list/?page=3&size=5&a=3&a=9
: 一般是 GET请求时,传递 查询字符串参数
from flask import request
请求体参数-表单数据
POST
、PUT
可以携带请求体参数, 请求体参数包括: 表单数据、json数据flask视图处理过程中,默认只 支持
GET
请求,想要支持其他请求方式,应该指明 请求方式
请求体参数-json
小结
将 查询和添加 放到同一个视图中,判断不同的请求方式,从而执行不同的处理逻辑
项目构造
python包
flask项目,一切功能围绕 核心app 来完成, 这个包就用来构造 核心APP
-
app/settings.py
: 项目的配置文件
class Config(object):
DEBUG = True
SQLALCHEMY_DATABASE_URI = \'mysql://root:mysql@localhost:3306/flask\'
# mysql://用户名:密码@IP地址:端口号/数据库名
SQLALCHEMY_TRACK_MODIFICATIONS = False
-
app/extensions.py
: 项目所使用的第三方扩展插件
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_cors import CORS
# 环境中,使用 mysqlclient 链接mysql,就可以正常使用
# 如果使用的是pymysql链接 mysql, 就需要加一些配置项
# import pymysql
# pymysql.install_as_MySQLdb()
db = SQLAlchemy()
migrate = Migrate()
cors = CORS()
def config_extensions(app):
db.init_app(app)
migrate.init_app(app, db=db)
cors.init_app(app)
-
app/__init__.py
: 定义工厂函数,生成核心flask APP
from flask import Flask
from .settings import Config
from .extensions import config_extensions
def create_app():
# 1. 创建APP
app = Flask(__name__)
# 2. 导入配置参数
app.config.from_object(Config)
# 3. 导入 第三方的插件
config_extensions(app)
# 4. 返回APP
return app
项目的管理文件
在项目中,创建
manage.py
-
manage.py
from flask_script import Manager, Server from flask_migrate import MigrateCommand from app import create_app # 1. 利用工厂函数生成app app = create_app() # 2. 创建管理对象,管理项目 manage = Manager(app) # 3. 构建命令 manage.add_command(\'runserver\', Server(host=\'0.0.0.0\', port=7000)) manage.add_command(\'db\', MigrateCommand) if __name__ == \'__main__\': # 利用管理器启动服务 manage.run()
命令
在项目的终端可以使用如下命令,操作项目
python manage.py runserver # 启动flask 服务 python manage.py db init # 只有第一次迁移时,才会执行 该命令, 执行完,会生成迁移文件 python manage.py db migrate # 生成迁移文件,出路第一次之外,任何修改模型类,都需要 执行该命令, 生成迁移文件 python manage.py db upgrade # 根据迁移文件,生成表
学校子应用
-
school/__init__.py
: 创建蓝图对象, 创建完成,需要 注册蓝图
from flask.blueprints import Blueprint school_bp = Blueprint(\'school\', __name__) # 为了让蓝图,管理你的 模型类和视图,因此需要导入 from .models import * from .views import *
-
school/models.py
: 创建模型类
from app.extensions import db # 学生: id、姓名、年龄、性别 class Student(db.Model): __tablename__ = \'tb_student\' # 指定表名 id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(20)) age = db.Column(db.Integer) gender = db.Column(db.String(5))
需要在 蓝图,导入模型类,以便项目识别 模型类
生成迁移文件:
python manage.py db migrate
生成表:
python manage.py db upgrade
视图
school/views.py
: 实现 逻辑处理
from flask import request from school import school_bp from .models import Student from app.extensions import db from sqlalchemy.exc import SQLAlchemyError @school_bp.route(\'/student/\', methods=[\'POST\', \'GET\']) def student(): # 添加学生 POST student/ 表单参数 if request.method == \'POST\': # 1. 接收参数 name = request.form.get(\'name\') age = request.form.get(\'age\') gender = request.form.get(\'gender\') # 2. 校验参数 if not all([name, age, gender]): return {\'msg\': \'缺少必要参数\'}, 400 # 3. 存入数据库 # 3.1 创建学生对象成功,得到学生对象 stu = Student(name=name, age=age, gender=gender) # 3.2 添加到 db 事务中 db.session.add(stu) # 3.3 提交 事务, 因为,不提交事务之前,数据并没有保存到数据库,不会发生错误 try: db.session.commit() except SQLAlchemyError as e: # print(e) return { \'msg\': \'添加失败\' }, 500 # 4. 返回响应 return { \'id\': stu.id, \'name\': stu.name, \'age\': stu.age, \'gender\': stu.gender }, 201 else: # 1. 查询所有学生,得到查询集 students = Student.query.all() # 2. 循环遍历查询集,解析数据 data = [] for s in students: data.append({ \'id\': s.id, \'name\': s.name, \'age\': s.age, \'gender\': s.gender, }) # 3. 返回响应 return {\'students\': data}, 200
以上是关于flask请求参数,工厂函数及简单子应用实现的主要内容,如果未能解决你的问题,请参考以下文章