亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

[貳]Flask web開發(fā):程序的基本結(jié)構(gòu)

maxmin / 448人閱讀

摘要:本篇對應(yīng)書本第二章程序的基本結(jié)構(gòu)。初始化導入模塊創(chuàng)建類的實例注對于開發(fā)者來說,傳給應(yīng)用程序構(gòu)造函數(shù)的參數(shù)是比較容易弄混淆的。不同的請求方法發(fā)送到相同的上時,會使用不同的視圖函數(shù)進行處理。

本系列筆記是我閱讀Miguel Grinberg的《Flask Web Development》的筆記,標題與書本同步。希望通過記錄技術(shù)筆記的方式促進自己對知識的理解。

本篇對應(yīng)書本第二章:程序的基本結(jié)構(gòu)。

初始化
from flask import Flask #導入Flask模塊
app = Flask(__name__) #創(chuàng)建Flask類的實例

注:對于Flask開發(fā)者來說,傳給Flask應(yīng)用程序構(gòu)造函數(shù)的name參數(shù)是比較容易弄混淆的。Flask使用這個參數(shù)來確定應(yīng)用程序的根目錄,這樣以后可以相對這個路徑來找到資源文件。

路由和視圖函數(shù) 注冊新的路由

在Flask應(yīng)用中,路由是指用戶請求的URL與視圖函數(shù)之間的映射。
Flask框架 根據(jù)HTTP請求的URL在路由表中匹配預定義的URL規(guī)則,找到對應(yīng)的視圖函數(shù), 并將視圖函數(shù)的執(zhí)行結(jié)果返回WSGI服務(wù)器。

匹配動態(tài)URL

route裝飾器 :可以使用Flask應(yīng)用實例的route裝飾器將一個URL規(guī)則綁定到一個視圖函數(shù)上。
下面程序中route裝飾器將根目錄綁定在index視圖上。

@app.route("/")
def index():
    return "

Hello World!

"
URL變量類型過濾
@app.route("/user/")
def user(name):
    return "

Hello, %s

" % name 類似: int 接受整數(shù)(float接受浮點數(shù)) @app.route("/post/") path轉(zhuǎn)換器允許規(guī)則匹配包含/的字符串。 @app.route("/file/")
啟動服務(wù)器
if __name__ == "__main__":
    app.run(debug=True)
    
# 模塊是對象,并且所有的模塊都有一個內(nèi)置屬性 __name__。
# 一個模塊的 __name__ 的值取決于您如何應(yīng)用模塊。
# 如果 import 一個模塊,那么模塊__name__ 的值通常為模塊文件名,不帶路徑或者文件擴展名。
# 但是您也可以像一個標準的程序樣直接運行模塊,
# 在這種情況下, __name__ 的值將是一個特別缺省"__main__"。

# debug=True 調(diào)試模式開啟
一個完整的程序 hello.py: 一個完整的Flask程序
from flask import Flask
app = Flask(__name__)

@app.route("/")
def index():
    return "

Hello World!

" if __name__ == "__main__" app.run(debug=True)

運行結(jié)果如下:

hello.py: 包含動態(tài)路由的Flask程序
from flask import Flask
app = Flask(__name__)

@app.route("/")
def index():
    return "

Hello World!

" @app.route("/user/") def user(name): return "

Hello,%s

" % name if __name__ == "__main__" app.run(debug=True) # 定義了動態(tài)路由/user/

運行結(jié)果如下:

請求-響應(yīng)循環(huán) 程序和請求上下文

請求對象封裝了客戶端發(fā)送的HTTP請求。
將請求對象作為參數(shù)傳入視圖函數(shù),視圖函數(shù)即可訪問請求對象。

from flask import request

@app.route("/")
def index():
    user_agent = request.headers.get("User-Agent")
    return "

Your browser is %s

" % user_agent

Flask上下文全局變量

變量名 上下文 說明
current_app 程序上下文 當前激活程序的程序?qū)嵗?/td>
g 程序上下文 處理請求時用作臨時存儲的對象。每次請求都會重設(shè)這個變量。
request 請求上下文 請求對象,封裝了客戶端發(fā)出的HTTP請求中的內(nèi)容。
session 請求上下文 用戶會話,用戶存儲請求之間需要“記住”的值的詞典

程序上下文使用方法:

>>> from hello import app
>>> from flask import current_app
>>> current_app.name
Traceback(most recent call last):
...
RuntimeError:working outside of application context
>>> app_ctx = app.app_context()
>>> app_ctx.push()
>>> current_app.name
"hello"
>>> app_ctx.pop()
# app.app_context()可獲得一個程序上下文
請求調(diào)度

URL映射中的HEAD、Options、GET是請求方法,由路由進行處理。
不同的請求方法發(fā)送到相同的URL上時,會使用不同的視圖函數(shù)進行處理。

請求鉤子

Flask支持以下4種鉤子:

before_first_request:注冊一個函數(shù),在處理第一個請求之前運行。

