flask的路由中有一些参数
使用案例
from flask import Flask, render_template, url_for, session, request, redirect app = Flask(__name__) app.secret_key = "wang" def confirm(func): def inner(*args, **kwargs): if session.get('auth'): return func(*args, **kwargs) else: next_url = request.path[1:] return redirect(url_for("login") + f"?next={next_url}") return inner @app.route('/', endpoint="index", redirect_to="/shopping") @confirm def index(): return "index" @app.route('/login/', methods=["GET", "POST"], defaults={"nid": 1001, }, strict_slashes=True) def login(nid): msg = "" print("===>", url_for("index")) # ===> /login, 当没有定义endpoint是, 可以直接写函数名, 当定义了 print("===>", nid) # ===> 1001 if request.method == "POST": auth = request.form.get("auth") if auth: session["auth"] = auth next_url = request.args.get("next", "index") return redirect(url_for(next_url)) else: msg = "error" return render_template("login.html", msg=msg) @app.route('/shopping/<int:year>/<string:month>', endpoint="shopping") def shopping(year, month): print(year, type(year), month, type(month)) # 1 <class 'int'> 2 <class 'str'> return "Shopping" if __name__ == '__main__': app.run(debug=True)
参数解析
重要的
endpoint="" 默认是函数名, 可以在app.route()的关键字参数中定义 url_for("") 反向地址, 通过视图函数名, 或endpoint解析对应的URL methods=[] 该视图函数能处理的请求方式, 默认是GET, 当重新定义了methods, 那么默认的GET也会被覆盖
一般的
defaults={} 给视图函数传递参数, 可以作为默认参数, 传了就必须的接 strict_slashes=Bool 严格的使用"/", URL中没有"/", 访问时也不能有, URL中有"/", 你访问时没有, 会通过301进行永久重定向 redirect_to="" 永久重定向
动态路由参数
'/shopping/<int:year>/<string:month>' 路由中使用参数, 并可以转换参数的数据类型, 切记数字可以转字符串, 字符串不能转数字