Flask
2021-03-11 16:48:18 2 举报
AI智能生成
Flask最全思维导图
作者其他创作
大纲/内容
路由
route() 装饰器把函数绑定到 URL
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello, World'
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello, World'
变量规则
@app.route('/user/<username>')
@app.route('/post/<int:post_id>')
@app.route('/path/<path:subpath>')
URL 构建
url_for()
HTTP 方法
methods
@app.route('/login', methods=['GET', 'POST'])
静态文件
包或模块旁边创建一个名为 static 的文件夹,静态文件位于应用的 /static 中
url_for('static', filename='style.css')
蓝图和视图
注册蓝图
from flask import Flask
from yourapplication.simple_page import simple_page
app = Flask(__name__)
app.register_blueprint(simple_page)
from yourapplication.simple_page import simple_page
app = Flask(__name__)
app.register_blueprint(simple_page)
蓝图资源文件夹
Blueprint
静态文件
static_folder admin = Blueprint('admin', __name__, static_folder='static')
模板
admin = Blueprint('admin', __name__, template_folder='templates')
创建 URL
url_for('admin.index')
错误处理器
errorhandler 装饰器
@simple_page.errorhandler(404)
def page_not_found(e):
return render_template('pages/404.html')
def page_not_found(e):
return render_template('pages/404.html')
Jinja模板
标准环境
config
当前配置对象( flask.config )
request
当前请求对象( flask.request )。 在没有活动请求环境情况下渲染模板时,这个变量不可用。
session
当前会话对象( flask.session )。 在没有活动请求环境情况下渲染模板时,这个变量不可用。
g
请求绑定的全局变量( flask.g )。 在没有活动请求环境情况下渲染模板时,这个变量不可用。
url_for()
flask.url_for() 函数。
get_flashed_messages()
flask.get_flashed_messages() 函数.
继承
{%extends%}和{%block%}
创建宏
抽象,不要重复劳动。<br>with context.
标准过滤器
tojson()
把对象转换为 JSON 格式 {{ user.username|tojson }}
控制自动转义
{% autoescape %}
{% autoescape false %}
<p>autoescaping is disabled here
{% endautoescape %}
<p>autoescaping is disabled here
{% endautoescape %}
注册过滤器
放入应用的 jinja_env 中
使用 template_filter() 装饰器
缓存
Cookies
读取 cookies
username = request.cookies.get('username')
储存 cookies
resp = make_response(render_template(...))
resp.set_cookie('username', 'the username')
return resp
resp.set_cookie('username', 'the username')
return resp
虚拟环境
virtualenv
virtualenvwarpper
配置
配置入门
config 实质上是一个字典的子类
app = Flask(__name__)
app.config['TESTING'] = True
app.config['TESTING'] = True
一次更新多个配置值可以使用 dict.update() 方法:
app.config.update(
TESTING=True,
SECRET_KEY=b'_5#y2L"F4Q8z\n\xec]/'
)
TESTING=True,
SECRET_KEY=b'_5#y2L"F4Q8z\n\xec]/'
)
内置配置变量
ENV
应用运行于什么环境
DEBUG
是否开启调试模式
TESTING
开启测试模式
PROPAGATE_EXCEPTIONS
异常会重新引发而不是被应用的错误处理器处理
文件上传
HTML 表单设置
enctype="multipart/form-data"
后端保存
from flask import request
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
f = request.files['the_file']
f.save('/var/www/uploads/uploaded_file.txt')
...
@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
f = request.files['the_file']
f.save('/var/www/uploads/uploaded_file.txt')
...
请求响应
请求
request.form['username'],
request.form['password']
request.form['password']
响应
jsonify()
return jsonify([user.to_json() for user in users])
Flask 扩展
SQLAlchemy
database.py 模块
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('sqlite:////tmp/test.db', convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()
def init_db():
# 在这里导入定义模型所需要的所有模块,这样它们就会正确的注册在
# 元数据上。否则你就必须在调用 init_db() 之前导入它们。
import yourapplication.models
Base.metadata.create_all(bind=engine)
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('sqlite:////tmp/test.db', convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()
def init_db():
# 在这里导入定义模型所需要的所有模块,这样它们就会正确的注册在
# 元数据上。否则你就必须在调用 init_db() 之前导入它们。
import yourapplication.models
Base.metadata.create_all(bind=engine)
部署
安装
$ pip install greenlet # 使用异步必须安装
$ pip install eventlet # 使用eventlet workers
$ pip install gevent # 使用gevent workers
$ pip install eventlet # 使用eventlet workers
$ pip install gevent # 使用gevent workers
在shell中输入你的启动配置,比如:
$ gunicorn -w 3 -b 127.0.0.1:8080 app:app
# 此处app:app中,第一个app为flask项目实例所在的包,第二个app为生成的flask项目实例
# 此处app:app中,第一个app为flask项目实例所在的包,第二个app为生成的flask项目实例
结束gunicorn服务进程
使用ps -ef | grep gunicorn命令找出gunicorn所有进程
使用 kill -9 进程ID 命令来杀掉进程
0 条评论
下一页