# Web框架-flask
# Flask概述
微型框架,只实现核心功能,其他功能通过扩展实现
3个主要依赖
- Werkzeug 提供 路由、调试和Web服务器网关接口WSGI
- Jianja2 模本系统
- Click 命令行
export FLASK_APP=flasky.py
export FLASK_DEBUG=1
flask run
或者进入调试上下文
flask shell
@app.shell_context_processor
def make_shell_context():
return dict(db=db, User=User, Role=Role)
这样 shell 中可以直接使用 db
- 测试
# flasky.py
@app.cli.command()
def test():
"""
Run the unit tests
"""
import unittest
tests = unittest.TestLoader().discover('tests')
unittest.TextTestRunner(verbosity=2).run(tests)
export FLASK_APP=flasky.py
flask test
# 应用和请求上下文
为了让视图函数参数简单整洁,Flask使用上下文让特定的变量在一个线程中全局可访问,而不受其他线程干扰
current_app 应用上下文
g 应用上下文
request 请求上下文
session 请求上下文
# 数据库相关
- 粗暴创建删除库表
db.create_all()
db.drop_all()
- 增量创建库表
# 安装迁移三方
pip install flask-sqlalchemy
pip install flask-migrate
export FLASK_APP=flasky.py
flask db init
flask db migrate
flask db upgrade
- 增删改查
# 新增
r1 = Role(name='Admin')
db.session.add(r1)
r2 = Role(name='User')
db.session.add(r2)
db.session.commit()
user = User(username='linda', password='123456', role_id=2)
db.session.add(user)
db.session.commit()
# 查找
role = Role.query.get(2)
role, role.users
queryset =User.query.filter_by(username='linda')
u = User.query.filter_by(username='linda').first()
u.username = 'tom'
db.session.commit()
# 删除
db.session.delete(u)
db.session.commit()
# Websocket
pip install websockets
pip install flask-socketio
- https://websockets.readthedocs.io/en/stable/index.html (opens new window)
- https://flask-socketio.readthedocs.io/en/latest/ (opens new window)
# Flask2.0异步特性
import asyncio
from flask import Flask
app = Flask(__name__)
@app.get('/')
async def say_hello():
await asyncio.sleep(1)
return {'message': 'Hello!'}