Flask之基礎 g物件和訊號

2021-10-18 10:53:25 字數 4692 閱讀 9521

flask是python一款小二精的輕量級web框架,預設依賴於jinja2模版引擎和wsgi工具集--werkzeug。雖然flask只保留了web開發的核心功能,沒有django的功能全,但是,它可以用第三方外掛程式進行功能擴充套件,比如資料庫可以使用flask-sqlalchemy,快取可以使用flask-cache等

特點:靈活性可拓展性強,對各種資料庫的契合度都較高,小專案開發快,大專案設計靈活

werkzeug:定位是http和wsgi相關工具集,可以作為web框架的底層庫,提供了路由處理、request和response封裝、自帶的wsgi server等功能,它在flask中負責核心的邏輯模組像路由、請求和應答的封裝、以及wsgi相關的函式等

jinja是python的乙個模版引擎,類似django的dtl,功能也很豐富,支援 unicode 解析、自動 html escape 、防止 xss 攻擊、繼承、變數、過濾器、流程邏輯支援、python **邏輯整合等等

(1)目錄結構

"""

├── flask01

├── static/ # 用來存放靜態檔案

├── templates/ # 用來存放html模板檔案

"""

from flask import flask,request

def index():

# 當前請求位址,當前請求攜帶過來的資料

print(request.path)

return 'hello world'

def hello():

print(request.path)

return 'hello hellohello'

if __name__ == '__main__':

(1)debug模式預設是關閉的,開啟debug模式後,每次修改完**,只需要儲存一下,就會自動重啟flask專案,不需要手動去重啟。

(2)debug開啟的四種方式

from flask import flask

def hello():

return "hello"

if __name__ == '__main__':

# 第二種

from flask import flask

#第三種,利用config的本質是字典

from flask import flask

#可以用以下兩個其中乙個

# 第四種,載入配置檔案

from flask import flask

import config # 匯入

# --------- settings.py 內容---------

debug = true

# get 請求

request.query_string

# post 請求

user = request.form.get('user')

pwd = request.form

(2)通過py檔案配置

(3)通過類配置

# ---------settings.py檔案下的類------------

class config(object):

debug = false

testing = false

database_uri = 'sqlite://:memory:'

class testingconfig(config):

testing = true

# route(路徑(轉換器),請求方法,別名)

'''endpoint:類似django的方向解析,不寫預設是函式名,endpoint之間不能重名

跟django的轉換器一樣

# ----------- 轉換器 ------------

default : unicodeconverter (預設使用)

string : unicodeconverter

any : anyconverter

path : pathconverter

int : integerconverter

float : floatconverter

uuid : uuidconverter

'''

from flask import flask,request,render_template,redirect

from flask import views

#裝飾器

def auth(func):

def inner(*args, **kwargs):

print('before')

result = func(*args, **kwargs)

print('after')

return result

return inner

class indexview(views.methodview):

methods = ['get'] # 指定執行的請求方法

# 登入認證裝飾器可以加在這裡

decorators = [auth, ] #加多個就是從上往下的效果

def get(self):

print('***xx')

return "我是get請求"

def post(self):

return '我是post請求'

# 路由註冊:注意:as_view方法必須傳引數name,name相當於endpoint

if __name__ == '__main__':

本質:g物件是乙個全域性變數,用來儲存當前請求的使用者資訊,重新發起請求後,g物件也會跟著改變

使用方法:

from flask import flask,g

def test():

# 給g物件賦值

g.name='測試'

'''當我們需要在request請求中存東西的時候,盡量用g物件代替,避免出現錯誤

'''def home():

return g.name

if __name__=='__main__':

flask框架的訊號是基於blinker,主要是為了方便開發者在flask 請求過程中定製一些功能**

注意,需要安裝blinker庫:pip install blinker

request_started = _signals.signal('request-started')                # 請求到來前執行

request_finished = _signals.signal('request-finished') # 請求結束後執行

before_render_template = _signals.signal('before-render-template') # 模板渲染前執行

template_rendered = _signals.signal('template-rendered') # 模板渲染後執行

got_request_exception = _signals.signal('got-request-exception') # 請求執行出現異常時執行

request_tearing_down = _signals.signal('request-tearing-down') # 請求執行完畢後自動執行(無論成功與否)

message_flashed = _signals.signal('message-flashed') # 呼叫flask在其中新增資料時,自動觸發

from flask import flask,g,signals

def home():

return '訊號量的使用'

def func(*args,**kwargs):

print('觸發訊號',args,kwargs)

# 將函式註冊到flask的內建訊號request_started中

# 當發起請求的時候,就會觸發該訊號,進而執行該函式

signals.request_started.connect(func)

if __name__=='__main__':

# -*-coding:utf-8 -*-

from flask import flask,signals

#1、 定義乙個訊號

my_signal=signals._signals.signal('my_signal')

def func(*args,**kwargs):

print('觸發自定義訊號',args,kwargs)

# 2、將func函式跟自定義訊號進行繫結

my_signal.connect(func)

def index():

#3、 觸發訊號

my_signal.send(123,k='訊號')

return '觸發自定義訊號'

if __name__=='__main__':

Flask 第十七話之訊號

一 安裝 預設跟隨flask一起安裝 pip install blinker 二 自定義訊號 第一步 定義訊號 from blinker import namespace ns namespace fire signal ns.signal fire 第二步 監聽訊號 def fire func s...

Python Web 之Flask基礎(一)

flask 的基本使用 flask 1.0 文件 依賴 當安裝 flask 時,以下配套軟體會被自動安裝。可選依賴 以下配套軟體不會被自動安裝。如果安裝了,那麼 flask 會檢測到這些軟體。建立乙個專案資料夾,然後建立乙個虛擬環境。mkdir myproject cd myproject pyth...

六十九 flask上下文之執行緒隔離的g物件的使用

儲存全域性物件的g物件 g物件是在整個flask應用執行期間都是可以使用的,並且也是和request一樣,是執行緒隔離的,這個物件是專門用來存放開發者自己定義的一些資料,方便在整個flask程式中都可以使用,一般使用就是將一些經常會用到的資料繫結到上面,以後就直接從g上面取就可以了,而不需要通過傳參...