33

Flask中的路由、实例化参数和config配置文件

 4 years ago
source link: https://www.tuicool.com/articles/NVRRZ3q
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Flask中的路由

endpoint 别名不能重复,对应的视图函数,默认是视图函数名。endpoint 才是路由的核心。视图函数与路由的对应关系。可以通过url_for 反向创建url

# methods允许的亲求方式methods=["GET","POST","DELETE","PUT"]大小写都可以;
# redirect_to永久重定向;
#strict_slashes是否严格要求路由匹配规则,就是url最后的/ strict_slashes=True时不能加/

@app.route('/look',endpoint="look",methods=["GET","POST"], redirect_to="/new_look",strict_slashes=True,defaults={”nid":1})
def look(nid):
    return f"123{nid}"   # 返回1231
# ********** 动态参数路由  **********
@app.route("/look/<int:page>")  # int只能接受int 类型的
@app.route("/look/<string:page>")   #string 可以接收任意类型
@app.route("/look/<page>")  # 默认就是string类型
def look(page):
    return f"当前访问第{page}页"
@app.route("/look/<int:page>_<int:row>")
def look(page,row):
    return f"当前访问第{page}页"

应用场景  利用seng_file()
@app.route("/look/<folder>/<filename>")
def look(folder,filename):
    file_path = os.path.join(folder,filename)
    return send_file(file_path)
# 访问:127.0.0.1:5000/look/image/1.jpg

@app.route("/look/<filename>")
def look(folder,filename):
    file_path = os.path.join("image",filename)
    return send_file(file_path)
# 访问:127.0.0.1:5000/look/1.jpg

Flask 初始化 实例化参数

  • static_folder 静态文件存放路径
  • static_url_path 静态文件访问路径 默认值为“/{static_folder}”
  • template_folder 模板存放路径
  • static_host 静态文件访问服务 http://127.0.0.1:5000/,也可以是另一台服务器Host
from flask import Flask, render_template
# 如果html文件存放在了一个不是templates的文件夹中了,配置template_folder=是flask可以找到html所在位置
# static_folder="statics" 静态文件存放位置
# static_url_path='/static' 静态文件访问时的路径
app = Flask(__name__, template_folder='templatesasdf', static_folder="statics", static_url_path='/static')
app.debug = True

@app.route('/')
def index():
    return render_template('index.html')

if __name__ == '__main__':
    app.run()
    

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<h1>h1h1</h1>
<img src="/static/1.jpg/">
</body>
</html>

Flask 对象配置文件

app.default_config()

{
    'DEBUG': False,  # 是否开启Debug模式,开启编辑时代码重启,LOG打印级别最低,错误信息透传
    'TESTING': False,  # 是否开启测试模式,无限接近生产环境,代码编辑时不会重启,LOG级别较高,错误信息不再透传
    
    'PROPAGATE_EXCEPTIONS': None,  # 异常传播(是否在控制台打印LOG) 当Debug或者testing开启后,自动为True
    'PRESERVE_CONTEXT_ON_EXCEPTION': None,  # 一两句话说不清楚,一般不用它
    'SECRET_KEY': None,  # 之前遇到过,在启用Session的时候,一定要有它
    'PERMANENT_SESSION_LIFETIME': timedelta(days=31),  # days , Session的生命周期(秒)默认31天的秒数
    'USE_X_SENDFILE': False,  # 是否弃用 x_sendfile
    'LOGGER_NAME': None,  # 日志记录器的名称
    'LOGGER_HANDLER_POLICY': 'always',
    'SERVER_NAME': None,  # 服务访问域名
    'APPLICATION_ROOT': None,  # 项目的完整路径
    'SESSION_COOKIE_NAME': 'session',  # 在cookies中存放session加密字符串的名字
    'SESSION_COOKIE_DOMAIN': None,  # 在哪个域名下会产生session记录在cookies中
    'SESSION_COOKIE_PATH': None,  # cookies的路径
    'SESSION_COOKIE_HTTPONLY': True,  # 控制 cookie 是否应被设置 httponly 的标志,
    'SESSION_COOKIE_SECURE': False,  # 控制 cookie 是否应被设置安全标志
    'SESSION_REFRESH_EACH_REQUEST': True,  # 这个标志控制永久会话如何刷新
    'MAX_CONTENT_LENGTH': None,  # 如果设置为字节数, Flask 会拒绝内容长度大于此值的请求进入,并返回一个 413 状态码
    'SEND_FILE_MAX_AGE_DEFAULT': 12,  # hours 默认缓存控制的最大期限
    'TRAP_BAD_REQUEST_ERRORS': False,
    # 如果这个值被设置为 True ,Flask不会执行 HTTP 异常的错误处理,而是像对待其它异常一样,
    # 通过异常栈让它冒泡地抛出。这对于需要找出 HTTP 异常源头的可怕调试情形是有用的。
    'TRAP_HTTP_EXCEPTIONS': False,
    # Werkzeug 处理请求中的特定数据的内部数据结构会抛出同样也是“错误的请求”异常的特殊的 key errors 。
    # 同样地,为了保持一致,许多操作可以显式地抛出 BadRequest 异常。
    # 因为在调试中,你希望准确地找出异常的原因,这个设置用于在这些情形下调试。
    # 如果这个值被设置为 True ,你只会得到常规的回溯。
    'EXPLAIN_TEMPLATE_LOADING': False,
    'PREFERRED_URL_SCHEME': 'http',  # 生成URL的时候如果没有可用的 URL 模式话将使用这个值
    'JSON_AS_ASCII': True,
    # 默认情况下 Flask 使用 ascii 编码来序列化对象。如果这个值被设置为 False ,
    # Flask不会将其编码为 ASCII,并且按原样输出,返回它的 unicode 字符串。
    # 比如 jsonfiy 会自动地采用 utf-8 来编码它然后才进行传输。
    'JSON_SORT_KEYS': True,
    #默认情况下 Flask 按照 JSON 对象的键的顺序来序来序列化它。
    # 这样做是为了确保键的顺序不会受到字典的哈希种子的影响,从而返回的值每次都是一致的,不会造成无用的额外 HTTP 缓存。
    # 你可以通过修改这个配置的值来覆盖默认的操作。但这是不被推荐的做法因为这个默认的行为可能会给你在性能的代价上带来改善。
    'JSONIFY_PRETTYPRINT_REGULAR': True,
    'JSONIFY_MIMETYPE': 'application/json',
    'TEMPLATES_AUTO_RELOAD': None,
}

app.config["SECRET_KEY"]="!@#$%^&*()"   # 效率高
app.secret_key = "!@#$%^&*()"   # 效率低
app.config['SESSION_COOKIE_NAME']: 'session'    # 配置session的名字,默认是session,第一个字符一定不能是空格,否则拿不到session值

config配置

# setting.py
class DedugConfig:
    DEBUG = True
    SECRET_KEY = "!@#$%^&*()"  # 效率高
    PERMANENT_SESSION_LIFETIME = 3600
    SESSION_COOKIE_NAME = 'I an session'
class TestConfig:
    TESTING = True
    SECRET_KEY = "!@#$%^&*()"  # 效率高
    PERMANENT_SESSION_LIFETIME = 3600
    SESSION_COOKIE_NAME = 'TestConfig'
from flask import Flask, render_template

app = Flask(__name__)
# app.config["debug"] = True
# app.config["PERMANENT_SESSION_LIFETIME"] = 3600  # session存活时间
# app.config["SECRET_KEY"] = "!@#$%^&*()"  # 效率高
# app.config['SESSION_COOKIE_NAME'] = 'session'
# app.default_config  # 查看配置文件

# 导入两个debug配置类
from day02.setting import DebugConfig, TestConfig
# 可以快速切换开发环境和测试环境
app.config.from_object(DebugConfig) # debug模式  开发环境
# app.config.from_object(TestConfig)    # testing模式 测试环境

@app.route('/')
def index():
    return render_template('index.html')

if __name__ == '__main__':
    app.run()

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK