flask summary
environment
- 配置flask单独的虚拟环境
- pip3 install virtualenv
- virtualenv –no-site-packages -p python3路径 py3flask
- cd py3flask/Script
- activate 进入环境
- deactivate 退出环境
使用包列表
- 查看已经安装包 pip freeze
- flask
- flask-blueprint 蓝图,作用,将路由细分,分发,管理路由
- flask-Script 管理启动方式
- flask-DebugToolbar 查看测试一些东西
- flask-RESTful flask-marshmallow 管理表的工具
- flask-Session redis数据库的driver
- flask-SQLAlchemy mysql数据库
- jinja2
- PyMySQL mysql数据库的driver
- redis redis数据库
flask-blueprint 蓝图管理工具
- 一个app一个蓝图管理工具
- 配置,初始化,注册
- 使用,修饰器的使用
templates static 页面和静态文件
- 配置,注册
- 写到公共文件的settings里
参数
参数类型
- int
- float
- string
- path
- uuid
参数接收
/url/string:name/
访问方式 methods
PATH
- os.path.abspath(file) 当前文件的绝对路径
- os.path.dirname(path) path文件路径的上一级
- os.path.join(path, ‘文件名’) 配置路径
request方法
- 页面到服务器
- args
- form
- files
response 响应
- 服务器到页面,对于请求的反馈
response = make_response
render_template redirect 跳转和重定向
- render_template(‘index.html’, stus=stus)
- redirect(‘/url’) 重定向url
- redirect(url_for(‘bluename.function_name’))
异常和错误
- abort(404) 抛出错误
- @app.errorhandler(404) 接收404错误
- 定义一个函数,返回到一个指定的页面
redis数据库的简单使用
- 配置,初始化,注册
- 启动
- 使用, 字典存储,字典取值
cookie !!
- response.set_cookie(‘ticket’, ticket, max_age=”, expires=”) 存储
- response.delete_cookie(‘ticket’) 删除
jinja2
基础函数
- for
- if
- loop
过滤器 |
- safe 展示样式
- striptags 消除样式
- length 长度
- trim 消除空格
- first 第一个字母
- last 最后一个字母
- upper 大写
- lower 小写
- capitalize 首字母大写
config 全局
macro 页面函数
- 把多次使用的抽取,写成函数
- 定义
- 调用
mysql 数据库
两个包
- pip install flask-sqlalchemy
- pip install pymysql
配置,初始化,注册
- 初始化 db = SQLAlchemy
- 注册 SQLAlchemy(app)
- 配置
- app.config[‘SQLALCHEMY_DATABASE_URI’] = ‘mysql+pymysql://root:123456@localhost:3306/flask3’
- app.config[‘SQLALCHEMY_TRACK_MODIFICATIONS’] = False
数据库的创建 models.py
- 定义表结构
- 取别名
- 定义初始化方法,用于添加表数据
数据库的创建和删除
- db.create_all() 创建数据库里所有的表
- db.drop_all() 删除数据库里所有的表
表的 增
- 从页面拿到值
- 调用模型的初始化方法,给表里的字段赋值
- db.session.add(str) add_all(list)
- db.session.commit()
查询运算符
- filter(模型名.字段.运算符(’xxx’)
- filter(模型名.字段 运算符 值)
- lt le
- gt ge
- in_
- order_by
- limit(4).offset(3)
- first()
- and_ or_ not_
sql原生语句查询
- sql = ‘select * from student where ?=?’
- stus = db.session.execute(sql)
filter_by 查询
- stus = Student.query.filter_by(s_id=5)
filter 查询
- stus = Student.query.filter(Student.s_id=5)
get
- stu = Student.query.get(id) 传入主键id,若存在,返回该条信息,否则返回空
表的 改
方法一
- Student.query.filter_by(s_id=6).update({‘s_name’: ‘哈哈’})
- db.session.commit()
方法二
- stu = Student.query.filter_by(s_id=6).first()
- stu.s_name=’哈哈’
- db.session.commit()
表的 删
- db.session.delete(str)
- db.session.commit()
分页 paginate
- 写一个方法,在指定的页面,对指定的信息进行分页
方法定义
- page = int(request.args.get(‘page’,1)) 当前第几页
- perpage = int(request.args.get(‘per_page’,3)) 每页几条信息
- paginate = Student.query.order_by(‘s_id’).paginate(page,perpage, error_out=False) 数据绑定分页信息
- stus = paginate.items 总信息
- return …
方法使用,页面,jinja2
基本参数
- pages 总页数
- page 当前页数
- has_prev
- has_next
- next_num
- prev_num
- iter_pages 页数列表
- total 总数据条数
数据库表的扩展
一对一
一对多
创建
- 在多的表里创建关联字段,连接自己外键到多的表的主键
- s_g = db.Column(db.Integer, db.ForeignKey(‘grade.g_id’), nullable=True) 表名,主键名
- 在一的表里创建关系,来访问与被访问的关键字
- students = db.relationship(‘Student’, backref=’stu’,lazy=True) 类名
使用
- stus = grade.students
- grade = stu.stu
多对多
创建
- 多
- 中间表
- sc = db.Table(‘sc’,
db.Column(‘s_id’, db.Integer, db.ForeignKey(‘d4student.s_id’)),
db.Column(‘c_id’, db.Integer, db.ForeignKey(‘course.c_id’))
)
- sc = db.Table(‘sc’,
- 多, 多了个字段,secondary,关联中间表
- students = db.relationship(‘Student’, secondary=sc, backref=’cou’)
使用,和普通表不一样
- 查询
- stu = Student.query.get(id)
- stu.cou
- 添加
- stu = Student.query.get(s_id)
- cou = Course.query.get(c_id)
- stu.cou.append(cou)
- db.session.add(cou)
- db.session.commit()
- 删除
- stu = Student.query.get(s_id)
- cou = Course.query.get(c_id)
- stu.cou.remove(cou)
- db.session.commit()
项目重构
思想
- 公共的文件,或重要的,放到特殊的文件里
- 规范化
举例
- utils
- —- init.py
- —- App.py 初始化app,绑定app的操作
- —- function.py 公共方法,
- —- settings.py 配置文件
debug(被动)
配置
- 初始化
- 注册
- 开启
作用
- 查看运行时间
- 接口等等
rest_ful 和 marshmellow
- 对指定的表进行操作,能很方便的进行接口对接,增删查改等
配置
- 初始化
- 注册
使用
- 在views里定义一个类,继承Resourse (rest_ful)
- 类里定义增删查改等等方法
- 创建一个和views同级的py文件,继承marshmellow方法,来修饰返回哪些数据,用来筛选
- 类里的方法返回数据时,调用marshmellow的方法,来返回接口数据,
- api.add_resource(类名,’/api/hello/param/’)