Flask基础(二)
# ----------------- Flask中的路由参数 ----------------------- @app.route('/', endpoint="end_a", defaults={"count": 20}, strict_slashes=True, redirect_to='/',methods=["GET","POST","options"]) # endpoint 反向url地址,必须唯一,默认为视图函数名(url_for)。相当于Django的name # methods 当前url地址允许访问的请求方式,支持HTTP/1.1八中标准请求方式,不分大小写 ["GET","Post"] # defaults 路由默认参数,需要和函数配合使用 # strict_slashes 是否严格遵循路由匹配规则,默认是True # redirect_to 访问该路由时直接重定向到指定地址 # 动态参数路由 "/get_music/<filename>",可以分页,获取文件,解决分类,解决正则路由问题
Flask初始化配置
# ----------------- Flask初始化配置 ------------------ app = Flask(__name__,template_folder="templates",static_folder="img",static_url_path="/static") # template_folder="templates" 模板文件存放路径 # static_folder="img" 静态文件存放目录,默认值是static # static_url_path="/static" 静态文件访问路径,默认值是 / + static_folder # 上面两个静态文件逻辑可参考下面函数 @app.route("/static/<filename>") def get_img(filename): filepath = os.path.join("img",filename) return send_file(filepath)
Flask实例配置 -> app的配置
# 第一种直接在app中进行配置:app.config app.config["DEBUG"] = True app.secret_key = "!@#!@$@#%#$%^#@#$!$" app.session_cookie_name = "I am Not session" app.permanent_session_lifetime = 20 # 这里是秒 # 第二种,写一个setting配置,然后导入使用即可 # setting文件中: class TestConfig(object): TESTING = True SECRET_KEY = hashlib.md5("{time.time()}@#$!#$!@$!!%$%#$@^@%${time.time()}".encode("utf-8")).hexdigest() PERMANENT_SESSION_LIFETIME = 360000 SESSION_COOKIE_NAME = "#$!#$!@#$!#@$@#%" # app中使用 app.config.from_object(TestConfig)
Flask 中的 蓝图 Blueprint (app01)
不能被run的Flask实例,不存在Config,也就没有run。只能在Flask中引用蓝图进行使用
蓝图的使用方法和Flask相似:
-
导入模块
-
为当前蓝图命名
-
在Flask中进行引用
示例:
# 创建蓝图文件:users.py from flask import Blueprint car_bp = Blueprint("app02",__name__,url_prefix="/car") # 实例化一个蓝图对象(Blueprint),url_prefix为url命名前缀 @car_bp.route("/add_user") def add_user(): return "car添加用户" @car_bp.route("/find_user") def find_user(): return "car查看用户" # 在Flask中进行使用:t3.py from users import car_bp # 导入蓝图 app.register_blueprint(car_bp) # 引用蓝图。引用蓝图后直接输入蓝图路由即可访问,如:主机/add_user # 如果蓝图有url_prefix则需要加上url前缀,如:主机/car/add_user
特殊装饰器
| 装饰器名称 | 装饰器作用 |
|---|---|
| @app.before_request | 在请求进入视图函数之前做出处理 |
| @app.after_request | 在响应返回客户端之前,结束视图函数之后 |
| @app.errorhandler(404) | 返回收集错误信息并返回,只能收集4xx,5xx |
@app.before_request
在请求进入视图函数之前做出处理
@app.after_request
在响应返回客户端之前,结束视图函数之后
be+af请求生命周期:
正常:be1 - be2 -vf -af2 - af1
异常:be1 - af2 - af1
只要有响应,af全部返回(在before_request遇到问题直接跳过视图函数,进行after_request)。流程图如下:

示例代码:访问index页面,分别设置返回be1或be2,看后台打印运行流程
from flask import Flask, render_template, send_file, session app = Flask(__name__,template_folder="templates",static_folder="img",static_url_path="/static") from setting import DebugConfig,TestConfig # 导入配置文件 app.config.from_object(DebugConfig) # 使用配置文件 from users import bp # 导入蓝图 from car_users import car_bp app.register_blueprint(bp) # 使用蓝图 app.register_blueprint(car_bp) @app.before_request def be1(): print("I am Be1") return "第一个请求你就过不去" @app.before_request def be2(): print("I am Be2") # return "第二个请求你过不去" @app.after_request def af1(res): print("I am af1") return res @app.after_request def af2(res): print("I am af2") return res @app.errorhandler(404) def error404(error_message): print(error_message) return "你的页面被哥斯拉吃了" # return send_file("img/1.jpg") # 同样有五种返回结果 @app.route("/index") def index(): print("index页面") return "这是一个index页面" if __name__ == '__main__': app.run()

浙公网安备 33010602011771号