Flask 路由及蓝图

作者: ropon 分类: Flask 发布时间: 2019-03-22 09:38
# 路由
# methods 配置请求允许方式 是复数也就是一个可迭代对象 ["GET", "POST"]
# endpoint 反向解析url地址的标志 默认是视图函数名 url_for()解析
# defaults 配置视图函数的默认参数值 defaults={"page": "22"}
# strict_slashes 是否严格遵循路由地址 默认是True 访问/index/1 会自动跳转到/index/1/
# redirect_to 永久重定向 301

@app.route('/index/<int:page>/', methods=['GET', 'POST'], endpoint='index')
def index(page):
    # print(page, type(page))  # 接收的默认是字符串类型
    # print(url_for('index', page=page))
    # print(get_flashed_messages(category_filter="tag"))
    # print(get_flashed_messages(category_filter="tag1"))
    return 'This is %s page' % page

# flask实例化配置
# template_folder="templates" 配置模板路径
# static_folder="static" 配置静态文件路径
# static_url_path="/static" 配置静态文件路由地址 默认是"/"+static_folder
# static_host=None 配置静态文件服务器地址
# host_matching=False 需要先配置server_name
# subdomain_matching=False 需要先配置server_name
# instance_path=None 配置另外一个flask实例的路径
# instance_relative_config=False 是否加载另外一个flask实例配置
# root_path=None 配置主模块的绝对路径 默认是项目目录
# subdomain=None 配置通过子域名访问

from flask import Flask

app = Flask(__name__)
app.config["SERVER_NAME"] = "pg.top:5000"


@app.route("/index", subdomain="index")
# 通过 index.pg.top:5000/index 访问
# subdomain 配置子域名
def index():
    print("index")
    return "index"


@app.route("/space", subdomain="<username>")
# 通过 lp.pg.top:5000/space 访问
# 通过 xs.pg.top:5000/space 访问
def userspace(username):
    return username + ".pg.top"


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

app = Flask(__name__, template_folder="templates", static_folder="static", static_url_path="/static")

# flask对象app配置
# app.debug=False 是否开启调试模式
# app.testing=False 是否开启测试模式
# app.secret_key 配置使用内置session/flash 时加密字符串
# app.permanent_session_lifetime=31 配置session生命周期 天为单位 默认31天
# app.session_cookie_name 配置在cookie中存放session加密字符串的名字

class FlaskDebug(object):
    DEBUG = True
    SECRET_KEY = "debugjiamizifuchuan"
    PERMANENT_SESSION_LIFETIME = 7
    SESSION_COOKIE_NAME = "Debug_Session"

# 通过类方式导入配置
app.config.from_object(FlaskDebug)

# 蓝图
# Blueprint 实际是一个不能被启动app flask实例
# url_prefix="/stu" 配置url前缀

from flask import Blueprint
stu = Blueprint("stu", __name__)

@stu.route("/home")
def index():
    return "这是stu首页"

# app中需要注册蓝图
app.register_blueprint(student.stu)

# 闪现 在session中存储一个暑假,读取是通过pop将数据移除
from flask import flash
# 存闪现并打个标签
flash("闪现", "tag")
flash("闪现12", "tag1")

# 通过标签取闪现
get_flashed_messages(category_filter="tag")
get_flashed_messages(category_filter=["tag", "tag1"])

# 中间件 用户发送请求时 执行__call__方法
# class MiddleWare(object):
#     def __init__(self, old_app):
#         self.old_app = old_app
#     def __call__(self, environ, start_response):
#         print("执行前")
#         ret = self.old_app(environ, start_response)
#         print("执行后")
#         return ret
#
#
# if __name__ == '__main__':
#     app.wsgi_app = MiddleWare(app.wsgi_app)
#     app.run(host="192.168.3.20")

# 特殊装饰器函数
# 请求进入视图之前
@app.before_first_request
def bfr1():
    print("首次请求前执行")

@app.before_request
def br1():
    print("每次请求前执行")
    # return "请求不合法!"
    err = "请求不合法!"
    # return render_template("error.html", err_msg=err)

# 在响应之前
@app.after_request
def ar1(args):
    print("每次响应之前执行")
    print(args)
    return args

# 正常情况下 before_request 自上而下执行 after_request 自下而上执行
# 异常情况下 before_request1 after_request 自下而上执行

# 自定义404错误页
@app.errorhandler(404)
def error404(err_info):
    print(err_info)
    return render_template("404.html")

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!