Flask的路由解讀以及其配置


from flask import Flask

app =Flask(__name__)

一.配置

配置一共有四中方式

方法一:

只能設置以下兩種屬性

app.debug=True

app.secret_key="asdas"

方法二

app.config["DEBUG"]=True

方法三

app.config.from_pyfile("配置文件路徑")

配置文件

DEBUG=True

方法四(推薦使用)

app.config.from_pyfile("類所在路徑.類名")

配置文件

class 類名:
   DEBUG=True 

推薦使用原因:因為測試和上線時候DEBUG屬性再測試時候一般為true上線為false所有可以把其他公用的內容放一個基類中,下面測試和上線都繼承基類,用的時候切換類名即可

Flask的默認配置屬性

        'DEBUG':       get_debug_flag(default=False),  是否開啟Debug模式
        'TESTING':       False,                          是否開啟測試模式
        'PROPAGATE_EXCEPTIONS':                 None,                          
        'PRESERVE_CONTEXT_ON_EXCEPTION':        None,
        'SECRET_KEY':                           None,
        'PERMANENT_SESSION_LIFETIME':           timedelta(days=31),
        'USE_X_SENDFILE':                       False,
        'LOGGER_NAME':                          None,
        'LOGGER_HANDLER_POLICY':               'always',
        'SERVER_NAME':                          None,
        'APPLICATION_ROOT':                     None,
        'SESSION_COOKIE_NAME':                  'session',
        'SESSION_COOKIE_DOMAIN':                None,
        'SESSION_COOKIE_PATH':                  None,
        'SESSION_COOKIE_HTTPONLY':              True,
        'SESSION_COOKIE_SECURE':                False,
        'SESSION_REFRESH_EACH_REQUEST':         True,
        'MAX_CONTENT_LENGTH':                   None,
        'SEND_FILE_MAX_AGE_DEFAULT':            timedelta(hours=12),
        'TRAP_BAD_REQUEST_ERRORS':              False,
        'TRAP_HTTP_EXCEPTIONS':                 False,
        'EXPLAIN_TEMPLATE_LOADING':             False,
        'PREFERRED_URL_SCHEME':                 'http',
        'JSON_AS_ASCII':                        True,
        'JSON_SORT_KEYS':                       True,
        'JSONIFY_PRETTYPRINT_REGULAR':          True,
        'JSONIFY_MIMETYPE':                     'application/json',
        'TEMPLATES_AUTO_RELOAD':                None,
配置項名稱 說明
DEBUG 啟用/禁用調試模式
TESTING 啟用/禁用測試模式
PROPAGATE_EXCEPTIONS 顯式地允許或禁用異常的傳播。如果沒有設置或顯式地設置為 None ,當 TESTING 或 DEBUG 為真時,這個值隱式地為 true.
PRESERVE_CONTEXT_ON_EXCEPTION 默認情況下,如果應用工作在調試模式,請求上下文不會在異常時出棧來允許調試器內省。 這可以通過這個鍵來禁用。你同樣可以用這個設定來強制啟用它,即使沒有調試執行,這對調試生產應用很有用(但風險也很大)
SECRET_KEY 密鑰
SESSION_COOKIE_NAME 會話 cookie 的名稱。
SESSION_COOKIE_DOMAIN 會話 cookie 的域。如果不設置這個值,則 cookie 對 SERVER_NAME 的全部子域名有效
SESSION_COOKIE_PATH 會話 cookie 的路徑。如果不設置這個值,且沒有給 '/' 設置過,則 cookie 對 APPLICATION_ROOT 下的所有路徑有效。
SESSION_COOKIE_HTTPONLY 控制 cookie 是否應被設置 httponly 的標志, 默認為 True
SESSION_COOKIE_SECURE 控制 cookie 是否應被設置安全標志,默認為 False
PERMANENT_SESSION_LIFETIME datetime.timedelta對象控制長期會話的生存時間。從 Flask 0.8 開始,也可以用整數來表示秒。
SESSION_REFRESH_EACH_REQUEST 這個標志控制永久會話如何刷新。如果被設置為 True (這是默認值),每一個請求 cookie 都會被刷新。如果設置為 False ,只有當 cookie 被修改后才會發送一個 set-cookie 的標頭。非永久會話不會受到這個配置項的影響 。
USE_X_SENDFILE 啟用/禁用 x-sendfile
LOGGER_NAME 日志記錄器的名稱
SERVER_NAME 服務器名和端口。需要這個選項來支持子域名 (例如: 'myapp.dev:5000' )。注意 localhost 不支持子域名,所以把這個選項設置為 “localhost” 沒有意義。設置 SERVER_NAME 默認會允許在沒有請求上下文而僅有應用上下文時生成 URL
APPLICATION_ROOT 如果應用不占用完整的域名或子域名,這個選項可以被設置為應用所在的路徑。這個路徑也會用於會話 cookie 的路徑值。如果直接使用域名,則留作 None
MAX_CONTENT_LENGTH 如果設置為字節數, Flask 會拒絕內容長度大於此值的請求進入,並返回一個 413 狀態碼
SEND_FILE_MAX_AGE_DEFAULT 默認緩存控制的最大期限,以秒計,在flask.Flask.send_static_file()(默認的靜態文件處理器)中使用。對於單個文件分別在 Flask或Blueprint上使用get_send_file_max_age()來覆蓋這個值。默認為 43200(12小時)。
TRAP_HTTP_EXCEPTIONS 如果這個值被設置為 True ,Flask不會執行 HTTP 異常的錯誤處理,而是像對待其它異常一樣, 通過異常棧讓它冒泡地拋出。這對於需要找出 HTTP 異常源頭的可怕調試情形是有用的。
TRAP_BAD_REQUEST_ERRORS Werkzeug 處理請求中的特定數據的內部數據結構會拋出同樣也是“錯誤的請求”異常的特殊的 key errors 。同樣地,為了保持一致,許多操作可以顯式地拋出 BadRequest 異常。因為在調試中,你希望准確地找出異常的原因,這個設置用於在這些情形下調試。如果這個值被設置為 True ,你只會得到常規的回溯。
PREFERRED_URL_SCHEME 生成URL的時候如果沒有可用的 URL 模式話將使用這個值。默認為 http
JSON_AS_ASCII 默認情況下 Flask 使用 ascii 編碼來序列化對象。如果這個值被設置為 False , Flask不會將其編碼為 ASCII,並且按原樣輸出,返回它的 unicode 字符串。比如 jsonfiy 會自動地采用 utf-8 來編碼它然后才進行傳輸。
JSON_SORT_KEYS 默認情況下 Flask 按照 JSON 對象的鍵的順序來序來序列化它。這樣做是為了確保鍵的順序不會受到字典的哈希種子的影響,從而返回的值每次都是一致的,不會造成無用的額外 HTTP 緩存。你可以通過修改這個配置的值來覆蓋默認的操作。但這是不被推薦的做法因為這個默認的行為可能會給你在性能的代價上帶來改善。
JSONIFY_PRETTYPRINT_REGULAR 如果這個配置項被 True (默認值), 如果不是 XMLHttpRequest 請求的話(由 X-Requested-With 標頭控制) json 字符串的返回值會被漂亮地打印出來。

