91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

flask設置路由的方法是什么

發布時間:2020-09-01 16:23:09 來源:億速云 閱讀:329 作者:小新 欄目:編程語言

小編給大家分享一下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設置路由的方法是什么有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

富蕴县| 平昌县| 嘉善县| 博白县| 吉隆县| 梨树县| 韶山市| 江油市| 平顶山市| 博爱县| 昌平区| 长白| 防城港市| 乌兰察布市| 江津市| 海林市| 唐山市| 天峨县| 册亨县| 栾城县| 余姚市| 新兴县| 镇原县| 南京市| 嫩江县| 黑河市| 七台河市| 隆化县| 固安县| 江华| 吉隆县| 石河子市| 中山市| 崇仁县| 西丰县| 孟村| 康定县| 南京市| 余庆县| 孟津县| 台南市|