1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
| # 路由 # 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")
|