before_request:注冊一個函數(shù),在每次請求之前運行。

after_request:注冊一個函數(shù),如果沒有未處理的異常拋出,也在每次請求之后運行。

teardown_request:注冊一個函數(shù),即使有未處理的異常拋出,也在每次請求之后運行。

響應(yīng) 創(chuàng)建響應(yīng)對象并設(shè)置Cookie

from flask import make_response

@app.route("/"):
def index():
    response = make_response(

This document carries a cookie.

) response.set_cookie("answer","42") return response
重定向
from flask import redirect

@app.route("/")
def index():
    return redirect("http://www.example.com")
錯誤處理
from flask import abort

@app.route("/user/")
def get_user(id):
    user = load_user(id)
    if not user:
        abort(404)
    return "

Hello, %s

" % user.name
Flask擴展

Flask被設(shè)計為可擴展模式,一些重要功能是用安裝包的形式增加。

使用Flask-Script支持命令行選項
(venv)$pip install flask-script

hello.py:使用Flask-Script

from flask_script import Manager
manager = Manager(app)
# ...
if __name__ == "__main__":
    manager.run()

運行Python程序: python hello.py runserver
web服務(wù)器可使用http://a.b.c.d:5000/ 網(wǎng)絡(luò)中的任一臺電腦進行訪問,其中"a.b.c.d"是服務(wù)器所在計算機的外網(wǎng)的IP地址。
Python hello.py runserver --host 0.0.0.0


本文由?EverFighting?創(chuàng)作,采用?知識共享署名 3.0 中國大陸許可協(xié)議?進行許可。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/38079.html

相關(guān)文章

  • Flask Web Development —— 基本應(yīng)用程序結(jié)構(gòu)(上)

    摘要:注對于開發(fā)者來說,傳給應(yīng)用程序構(gòu)造函數(shù)的參數(shù)是比較容易弄混淆的。在應(yīng)程序中定義路由的最便捷的方式是通過顯示定義在應(yīng)用程序?qū)嵗系难b飾器,注冊被裝飾的函數(shù)來作為一個路由。一個常見的模式是使用裝飾器來注冊函數(shù)作為一個事件處理程序。 在這一章,你將學習Flask應(yīng)用程序不同部分。同時你將編寫和運行你的第一個Flask web應(yīng)用程序。 1、初始化 在這章,你將學到Flask應(yīng)用程序的不...

    NusterCache 評論0 收藏0
  • Flask Web Development —— 基本應(yīng)用程序結(jié)構(gòu)(下)

    摘要:有兩類應(yīng)用級和請求級。一個響應(yīng)中非常重要的部分是狀態(tài)碼,默認設(shè)置來指示請求已經(jīng)成功處理。重定向通常由響應(yīng)狀態(tài)碼注明并且重定向的由頭部的給出。因為這些變化,應(yīng)用程序獲得一組基本的命令行選項。運行顯示可用信息在應(yīng)用程序上下文的內(nèi)部運行一個。 5、請求-響應(yīng)循環(huán) 現(xiàn)在你已經(jīng)玩過一個基本的Flask應(yīng)用程序,你也許想要知道更多關(guān)于Flask如何施展魔力。下面章節(jié)描述了一些框架設(shè)計方面的特點。...

    caohaoyu 評論0 收藏0
  • Flask框架基礎(chǔ)(二)

    摘要:處理和函數(shù)之間關(guān)系的程序稱為路由。模板引擎是由實現(xiàn)的是內(nèi)置的模板語言參照設(shè)計思想設(shè)計的,跟差不多渲染模板默認情況下,在程序文件夾中的子文件夾中尋找模板。如果需要可在文件夾中使用子文件夾存放文件。 1 程序的基本結(jié)構(gòu) 1.1初始化 所有Flask 程序都必須創(chuàng)建一個程序?qū)嵗?。Web 服務(wù)器使用一種名為Web 服務(wù)器網(wǎng)關(guān)接口(Web Server Gateway Interface,WSG...

    lpjustdoit 評論0 收藏0
  • Flask Web Development —— 大型應(yīng)用程序結(jié)構(gòu)(上)

    摘要:被定義在包的構(gòu)造函數(shù)中的應(yīng)用程序工廠函數(shù)會在示例中展示。這個構(gòu)造函數(shù)導入大部分當前需要使用的擴展,但因為沒有應(yīng)用程序?qū)嵗跏蓟鼈?,它可以被?chuàng)建但不初始化通過不傳遞參數(shù)給它們的構(gòu)造函數(shù)。而應(yīng)用程序范圍內(nèi)的錯誤處理則必須使用。 雖然小型web應(yīng)用程序用單個腳本可以很方便,但這種方法卻不能很好地擴展。隨著應(yīng)用變得復雜,在單個大的源文件中處理會變得問題重重。 與大多數(shù)其他web框架不同,F(xiàn)l...

    chemzqm 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<