Flask Web框架中模型的相关与映射
一、关系映射
1、一对多
语法:
1、在“多”的实体中
增加一个列,引用自“一” 表的主键列
外键列名 = db.Column(db.Integer,db.ForeignKey('主键表,主键列'))
2、在“一”的实体中
增加关联属性以及反向引用关系
ex:
关联属性
在course对象中,通过一个属性能够得到对应的所有的teacher们
关联属性,是应该加在Course的实体类中
反向引用:
在student对象中,通过一个属性能够得到对应的course
反向引用关系属性,是应该加在Teacher的实体类中
增加关联属性和反向引用关系:
属性名 = db.relationship('多表实体类名',关系选项)
关系选项:
选项名 说明
backref 在关系的另一个模型中添加的反向引用属性名
lazy 指定如何加载当前的相关记录
select:首次访问时加载记录
immediate:源对象加载后马上加载相关记录
subquery:效果同上,利用子查询方式加载记录
noload:永不加载记录
dynamic:默认不加载记录,但会提供加载记录的查询
uselist 如果设置为False,表示不使用列表表示关联数据,而使 用标量
secondary 指定多对多关系映射中的关联表的名字
2、一对一
1、什么是一对一?
A表中的一条记录只能与B表中的一条记录相关联
B表中 的一条记录只能与A表中的一条记录相关联
2、在SQLAlchemy中的体现
1、在任意一个类中增加
外键列名 = db.Column(db.Integer,db.ForeignKey('主键表,主键列'))
2、在另外一个类中增加
关联属性 和 反向关系属性
属性 = db.relationship('关联的实体类',backref = '反向引用属性名',uselist= False)
3 、多对多:
1、什么是多对多?
A表中的一条数据可以与B表中任意多条数据相关联
B表中的一条数据可以与A表中任意多条数据相关联
2、实现
在数据库中使用第三张表(关联表)
在编程语言中可以不编写对应的实体类
创建第三张表
db.Table(
'student_course',#在数据库中表名
db.Column('id',db.Integer,primary_key=True),
db.Column('student_id',db.Integer,db.ForeignKey('student.id')),
db.Column('course_id',db.Integer,db.ForeignKey('course.id')),
)
二、cookies/cookie
1、什么是cookies?
cookies是一种数据存储手段
将一段文本保存在客户端(浏览器)的一种手段,并且可以长时间保存
2、cookies的使用场合
1、记住密码
2、记住搜索关键词
3、在Flask中使用cookies
1、使用响应对象将数据保存进cookies(客户端)
1、resp = make_response("字符串"|render_template())
2、resp = redirect('地址')
cookies的语法:
响应对象.set_cookie(key,value,max_age)
key:保存的cookie的名称
value:保存的cookie的值
max_age:保存的时间,取值为数字,默认以s为的单位
2、获取cookie的值
每次向服务器发送请求时,都会把cookie中的数据封装到request中并带到服务器上
在flask中通过request.cookies获取所有的cookies的值
3、删除cookie的值
响应对象.delete_cookie('key')
三、session - 会话
1、什么是会话?
session是保存在服务器上,为每个浏览器所开辟的一段空间
2、session在Flask中的实现
1、配置SECRET_KEY
app.config['SECRET_KEY']="xxxxxxxxx"
**值随意写,越复杂越好
2、使用session
from flask import session
1、向session中保存数据
session['key'] = value
2、取值
value = session['key']
value = session.get('key',' ')
3、从session中删除数据
del session['key']