Flask总结(二):URL映射

来源:互联网 发布:好玩的页游 知乎 编辑:程序博客网 时间:2024/06/05 08:54

Flask用装饰器实现URL映射。


先来看一个例子:

from flask import Flaskapp = Flask(__name__)@app.route('/')def hello_world():  return 'Welcome to Flask ^_^'@app.route('/test/<int:id>')def test(id):  return 'The id is %d'%idif __name__ == "__main__":  app.run(debug=True,port=5000)

运行,然后在浏览器中访问http://localhost:5000/,浏览器中会显示"Welcome to Flask ^_^"。这是一个简单的URL映射,即把固定的URL映射到固定的函数。此处是把"/"映射到hello_world这个函数。

更高级自由的URL映射形式体现在test这个函数中,在浏览器中访问http://localhost:5000/test/123456,浏览器中会显示"The id is 123456"。这是把URL的某一个位置,映射成str或int转换器,在这个例子中的表现是"<int:id>"这部分,它可以识别该位置的任何int形式并作为test函数的输入参数。"<int:id>"第一部分表示转换器,第二部分表示参数名称,必须跟对应函数的参数相同。值得一提的是,对str转换器来说,可以省略参数说明。


用过Spring框架的可能会想到URL映射是否会支持正则表达式,很遗憾就目前的资料来看,Flask暂不支持正则表达式。虽然我们可以实现这个支持,但是尽量不要用到这种形式,这是一种不好的设计方式。

实现正则表达式的方式如下:

from flask import Flaskfrom werkzeug.routing import BaseConverterapp = Flask(__name__)class RegexConverter(BaseConverter):    def __init__(self, url_map, *items):        super(RegexConverter, self).__init__(url_map)        self.regex = items[0]app.url_map.converters['regex'] = RegexConverter@app.route('/<regex("[^@]+@[^\.]+\.\w+"):email>/')def example(email):    return "email: %s" % emailif __name__ == '__main__':    app.run(debug=True, port=5000)
参考:http://stackoverflow.com/questions/5870188/does-flask-support-regular-expressions-in-its-url-routing


另外,Flask除了支持URL参数映射,还支持方法映射,可以在route参数列表中添加methods字段,methods字段是一个列表,如果进行声明那么仅仅支持列表中列出的方法,默认只支持"GET"方法。


说到URL映射,必然还要提到restful服务(如果不了解的话参考这个链接:点击打开链接),Flask有个restful框架——flask_restful库,实现了restful服务。

讲解这个库,同样从一个例子开始:

from flask import Flaskfrom flask_restful import Resource,Apiapp = Flask(__name__)api = Api(app)class HelloWorld(Resource):  def get(self,name):    return {'hello':name}api.add_resource(HelloWorld,'/<string:name>')if __name__ == "__main__":  app.run(debug=True,port=5000)

首先用Api()方法实例化一个api,然后通过添加资源的形式把类和URL关联起来。在相关联的类中可以定义GET/POST/DELETE/OPTIONS/PUT等方法。


事实上,Flask的app映射和flask_restful库的映射还有其他的一些参数。但是如果要做小项目开发的话,了解这些基本已经足够了。更多的就需要靠自己查参考文档了。

我也将会在之后添加一些值得提及的技术点。

0 0
原创粉丝点击