Flask学习Ⅱ

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}页面不存在"
原文地址:https://www.cnblogs.com/straightup/p/13709073.html