Flask系列03--Flask的路由 app.route中的参数, 动态参数路由

时间:2023-03-09 21:32:17
Flask系列03--Flask的路由 app.route中的参数, 动态参数路由

Flask–路由

添加路由的两种方式

第一种

@app.route("/my_de")
def detail()

第二种(了解即可)

app.add_url_rule("/my_de",view_func=detail)

一. @app.route()中的参数

1.methods = [ ]:

当前url地址,允许访问的请求方式 类型为可迭代对象,允许八种http请求方式

@app.route("/info", methods=["GET", "POST"])
def student_info():
stu_id = int(request.args["id"])
return f"Hello Old boy {stu_id}"

2.endpoint = “ ”

路由Mapping地址对应视图函数,有点类似于django中的别名

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 Old boy {stu_id}"

3.strict_slashes=True

url地址结尾符“ / ”的控制False: 无论结尾 “ / ” 是否存在均可以访问, True: 结尾不允许是“ / ”, 类似与django中的APPEND_SLASH

# 访问地址 : /info
@app.route("/info", strict_slashes=True)
def student_info():
return "Hello Old boy info"

# 访问地址 : /infos or /infos/
@app.route("/infos", strict_slashes=False)
def student_infos():
return "Hello Old boy infos"

4.defaults={}

视图函数的参数默认值

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) #
return f"Hello Old boy {nid}"

5.redirect_to=“/index”

url地址重定向, 浏览器的请求返回为308

Flask系列03--Flask的路由 app.route中的参数, 动态参数路由

301和308都是永久重定向, 区别在于

  • 301 在重定向时允许改变请求方法
  • 308 在重定向时不允许改变请求方法,比如post请求被重定向时,redirect_to的url也为post请求方式,而301就有可能变成了get请求
# 访问地址 : /info 浏览器跳转至 /infos
@app.route("/info", strict_slashes=True, redirect_to="/infos")
def student_info():
return "Hello Old boy info"

@app.route("/infos", strict_slashes=False)
def student_infos():
return "Hello Old boy infos"

6.subdomain:

子域名前缀, subdoadmin=“car”, 这样可以得到car.xxx.com 不过还需要配置app.config["SERVER_NAME"] = "xxx.com"

app.config["SERVER_NAME"] = " xxx.com"

@app.route("/info",subdomain="car")
def student_info():
return "Hello Old boy info"

# 访问地址为: car.xxx.com/info

二. 动态参数路由

在url后定义一个参数接收,但是这种动态参数路由在url_for时,一定要将动态参数名+参数值添加进去,否则会抛出异常

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 Old boy {nid}"