Flask 中的路由
@app.route("/login",methods=['GET','POST']...)
#路由中的参数
endpoint 不能重复 对应视图函数 默认是视图函数名 #路由和视图函数之间的桥梁
methods #允许请求的方式 ["GET","POST","DELETE","PUT"]
redirect_to #永久重定向 没有进入视图层面直接跳转
strict_slashes #是否严格要求路由匹配
defaults={"nid":"xxx"} #默认参数 def视图函数(nid)要接收参数
**动态参数路由
应用场景:利用send_file限定返回文件
@app.route("/look/<images>/<picture>")
def look(images,picture) #函数要接收动态函数
...
Flask 初始化(实例化)参数
static_folder #静态文件存放路径
static_url_path #静态文件访问路径(默认值为"/{static_folder}")
template_folder #模板存放路径
static_host #静态文件访问服务HOST -> 指向到另一台服务器
- static_folder和static_url_path的关系:
1.默认情况下访问路径是 /存放路径
2.存放路径和访问路径可以不同
3.url中只需要对上访问路径,对上了访问路径,会自动去存放路径寻找文件
如:
# image目录下存放一个img.jpg文件
static_folder = "image"
static_url_path = "/static"
访问 http://127.0.0.1:5000/static/img.jpg #自动找到image目录下的img.jpg文件
Flask 对象配置
#查看默认配置
app.default_config
#两个模式:
DEBUG模式 开启编辑时代码自动重启 Log打印级别最低 错误信息透传
TESTING模式 无限接近生产环境 不会开启代码编辑重启 Log级别较高 错误信息不再透传
#一个坑:
SESSION_COOKIE_NAME #设置存放在浏览器cookie中session的名称,但第一个字符绝对不能是空格!
- Flask Config 快速配置
#自定义一个xx.py文件,创建两个类(DEBUG,TESTING)
#分别在每个类中写入配置的内容(全部大写)
class DebugConfig:
DEBUG = True
secret_key = "%(($%^#"
...
class TestingConfig:
TESTING = True
secret_key = "(*&^&^%$"
...
# 回到app所在文件中,导入上述两个类
# config.from_object快速配置
from xx.py import DebugConfig,TestingConfig
app.config.from_object(DebugConfig)
Flask 中的蓝图 Blueprint
- 相当于Django的app01
- 不能run的flask实例
- 作用:功能隔离 路由隔离
# 步骤
# 新建蓝图文件
from flask import Blueprint
bp = Blueprint("蓝图唯一名称",__name__)
@bp.route("/路由",url_prefix="/url前缀")
def bp_idnex():
...
# app所在文件
from xx import 蓝图对象
app.register_blueprint(蓝图对象)
#几点注意事项:
1.url_prefix url前缀(用于隔离不同蓝图相同的url)
2.同一app下蓝图名称必须唯一
3.在Flask实例中必须注册蓝图!!!(app.register_blueprint())
Flask 特殊装饰器
@app.before_request # 请求进入视图函数之前
@app.after_request # 请求结束,返回响应之前
正常: be1 - be2 - be3 - vf - af3 - af2 - af1
异常: be1 - be2 - af3 - af2 - af1(并不是对应的)
@app.errorhandler(4xx or 5xx) # 重定义错误信息
@app.errorhandler(404)
def error404(ErrorMessage):
print(ErrorMessage)
return f"你访问的{request.path}页面不存在"