最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • flask怎么设置路由

    正文概述    2020-01-03   319

    flask怎么设置路由

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

    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(...). 返回值接下来经过一系列处理,发送到客户端。


    起源地下载网 » flask怎么设置路由

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元