韩漫免费漫画在线观看方法,《好好疼爱里面》免费看,年轻漂亮的女士护士内衣,妈妈醉酒后把我当爸爸电视剧

文章 > Flask > flask怎么设置路由

flask怎么设置路由

头像

silencement

2019-07-27 14:55:045419浏览 · 0收藏 · 0评论

通常有以下几种定义路由函数的方法:

1.使用flask.Flask.route() 修饰器。

2.使用flask.Flask.add_url_rule()函数。

3.直接访问基于werkzeug路由系统的flask.Flask.url_map.

一 、让我们从最常用的@app.route()修饰器开始。

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

可以看到修饰器是对add_url_rule函数的包装,当我们写如下代码时:

@app.route('/index.html')
def index():
    return "Hello World!"

实际上上面的代码转换成:

def index():
    return "Hello World!"
index = app.route('/index.html')(index)

也就是,rule = '/index.html', options = { }, 执行decorator(index) 时会执行self.add_url_rule(rule, endpoint, f, **options)

二、下面回过头,来看看当Flask运行时,一个Request来了,会发生什么,仍然从Flask.wsgi_app开始阅读。
已经知道,当一个Request到来时,会首先push RequestContext和AppContext,在RequestContext中的init函数中有:

...self.url_adapter = app.create_url_adapter(self.request)
...self.match_request()
def create_url_adapter(self, request):        if request is not None:
            return self.url_map.bind_to_environ(request.environ,
                server_name=self.config['SERVER_NAME'])
        ...

首先将Flask.url_map与当前到来的Request中environ进行绑定,获得一个url_adapter。

def match_request(self):
        try:
            url_rule, self.request.view_args = \
                self.url_adapter.match(return_rule=True)
            self.request.url_rule = url_rule
        except HTTPException as e:
            self.request.routing_exception = e

获得url_adaptor之后,调用match_request,url_adapter.match()会返回一个元组view_args就是url_rule中的参数,比如Rule(/<int:year>/, endpoint='blog/archive')这个Rule,而请求是/2016/,那么view_args={year: 2016}. url_rule和view_args被储存在Request中。在Request类中,我们可以直接Request.endpoint将返回url_rule.endpoint.

在url_rule和view_args被装载到Request中后,我们继续对wsgi_app中的response = self.full_dispatch_request()这个过程与路由相关的内容进行分析。

 def full_dispatch_request(self):        self.try_trigger_before_first_request_functions()        try:
            request_started.send(self)
            rv = self.preprocess_request()            if rv is None:
                rv = self.dispatch_request()
         ...

dispatch_request()处理完毕,将返回值储存在rv变量中。通常,视图函数会return render_template(...). 返回值接下来经过一系列处理,发送到客户端。

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

妈妈叫我戴上避孕套是什么歌 | 打扑克的全程视频| 韩剧《小叔子》免费观看| 《破外女》高清完整版| 《交换温柔》免费观看全集完整版| 《公与媳夫妇:交换》| 人马杂配MV的视频在哪里看| 亚洲AV日韩AV综合在线观看 | 露胸透明睡衣| 小雪被老汉各种姿势玩弄视频 | 《从上司到妻子》动画结局| 三更2饺子截取一小段| 暴躁少女零九CSGO| 成全视频高清免费观看捉妖记动漫 | 《性88分钟》| 国产免费观看高清电视剧| 网袜| 无人区6高清免费追剧软件介绍| 一边啃奶头一边躁狂会怎么样 | 《艳乳欲乱2》免费观看| 《情欲按摩院》未删减版| 人与动物免费观看电视剧完整版| 《不戴套瑜伽教练3》| 主人~我错了请把它关掉歌词| 孤男寡女干柴烈火的下一句是什么 | 1.公与媳就做一次| 日本免费SAAS CRM| 自慰视频| 麻花传沈娜娜MV免费观看| 姐姐的闺蜜2字ID高冷霸气| 傲娇| 公厕BY金银花露TXT笔趣阁| EXO妈妈MV高清免费观看| 林喜宝爸爸叫李叔叔到家是哪一集| 电影《法国空姐2》| 电影《满足2》完整版在线观看| 《警花交换做爰》| 十九岁暴躁少女CSGO免费观看| 被学长抱进小树林C个爽| 中文AV人妻AV无码中文下载| 亚洲AV少妇高潮嗷嗷叫