欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Flask 中的路由系统

程序员文章站 2023-01-22 19:51:23
[TOC] 1.methods允许请求的方法 methods : 当前 url 地址,允许访问的请求方式,默认不写为GET方法 2.endpoint url的反向解析 endpoint : 反向url地址,默认为视图函数名 (url_for) 3.defaults默认参数 defaults : 视图 ......

目录

1.methods允许请求的方法

methods : 当前 url 地址,允许访问的请求方式,默认不写为get方法

@app.route("/info", methods=["get", "post"])
def student_info():
    stu_id = int(request.args["id"])
    return f"hello old boy {stu_id}"  # python3.6的新特性 f"{变量名}"

2.endpoint url的反向解析

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 old boy {stu_id}"  # python3.6的新特性 f"{变量名}

3.defaults默认参数

defaults : 视图函数的参数默认值{"nid":1}

from flask import url_for


@app.route("/info", methods=["get", "post"], endpoint="r_info", defaults={"nid": 100})
def student_info(nid):  #这里形参必须有个nid接收
    print(url_for("r_info"))  # /info
    # stu_id = int(request.args["id"])
    print(nid)  # 100
    return f"hello old boy {nid}"  # python3.6的新特性 f"{变量名}"

4.strict_slashes url结尾界定符匹配

strict_slashes : url地址结尾符"/"的控制 false : 无论结尾 "/" 是否存在均可以访问 , true : 结尾必须不能是 "/"

# 访问地址 : /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"

5.redirect_to url地址重定向

redirect_to : url地址重定向,且为308永久重定向

# 访问地址 : /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 子域名

subdomain : 子域名前缀 subdomian="cnblogs" 这样写可以得到 cnblogs.aspx.com 前提是app.config["server_name"] = "aspx.com"

app.config["server_name"] = "aspx.com"

@app.route("/info",subdomain="cnblogs")
def student_info():
    return "hello cnblogs info"

# 访问地址为:  cnblogs.aspx.com/info

7.动态参数路由

就是在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}"  # python3.6的新特性 f"{变量名}"

多个参数传递:

from flask import url_for


# 访问地址 : http://127.0.0.1:5000/info/1
@app.route("/info/<nid1>/<nid2>", methods=["get", "post"], endpoint="r_info")
def student_info(nid):
    print(url_for("r_info",nid=2,nid=3))  # /info/2/3
    return f"hello old boy {nid}"  # python3.6的新特性 f"{变量名}"