session
有两种存储方式:
1 、一种是通过cookie存储一个session_id,然后具体的数据则是保存在session中。
2、 将session数据加密
flask里面的session必须要设置SECRET_KEY
app.config['SECRET_KEY'] = 'laowangaigebi'
过期时间
如果没有设置session的有效期。那么默认就是浏览器关闭后过期。
如果设置session.permanent=True,那么就会默认在31天后过期。
如果不想在31天后过期,那么可以设置app.config[‘PERMANENT_SESSION_LIFETIME’] = timedelta(hour=2)在两个小时后过期
删除session
删除session中的值:也是类似字典。可以有三种方式删除session中的值。
session.pop(key)
del session[key]
session.clear()
把session存在服务端
可以利用flask-session来把session存在服务器
abort
在Flask中,abort() 函数可以立即终止视图函数的执行,并且把相对应的错误信息返回给前端。
注意abort里面的状态码必须就是HTTP状态码,不能自己随便写
如何使用
from flask import Flask, abort
app = Flask(__name__)
@app.route('/login/<phone>')
def index(phone):
if phone != '123456':
abort(502) # 立即停止视图函数执行,并把异常返回
return phone
if __name__ == '__main__':
# 0.0.0.0代表任何能代表这台机器的地址都可以访问
app.run(host='0.0.0.0', port=5000, debug=True) # 运行程序
自定义状态码信息
# 自定义502状态码信息
@app.errorhandler(502)
def handle_502_error(error): # error:错误信息
return "服务器泡妞去了"
SQLAlchemy
SQLAlchemy他是ORM框架
flask-sqlalchemy 只能用于Flask
SQLAlchemy是一个关系型数据库框架,它提供了高层的ORM和底层的原生数据库的操作。
flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展。
安装
pip install flask-sqlalchemy
要连接数据还需要安装pymysql
pip install pymysql
在项目中数据库连接和常用配置:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import pymysql
pymysql.install_as_MySQLdb()
app = Flask(__name__)
# 设置连接数据库的URL
app.config['SQLALCHEMY_DATABASE_URI'] =
'mysql://root:123456@127.0.0.1:3306/db_flask'
# 数据库和模型类同步修改
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
# 查询时会显示原始SQL语句
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)
约束类型
primary key 主键
unique 唯一
index 索引
null 空
default 默认值
数据库会话也可以回滚,通过db.session.rollback()方法,实现会话提交数据前的状态。
创建表 和模型类
#类型
class Type(db.Model):
表名 __tablename__ = 'tbl_types'
# 数据库真正存在的字段
id = db.Column(db.Integer, primary_key=True) # 主键
name = db.Column(db.String(32), unique=True) # 名字
# 数据库中不存在的字段,只是为了查找和反向查找。
# backref:在关系的另一模型中添加反向引用
heros = db.relationship("Hero", backref='type')
# 英雄
class Hero(db.Model):
# 表名
__tablename__ = 'tbl_heros'
# 数据库真正存在的字段
id = db.Column(db.Integer, primary_key=True) # 主键
name = db.Column(db.String(64), unique=True) # 名字
gender = db.Column(db.String(64)) # 性别
# 外键 一个射手对应很多英雄
type_id = db.Column(db.Integer, db.ForeignKey("tbl_types.id"))
创建表和添加数据
if __name__ == '__main__':
app.run()
# db.drop_all()
# db.create_all()
# ht = HeroType()
# ht.name ='射手'
#
# ht1 = HeroType()
# ht1.name ='战士'
#
# db.session.add_all([ht,ht1])
# db.session.commit()
#
# h = Hero()
# h.name = '后裔'
# h.gender = False
#
# h1 = Hero()
# h1.name = '安琪拉'
# h1.gender = True
#
# db.session.add_all([h,h1])
# db.session.commit()
```