1. 程式人生 > >python flask框架

python flask框架

字典 sqlite temp 使用 base 由於 mic tro ...

Flask是一個基於Python開發並且依賴jinja2模板和Werkzeug WSGI服務的一個微型框架,對於Werkzeug本質是Socket服務端,其用於接收http請求並對請求進行預處理,然後觸發Flask框架,開發人員基於Flask框架提供的功能對請求進行相應的處理,並返回給用戶,如果要返回給用戶復雜的內容時,需要借助jinja2模板來實現對模板的處理,即:將模板和數據進行渲染,將渲染後的字符串返回給用戶瀏覽器。

“微”(micro) 並不表示你需要把整個 Web 應用塞進單個 Python 文件(雖然確實可以 ),也不意味著 Flask 在功能上有所欠缺。微框架中的“微”意味著 Flask 旨在保持核心簡單而易於擴展。Flask 不會替你做出太多決策——比如使用何種數據庫。而那些 Flask 所選擇的——比如使用何種模板引擎——則很容易替換。除此之外的一切都由可由你掌握。如此,Flask 可以與您珠聯璧合。

默認情況下,Flask 不包含數據庫抽象層、表單驗證,或是其它任何已有多種庫可以勝任的功能。然而,Flask 支持用擴展來給應用添加這些功能,如同是 Flask 本身實現的一樣。眾多的擴展提供了數據庫集成、表單驗證、上傳處理、各種各樣的開放認證技術等功能。Flask 也許是“微小”的,但它已準備好在需求繁雜的生產環境中投入使用。

一. 基本使用

from flask import Flask
app = Flask(__name__)
 
@app.route(/)
def hello_world():
    return Hello World!
 
if __name__ == 
__main__: app.run()

二、配置文件

flask中的配置文件是一個flask.config.Config對象(繼承字典),默認配置為:
    {
        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, } 方式一: app.config[DEBUG] = True PS: 由於Config對象本質上是字典,所以還可以使用app.config.update(...) 方式二: app.config.from_pyfile("python文件名稱") 如: settings.py DEBUG = True app.config.from_pyfile("settings.py") app.config.from_envvar("環境變量名稱") 環境變量的值為python文件名稱名稱,內部調用from_pyfile方法 app.config.from_json("json文件名稱") JSON文件名稱,必須是json格式,因為內部會執行json.loads app.config.from_mapping({DEBUG:True}) 字典格式 app.config.from_object("python類或類的路徑") app.config.from_object(pro_flask.settings.TestingConfig) settings.py class Config(object): DEBUG = False TESTING = False DATABASE_URI = sqlite://:memory: class ProductionConfig(Config): DATABASE_URI = mysql://user@localhost/foo class DevelopmentConfig(Config): DEBUG = True class TestingConfig(Config): TESTING = True PS: 從sys.path中已經存在路徑開始寫 PS: settings.py文件默認路徑要放在程序root_path目錄,如果instance_relative_config為True,則就是instance_path目錄

三、路由系統

  • @app.route(‘/user/<username>‘)
  • @app.route(‘/post/<int:post_id>‘)
  • @app.route(‘/post/<float:post_id>‘)
  • @app.route(‘/post/<path:path>‘)
  • @app.route(‘/login‘, methods=[‘GET‘, ‘POST‘])

常用路由系統有以上五種,所有的路由系統都是基於一下對應關系來處理:

DEFAULT_CONVERTERS = {
    default:          UnicodeConverter,
    string:           UnicodeConverter,
    any:              AnyConverter,
    path:             PathConverter,
    int:              IntegerConverter,
    float:            FloatConverter,
    uuid:             UUIDConverter,
}

四、模板

python flask框架