Python-Flask 路由定义以及变量的规则(3)

一、 路由

1.查看路由装饰器的源码

@app.route('/index')
def index():
    return ''

URL : http://192.168.1.10:8080/index

route:
    def route(self, rule, **options):
        def decorator(f):
            self.add_url_rule(rule, endpoint, f, **options)
            return f
        return decorator

使用 route() 装饰器来把函数绑定到 URL,这个装饰器其实就是将rule字符串跟视图函数通过add_url_rule()实现的绑定。

@app.route('/index')
def index():
    return 'welcome everyone!'

等效的
def index():
    return 'welcome everyone!'
app.add_url_rule('/index', view_func=index)

2.路由的常用参数
(1)通常第一个参数表示的是访问的路径,比如/user,/login,/lgout等
(2)另外默认什么都不加的时候,表示的采用get进行访问。

Web 应用使用不同的 HTTP 方法处理 URL , 缺省情况下,一个路由发送 GET 请求。 可以使用 route() 装饰器的 methods 参数来处理不同的 HTTP 方法:

from flask import request

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return do_the_login()
    else:
        return show_the_login_form()

如果当前使用了 GET 方法, Flask 会自动添加 HEAD 方法支持,并且同时还会按照 HTTP RFC 来处理 HEAD 请求。同样, OPTIONS 也会自动实现。

查看路由规则表:app.url_map

二、路由的变量规则

类型说明
string(缺省值) 接受任何不包含斜杠的文本 *
int接受正整数 *
float接受正浮点数
path类似 string ,但可以包含斜杠
uuid接受 UUID 字符串

带*表示的是常用的变量方式

@app.route('/getcity/<key>')  # key就是一个变量名,默认是字符串类型的
def get_city(key):  # 参数是必须添加的
    print(type(key))
    return data.get(key)

三、唯一的 URL / 重定向行为

以下两条规则的不同之处在于是否使用尾部的斜杠:

@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'

(1)projects 的 URL 尾部有一个斜杠,看起来就如同一个文件夹。 如果访问的时候没有带上/,Flask 会自动进行重定向,帮你在尾部加上一个斜杠。

(2)about 的 URL 没有尾部斜杠,因此其行为类似于访问一个文件。如果访问这个 URL 时添加了尾部斜杠就会得到一个 404 错误。这样可以保持 URL 唯一,并帮助 搜索引擎避免重复索引同一页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flask中的路由规则定义了浏览器请求何时应该与哪个视图函数进行匹配。以下是一些常见的路由规则: 1. 常规路由规则 ```python @app.route('/hello') def hello(): return 'Hello, World!' ``` 在上面的代码中,`/hello`是路由规则,它将匹配网站的根目录后面跟着`/hello`的任何请求,并调用`hello`函数来处理它。 2. 动态路由规则 ```python @app.route('/user/<username>') def show_user_profile(username): return 'User %s' % username ``` 这个路由规则将匹配网站根目录后面跟着`/user/`的任何请求,并将`<username>`作为变量传递给`show_user_profile`函数。例如,如果请求的URL是`/user/john`,`username`变量将被设置为`"john"`。 3. 指定HTTP方法 ```python @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': return do_the_login() else: return show_the_login_form() ``` 这个路由规则将匹配网站根目录后面跟着`/login`的任何请求,但只有当请求方法是`GET`或`POST`时才会匹配。如果请求方法是`POST`,则调用`do_the_login`函数来处理它,否则调用`show_the_login_form`函数。 4. 指定URL参数类型 ```python @app.route('/user/<int:user_id>') def show_user(user_id): return 'User %d' % user_id ``` 这个路由规则将匹配网站根目录后面跟着`/user/`的任何请求,并将`<user_id>`作为整数变量传递给`show_user`函数。如果请求的URL是`/user/42`,`user_id`变量将被设置为`42`。 5. 指定多个路由规则 ```python @app.route('/') @app.route('/index') def index(): return 'Index Page' ``` 这个路由规则将匹配网站根目录或者跟着`/index`的任何请求,并调用`index`函数来处理它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值