Flask 框架的基本配置與應用

1、Flask介紹

Flask是當下流行的Web框架,它是用Python實現的其 WSGI 工具箱採用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 受權。。Flask顯著的特色是:它是一個「微」框架。」微」意味着Flask旨在保持核心的簡單,但同時又易於擴展。默認狀況下,Flask 不包含數據庫抽象層、表單驗證,或是其它任何已有多種庫能夠勝任的功能。然而,Flask 支持用擴展來給應用添加這些功能。衆多的擴展提供了數據庫集成、表單驗證、上傳處理、各類各樣的開放認證技術等功能。Flask的這些特性,使得它在Web開發方面變得很是流行。前端

Flask的兩大核心:Werkzeug和Jinja2python

- Werkzeug實現路由、調試和Web服務器網關接口mysql

- Jinja2實現了模板sql

2、Flask的安裝

pip3 install flask

經常使用擴展包:數據庫

Flask-SQLalchemy:操做數據庫;json

Flask-script:插入腳本;flask

Flask-migrate:管理遷移數據庫;服務器

Flask-Session:Session存儲方式指定;session

Flask-WTF:表單;app

Flask-Mail:郵件;

Flask-Bable:提供國際化和本地化支持,翻譯;

Flask-Login:認證用戶狀態;

Flask-OpenID:認證;

Flask-RESTful:開發REST API的工具;

Flask-Bootstrap:集成前端Twitter Bootstrap框架;

Flask-Moment:本地化日期和時間;

Flask-Admin:簡單而可擴展的管理接口的框架

3、Flask的基本使用

from flask import Flask
app = Flask(__name__)
 
@app.route('/')
def hello_world():
    return 'Hello World!'
 
if __name__ == '__main__':
    app.run()
 1 {
 2         'DEBUG':                                get_debug_flag(default=False),  是否開啓Debug模式
 3         'TESTING':                              False,                          是否開啓測試模式
 4         'PROPAGATE_EXCEPTIONS':                 None,                          
 5         'PRESERVE_CONTEXT_ON_EXCEPTION':        None,
 6         'SECRET_KEY':                           None,
 7         'PERMANENT_SESSION_LIFETIME':           timedelta(days=31),
 8         'USE_X_SENDFILE':                       False,
 9         'LOGGER_NAME':                          None,
10         'LOGGER_HANDLER_POLICY':               'always',
11         'SERVER_NAME':                          None,
12         'APPLICATION_ROOT':                     None,
13         'SESSION_COOKIE_NAME':                  'session',
14         'SESSION_COOKIE_DOMAIN':                None,
15         'SESSION_COOKIE_PATH':                  None,
16         'SESSION_COOKIE_HTTPONLY':              True,
17         'SESSION_COOKIE_SECURE':                False,
18         'SESSION_REFRESH_EACH_REQUEST':         True,
19         'MAX_CONTENT_LENGTH':                   None,
20         'SEND_FILE_MAX_AGE_DEFAULT':            timedelta(hours=12),
21         'TRAP_BAD_REQUEST_ERRORS':              False,
22         'TRAP_HTTP_EXCEPTIONS':                 False,
23         'EXPLAIN_TEMPLATE_LOADING':             False,
24         'PREFERRED_URL_SCHEME':                 'http',
25         'JSON_AS_ASCII':                        True,
26         'JSON_SORT_KEYS':                       True,
27         'JSONIFY_PRETTYPRINT_REGULAR':          True,
28         'JSONIFY_MIMETYPE':                     'application/json',
29         'TEMPLATES_AUTO_RELOAD':                None,
30     }
配置文件
方式一:
    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
調用方式

4、Flask的路由系統

@app.route('/xxx/<username>')
@app.route('/xxx/<int:id>')
@app.route('/xxx/<float:id>')
@app.route('/xxx/<path:path>')
@app.route('/xxx', methods=['GET', 'POST'])
DEFAULT_CONVERTERS = {
    'default':          UnicodeConverter,
    'string':           UnicodeConverter,
    'any':              AnyConverter,
    'path':             PathConverter,
    'int':              IntegerConverter,
    'float':            FloatConverter,
    'uuid':             UUIDConverter,
}
處理關係

5、Flask的藍圖

「藍圖」系統在Flask應用的組件化和擴展提供了很大的便利。「組件化」是指能夠在Flask層上將一個Flask應用進行「分割」,實現模塊化管理,這極大地簡化了構建大型應用的流程,也使得應用的維護變得更加容易。另外,「藍圖」還提供了一種Flask擴展在應用上註冊操做的核心方法。

「藍圖」和一個Flask應用對象很類似,可是並非一個Flask應用對象。它是能夠註冊到Flask應用上的一系列操做(對於此的理解,後文會詳細講到)。使用「藍圖」,能夠實現如下的一些功能:

  • 將Flask應用「分割」爲一系列「藍圖」的集合,簡化了大型應用工做的方式;
  • 在Flask應用上,以 URL 前綴和或子域名註冊一個藍圖。能夠以不一樣的URL屢次註冊一個藍圖;
  • 經過藍圖提供模板過濾器、靜態文件、模板和其它功能。
from blueprint import app_index
app.register_blueprint(app_index)
藍圖的註冊
from flask import Blueprint
app_index = Blueprint("app_index", __name__, template_folder="templates")
藍圖的建立
相關文章
相關標籤/搜索