Restful URL

Restful URL - 变量规则

简单来说,Restful URL可以看做是对 URL 参数的替代。

编辑server.py:

from flask import Flask

app = Flask(__name__)

@app.route('/user/<username>')

def user(username):

    print(username)

    print(type(username))

    return 'hello ' + username

@app.route('/user/<username>/friends')

def user_friends(username):

    print(username)

    print(type(username))

    return 'In user_friends get username: ' + username

if __name__ == '__main__':

    app.run(port=5000, debug=True)

运行server.py。使用浏览器访问http://127.0.0.1:5000/user/Loen,server.py将输出:


而访问http://127.0.0.1:5000/user/Loen/


浏览器访问http://127.0.0.1:5000/user/Loen/friends,可以看到




转换类型

由上面的示例可以看出,使用 Restful URL 得到的变量默认为str对象。我们可以用flask内置的转换机制,即在route中指定转换类型。

编写server.py:

from flask import Flask

app = Flask(__name__)

@app.route('/page/<int:num>')

def page(num):

    print(num)

    print(type(num))

    return 'hello world'

if __name__ == '__main__':

    app.run(port=5000, debug=True)

@app.route('/page/int:num')会将num变量自动转换成int类型。

运行上面的程序,在浏览器中访问 http://127.0.0.1:5000/page/1,server.py控制台将输出如下内容:


如果访问的是http://127.0.0.1:5000/page/loen,我们会得到404响应。

有3个默认的转换器:

int    接受整数

float    同 int ,但是接受浮点数

path    和默认的相似,但也接受斜线


编写转换器

自定义的转换器是一个继承werkzeug.routing.BaseConverter的类,修改to_python和to_url方法即可。

to_python方法用于将url中的变量转换后供被@app.route包装的函数使用,to_url方法用于flask.url_for中的参数转换。

下面是一个示例,将server.py修改如下:

from flask import Flask, url_for

from werkzeug.routing import BaseConverter

class MyIntConverter(BaseConverter):

    def __init__(self, url_map):

        super(MyIntConverter, self).__init__(url_map)

    def to_python(self, value):

        return int(value)

    def to_url(self, value):

        return value * 2

app = Flask(__name__)

app.url_map.converters['my_int'] = MyIntConverter

@app.route('/page/<my_int:num>')

def page(num):

    print(num)

    print(url_for('page', num='145'))  # page 对应的是 page函数 ,num 对应对应`/page/<my_int:num>`中的num,必须是str

    return 'hello world'

if __name__ == '__main__':

    app.run(port=5000, debug=True)

浏览器访问http://127.0.0.1:5000/page/28后,server.py的输出信息是:

28

/page/145145

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容