Flask—路由

本文详细探讨了Flask框架中的路由配置,包括添加路由的方式、路由参数的使用,以及动态路由参数的实现。通过路由装饰器,开发者可以灵活地定义URL到特定视图函数的映射,实现强大的Web应用功能。

一、添加路由方式

# 方式一
@app.route("/index", endpoint='index')
def my_flask():
    time.sleep(1)
    
    return "hello world"

# 方式二
def my_flask():
    time.sleep(1)
    
    return "hello world"

app.add_url_rule("/index", view_func=my_flask)

二、路由配置

1. 路由参数

app.add_url_rule("路由地址", view_func=视图函数, endpoint="反向地址")

2. 路由装饰器中的参数

# @app.route(),此装饰器中的参数

1. methods:当前url地址允许访问的请求方式
    @app.route("/info", methods=["GET","POST"])

2. endpoint:反向url地址,默认为视图函数名(url_for)

    (1)实例
    from flask import url_for

    @app.route("/info", methods=["GET","POST"], endpoint='r_info')
    def student_info():
        # 用url_for根据视图函数名找url路径,需导入
        print(url_for("r_info")) # /info
        stu_id = int(request.args['id'])

        # Python3.6的新特性 f"{变量名}"
        return f"{stu_id}" 

3. defaults:视图函数的参数默认值{'nid':1}

    (1) 实例
    from flask import url_for

    @app.route("/info",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

        # Python3.6的新特性 f"{变量名}"
        return f" {nid}"  

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

    (1) 实例
    # 访问地址 : /info
    @app.route("/info", strict_slashes=True)
    def student_info():
        return "hello world"
    
    # 访问地址 : /infos  or  /infos/
    @app.route("/infos", strict_slashes=False)
    def student_infos():
        return "hello world"

5. redirect_to : url地址永久重定向(301)

    (1) 实例
    # 访问地址 : /info 浏览器跳转至 /infos
    @app.route("/info", strict_slashes=True, redirect_to="/infos")
    def student_info():
        return "hello world"
    
    @app.route("/infos", strict_slashes=False)
    def student_infos():
        return "hello world"

6. subdomain : 子域名前缀
    
    subdomian="DragonFire" 这样写可以得到子域名.主域名前提是
    app.config["SERVER_NAME"] = "as.com"

    (1) 实例
    app.config["SERVER_NAME"] = "as.com"
    @app.route("/info",subdomain="son")
    def student_info():
        return "hello world"
    # 访问地址为:  son.as.com/info


3. 动态路由参数

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

备注:
    <int:nid>就是在url后定义的一个参数接收,但是这种动态参数路由,在url_for的时候,
    一定要将动态参数名+参数值添加进去,否则会抛出参数错误的异常
      

 

### Flask 路由使用指南 Flask 是一个轻量级的 Python Web 框架,其路由系统允许开发者将 URL 映射到特定的视图函数。以下是一个关于 Flask 路由的基本使用指南和示例代码。 #### 基本路由配置 在 Flask 中,可以通过 `@app.route` 装饰器定义路由。该装饰器接收一个 URL 规则作为参数,并将其绑定到指定的视图函数[^5]。 ```python from flask import Flask app = Flask(__name__) @app.route('/') def home(): return "欢迎访问主页!" if __name__ == '__main__': app.run() ``` 上述代码中,`/` 表示根路径,当用户访问根路径时,`home` 函数会被调用并返回响应内容[^5]。 #### 动态路由 动态路由允许在 URL 中包含变量。这些变量可以通过 `<variable_name>` 的形式定义,并在视图函数中作为参数接收[^6]。 ```python @app.route('/user/<username>') def show_user_profile(username): return f'用户 {username} 的个人主页' ``` 在这个例子中,`<username>` 是一个动态部分,任何匹配 `/user/<username>` 格式的请求都会被路由到 `show_user_profile` 函数,其中 `username` 参数会传递给该函数[^6]。 #### HTTP 方法支持 默认情况下,`@app.route` 装饰器只处理 GET 请求。如果需要支持其他 HTTP 方法(如 POST),可以使用 `methods` 参数显式指定允许的方法[^7]。 ```python @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': return "处理登录表单" else: return "显示登录页面" ``` 在此示例中,`/login` 路径同时支持 GET 和 POST 请求。根据请求方法的不同,视图函数会执行不同的逻辑[^7]。 #### 自定义转换器 Flask 允许自定义 URL 变量的类型。除了默认的字符串类型外,还可以使用 `int`、`float` 或自定义转换器[^8]。 ```python @app.route('/post/<int:post_id>') def show_post(post_id): return f'文章 ID 为 {post_id}' ``` 此代码片段展示了如何通过 `<int:post_id>` 将 URL 参数 `post_id` 转换为整数类型[^8]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值