Flask框架(5)

本文详细探讨了Flask框架中的session管理,包括存储方式、过期时间设定、删除session的方法以及如何将session存储在服务端。此外,还介绍了如何使用abort()函数来处理错误信息。最后,文章深入讲解了SQLAlchemy作为ORM框架在Flask中的应用,包括数据库连接配置、约束类型以及创建表和模型类的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()
    ```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值