Flask-SQLAlchemy配置項整理

配置項名稱 說明
SQLALCHEMY_DATABASE_URI 用於連接數據的數據庫。例如: sqlite:////tmp/test.db mysql://username:password@server/db
SQLALCHEMY_BINDS 一個映射綁定 (bind) 鍵到 SQLAlchemy 連接 URIs 的字典。 更多的信息請參閱 綁定多個數據庫
SQLALCHEMY_ECHO 如果設置成 True,SQLAlchemy 將會記錄所有 發到標准輸出(stderr)的語句,這對調試很有幫助。
SQLALCHEMY_RECORD_QUERIES 可以用於顯式地禁用或者啟用查詢記錄。查詢記錄在調試或者測試模式下自動啟用。更多信息請參閱 get_debug_queries()
SQLALCHEMY_NATIVE_UNICODE 可以用於顯式地禁用支持原生的 unicode。這是 某些數據庫適配器必須的(像在 Ubuntu 某些版本上的 PostgreSQL),當使用不合適的指定無編碼的數據庫默認值時。
SQLALCHEMY_POOL_SIZE 數據庫連接池的大小。默認是數據庫引擎的默認值 (通常是 5)。
SQLALCHEMY_POOL_TIMEOUT 指定數據庫連接池的超時時間。默認是 10。
SQLALCHEMY_POOL_RECYCLE 自動回收連接的秒數。這對 MySQL 是必須的,默認 情況下 MySQL 會自動移除閑置 8 小時或者以上的連接。 需要注意地是如果使用 MySQL 的話, Flask-SQLAlchemy 會自動地設置這個值為 2 小時。
SQLALCHEMY_MAX_OVERFLOW 控制在連接池達到最大值后可以創建的連接數。當這些額外的連接回收到連接池后將會被斷開和拋棄。
SQLALCHEMY_TRACK_MODIFICATIONS 如果設置成 True (默認情況),Flask-SQLAlchemy 將會追蹤對象的修改並且發送信號。這需要額外的內存, 如果不必要的可以禁用它。

二.路由

路由參數

rule--->路由
endpoint--->反向解析的別名
view_func---->當前的視圖函數
methods ---->允許請求的方式["get","post"],如果不傳默認允許的是get請求

進入源碼他設置路由本質調用

def decorator(f):
    endpoint = options.pop("endpoint", None)
    self.add_url_rule(rule, endpoint, f, **options) #這里的self是我們之前定義的app
    return f

所有我們設置路由器本質

# @app.route('/')
#相當於
def hello():
    return'xxx'
app.add_url_rule('/',view_func=hello)

關於反向解析

url_for(別名)

舉例

from flask import Flask, redirect, url_for

app = Flask(__name__)

@app.route('/login')
def login():
    return redirect(url_for('aaa'))

@app.route('/',endpoint='aaa')
def hello():
    return'xxx'

if __name__ == '__main__':
    app.run()

個人感覺非常非常雞肋!!!!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM