第六篇 Flask中的路由系统
Posted fengchong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第六篇 Flask中的路由系统相关的知识,希望对你有一定的参考价值。
Flask中的路由系统其实我们并不陌生了,从一开始到现在都一直在应用
@app.route("/",methods=["GET","POST"])
为什么要这么用?其中的工作原理我们知道多少?
一、@app.route() 装饰器中的参数
methods :当前 url 地址,允许访问的请求方式
@app.route("/info", methods=["GET", "POST"]) def student_info(): stu_id = int(request.args["id"]) return f"Hello girl {stu_id}" # Python3.6的新特性 f"{变量名}"
endpoint :反向生成url地址标志,默认视图函数名(url_for)
from flask import url_for @app.route("/info", methods=["GET", "POST"], endpoint="r_info") def student_info(): print(url_for("r_info")) # /info stu_id = int(request.args["id"]) return f"Hello girl {stu_id}" # Python3.6的新特性 f"{变量名}"
defaults :视图函数的参数默认值{"nid":1}
from flask import url_for @app.route("/info", methods=["GET", "POST"], endpoint="r_info", defaults={"nid": 100}) def student_info(nid): print(url_for("r_info")) # /info # stu_id = int(request.args["id"]) print(nid) # 100 return f"Hello girl {nid}" # Python3.6的新特性 f"{变量名}"
strict_slashes :url地址结尾符"/"的控制 ,False : 无论结尾 "/" 是否存在均可以访问,True:必须严格遵循route的路由规则。
# 访问地址 : /info @app.route("/info", strict_slashes=True) def student_info(): return "Hello girl info" # 访问地址 : /infos or /infos/ @app.route("/infos", strict_slashes=False) def student_infos(): return "Hello girl infos"
redirect_to : url地址重定向,在进入视图函数之前重定向(301)
# 访问地址 : /info 浏览器跳转至 /infos @app.route("/info", strict_slashes=True, redirect_to="/infos") def student_info(): return "Hello girl info" @app.route("/infos", strict_slashes=False) def student_infos(): return "Hello girl infos"
subdomain :子域名前缀 subdomian="fengchong" 这样写可以得到 fengchong.kaifa.com 前提是app.config["SERVER_NAME"] = "kaifa.com"
app.config["SERVER_NAME"] = "kaifa.com" @app.route("/info",subdomain="fengchong") def student_info(): return "Hello girl info" # 访问地址为: fengchong.kaifa.com/info
动态路由参数<int:nid>or<string:nid>:
from flask import url_for # 访问地址 : http://127.0.0.1:5000/info/1 @app.route("/info/<int:nid>", methods=["GET", "POST"], endpoint="r_info") def student_info(nid): print(url_for("r_info",nid=2)) # /info/2 return f"Hello girl {nid}" # Python3.6的新特性 f"{变量名}"
<int:nid> 就是在url后定义一个参数接收,如果不指定参数类型默认为所有接受的参数都会被转为字符串类型。
但是这种动态参数路由,在url_for的时候,一定要将动态参数名+参数值添加进去,否则会抛出参数错误的异常
以上是关于第六篇 Flask中的路由系统的主要内容,如果未能解决你的问题,请参考以下文章
Flask最强攻略 - 跟DragonFire学Flask - 第六篇 Flask 中内置的 Session