flask的层级关系
- image.png
配置文件,插件都是要注册到flask的核心对象上的
路由注册到蓝图上,但是蓝图需要注册到flask的核心对象app上,使用
app.register_blueprint()
注册使用蓝图注册的路由,endpoint不再是视图函数的名称,而是在视图函数名称前面加上了蓝图的名字,例如
web.search
蓝图不是为了给我们拆文件的,而是用于大型项目中拆分模块的
request对象
request是flask帮我们构建和生成的
request对象下的args属性,是dict的一个子类,是一个不可变的字典,可以使用to_dict()转变为普通的字典类型
request的实现是一个代理模式的实现,如果要使用request的话,必须保证request所在的方法中必须是flask的thhp请求触发的或者是视图函数触发的,否则得不到你想要的结果。
使用条件是,flask的上下文环境中
WTForms插件
分层,在验证层进行参数的校验
验证客户端传过来的参数
class SearchForm(Form):
q = StringField(validators=[DataRequired(), Length(min=1, max=30)]) # 验证器,可以自定义验证器
page = IntegerField(validators=[NumberRange(min=1, max=99)],default=1)
配置
将数字密码这种比较机密的信息放到一个单独的配置文件中,还有生产环境和开发环境不一样的参数
生产环境和开发环境几乎一样的参数分到一个文件中写
数据表创建方式
database first
model first 数据管理员很喜欢用
code first
模型层
sqlalchemy第三方库, flask对此进行了封装,有Flask-sqlalchemy
插件都需要注册到flask的核心对象上,
db.init_app(app)
配置项,名称是不能随便改的,
SQLALCHEMY_DATABASE_URI
- image.png
sqlalchemy支持分布式数据库
db.create_all(app=app)
创建到数据库中Code first 专注业务模型的设计,而不是专注于数据库的设计
业务逻辑应该写到model层
Code First关注于数据表是怎么创建的,解决的是创建数据的问题,ORM对象关系映射,包含的层面比较广泛,数据怎么查询,删除更新,希望我们通过操作模型间接的操作数据库