1、flash()
get_flashed_messages() : 用来消耗flash方法中存储的消息
使用flash存储消息时,需要设置SECRET_KEY
flash 内部消息存储依赖了session
2、CSRF(Cross Site Request Forgery) 跨站请求伪造,指攻击者盗用你的身份发送恶意请求
CSRFProtect解决CSRF
<1>安装扩展包 flask-wtf
from flask_wtf.csrf import CSRFProtect
<2>设置SECRET_KEY便于设置CSRF token:
app.config['SECRET_KEY'] ='ssddddaaddsa'
<3>创建CSRFProtect对象,保护app对象:CSRFProtect(app)
<4>在表单中设置csrf_token即可:
3、ORM(Sqlalchemy) 对象关系映射
优点:不在编写sql,无需关心数据库类型
缺点:性能有缺失
配置步骤:
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
app = Flask(__name__)
app.app_context().push()
#配置数据库信息,这里是mysql
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:[email protected]:3306/mydatabase'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
#是否显示底层的sql语句
app.config['SQLALCHEMY_ECHO'] = True
app.config['SECRET_KEY'] = 'abin'
#关联app
db = SQLAlchemy(app)
#编写模型类
class User(db.Model):
__tablename__ = "userinfo"
id = db.Column(db.Integer, primary_key=True)
userid = db.Column(db.String(50), nullable=False) #不能为空
password = db.Column(db.String(50), nullable=False)
if __name__ == "__main__":
#创建表
db.create_all()
#删除表
db.drop_all()
4、数据库的增删改
常见方法:
db.session.add(obj) #添加单个
db.session.add_all([obj1,obj2]) #添加多个
db.session.delete()#删除单个对象
db.session.commit()#提交会画
db.drop_all()#删除继承自db.Model所有表
db.create_all()#创建继承自db.Model所有表
db.session.rollback() #回滚
db.session.remove()#移除会话
5、数据库的查询
基本查询:模型.query.查询过滤器.查询执行器
查询过滤器(可写):filter()、filter_by()、limit()、offset()、order_by()、group_by()
查询执行器(必写):all()、first()、first_or_404()、get()、get_or_404()、count()、
paginate()(分页)
xxx.query.paginate(page,per_page,Error_out)
page:总页数;per_page:当前页;Error_out:建议false,查询不到不会报错
数据库关系查询relationship,在模型类中添加,不会在数据库产生实体字段
db.relationship('多方的模型类', backref=‘xxx’)
backref='xxx' 添加反向属性,表示反向查询
懒查询lazy
使用了relationship,backref,系统会自动做子查询,即将关联的一方查询出来
db.relationship('多方的模型类', backref=‘xxx’, lazy='dynamic')
dynamic:动态查询,只有用到了才会查询
subquery:子查询,查询出一方就会将关联的一方查询出来