Flask知识点2

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:子查询,查询出一方就会将关联的一方查询出来

你可能感兴趣的:(Flask,flask,python,后端)