云资讯产品介绍
Flask 进阶
前情提要:
-
钩子函数
- 第一次请求前执行 before_first_request
- 每次请求前执行 before_request
- 异常钩子函数 errorhandler
- 请求后,响应前执行 teardown_request
-
orm
-
对象关系映射
-
优点与缺点 优点: 不用原生的sql语句,提高开发效率。易于管理。缺点 有一定的性能损失。
-
-
orm 继承类
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
继承 db.Model
-
定义类
class IndexModel(db.Model):
__tablename__
= “自定义的表名”
一定要指定主键
-
orm 的增删改查
查:
查所有 IndexModel.query.all()
查一个 IndexModel.query.first()
精确搜索 IndexModel.query.filter(IndexModel.name==“xxx”).all()
模糊搜索 IndexModel.query.filter(IndexModel.name.like("%{}%".format(name))).all()
IndexModel.query.filter(IndexModel.name.contains(name))).all()
分页 IndexModel.query.filter().limit().offset().all()
limit 页大小
offset 偏移量 (当前页-1) * 页大小
获取总页数
math.ceil(数据的总条数 / 每页显示的数目)
排序 升序 asc() 降序 desc()
IndexModel.query.filter().order_by(IndexModel.字段.desc()).all()
一对多
db.relationship(“类名”,backref=“定义的名字”)
通过外键 user_obj = User.query.filter().first()
user_obj .定义的名字. 关联类的属性
添加一条数据
user_obj = UserModel(name=“xxx”)
db.session.add(user_obj)
db.session.commit()
添加多条数据
user1 = UserModel(name=“xxx1”)
user2 = UserModel(name=“xxx2”)
user3 = UserModel(name=“xxx3”)
db.session.add_all([user1,user2,user3,user4])
db.session.commit()
编辑 1
user_obj = User.query.filter().first()
user_obj .name = “cccc”
db.session.add(user_obj)
db.session.commit()
编辑 2
受影响的行数
flag = User.query.filter().update({“name”:“ccc”})
db.sesson.commit()
删除
受影响的行数
flag = User.query.filter().delete()
-
数据迁移
# manage.py from flask_script improt Manager from flask_migrate import Migrate,MigrateCommand from main import app from models import db # 实例化 manager = Manager(app) migrate = Migrate(app,db) # 添加命令 manager.add_command("db",MigrateCommand) # 运行 if __name__ == '__main__': manager.run()
# 生成 migrations 目录 python manage.py db init # 生成迁移文件 python manage.py db migrate # 写库 python manage.py db upgrade
-
flask_restful
-
自定义类
from flask_restful import Resource class IndexView(Resource): pass
-
参数怎么用
from flask_restful import Resource, reqparse c
-