国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

maxmin / 403人閱讀

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

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

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

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

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

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

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

匹配動(dòng)態(tài)URL

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

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

Hello World!

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

Hello, %s

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

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

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

Hello World!

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

運(yùn)行結(jié)果如下:

hello.py: 包含動(dòng)態(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) # 定義了動(dòng)態(tài)路由/user/

運(yùn)行結(jié)果如下:

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

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

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 程序上下文 當(dāng)前激活程序的程序?qū)嵗?/td>
g 程序上下文 處理請(qǐng)求時(shí)用作臨時(shí)存儲(chǔ)的對(duì)象。每次請(qǐng)求都會(huì)重設(shè)這個(gè)變量。
request 請(qǐng)求上下文 請(qǐng)求對(duì)象,封裝了客戶端發(fā)出的HTTP請(qǐng)求中的內(nèi)容。
session 請(qǐng)求上下文 用戶會(huì)話,用戶存儲(chǔ)請(qǐng)求之間需要“記住”的值的詞典

程序上下文使用方法:

>>> 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()可獲得一個(gè)程序上下文
請(qǐng)求調(diào)度

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

請(qǐng)求鉤子

Flask支持以下4種鉤子:

before_first_request:注冊(cè)一個(gè)函數(shù),在處理第一個(gè)請(qǐng)求之前運(yùn)行。

before_request:注冊(cè)一個(gè)函數(shù),在每次請(qǐng)求之前運(yùn)行。

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

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

響應(yīng) 創(chuàng)建響應(yīng)對(duì)象并設(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")
錯(cuò)誤處理
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擴(kuò)展

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

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

hello.py:使用Flask-Script

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

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


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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/38079.html

相關(guān)文章

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

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

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

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

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

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

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

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

    chemzqm 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<