Flask部分三方模塊的使用
Flask是一個基於Python開發並且依賴jinja2模板和Werkzeug WSGI服務的一個微型框架,“微”(micro) 並不表示你需要把整個 Web 應用塞進單個 Python 文件,也不意味著 Flask 在功能上有所欠缺。微框架中的“微”意味著 Flask 旨在保持核心簡單而易於擴展。Flask 不會替你做出太多決策——比如使用何種數據庫。而那些 Flask 所選擇的——比如使用何種模板引擎——則很容易替換。除此之外的一切都由可由你掌握。默認情況下,Flask 不包含數據庫抽象層、表單驗證,或是其它任何已有多種庫可以勝任的功能。然而,Flask 支持用擴展來給應用添加這些功能,如同是 Flask 本身實現的一樣。眾多的擴展提供了數據庫集成、表單驗證、上傳處理、各種各樣的開放認證技術等功能。Flask 也許是“微小”的,但它已準備好在需求繁雜的生產環境中投入使用。
Flask常用第三方組件
1、flask_script
- 使其具有類似django啟動的方式
- Flask Script擴展提供向Flask插入外部腳本的功能,包括運行一個開發用的服務器,一個定制的Python shell,設置數據庫的腳本,cronjobs,及其他運行在web應用之外的命令行任務;使得腳本和系統分開;
from flask import Flask from flask_script import Manager app = Flask(__name__) manage = Manager(app) @app.route(‘/‘)flask_scriptdef hello_world(): return ‘Hello World!‘ if __name__ == ‘__main__‘: manage .run()
由於下面的三方組件配置都很類似,我們就把配置文件都一起寫在最後。
2、flask_sqlalchemy
將sqlalchemy 的engine session Base 操作封裝在db 對象,從而使得代碼更加簡潔,是專屬於flask的sqlalchemy,使其可以像Django的ORM方式一樣操作數據庫。
3、flask_session
flask-session是flask框架的session組件,由於原來flask內置session使用簽名cookie保存,該組件則將支持session保存到多個地方,如:
- redis
- memcached
- filesystem
- mongodb
- sqlalchmey
4、flask_migrate
想讓flask類似Django一樣通過命令行的方式 執行遷移,生成表。
5、flask_bootstrap
幫我們直接集成了bootstrap的東西,配置好了以後就可以直接使用bootstrap上的東西。
6、flask_caching
臨時緩存數據(當然也可以將數據存儲下來長期緩存),提高客戶端的響應速度,減輕服務端壓力(數據庫壓力) 支持數據過期。
7、flask_debugtoolbar
幫我們在頁面上快速查看開發相關配置和後端的sql 路由等等。
以上的配置:
from flask_session import Session from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate from flask_bootstrap import Bootstrap from flask_debugtoolbar import DebugToolbarExtension from flask_caching import Cache from myapp.settings import CACHES se = Session() db = SQLAlchemy() bootstrap = Bootstrap() debug = DebugToolbarExtension() # cache = Cache(config = {‘CACHE_TYPE‘:‘simple‘}) #簡易的緩存 cache = Cache(config = CACHES.get(‘default‘)) #緩存到redis,兩種都可以 def init_ext(app): se.init_app(app) migrate = Migrate(app,db) #註意還要傳入db bootstrap.init_app(app) debug.init_app(app) db.init_app(app) cache.init_app(app)實例化三方組件
import os from redis import StrictRedis CACHES = { ‘default‘: { ‘CACHE_TYPE‘: ‘redis‘, ‘CACHE_REDIS_URL‘: ‘redis://127.0.0.1:6379/6‘ }, ‘debug‘: { ‘CACHE_TYPE‘: ‘redis‘, ‘CACHE_REDIS_URL‘: ‘redis://127.0.0.1:6379/8‘ } } def get_db_uri(conf): uri = ‘{backend}+{engine}://{user}:{pwd}@{host}:{port}/{name}‘.format( backend=conf.get(‘backend‘), engine=conf.get(‘engine‘), user=conf.get(‘user‘), pwd=conf.get(‘pwd‘), host=conf.get(‘host‘), port=conf.get(‘port‘), name=conf.get(‘name‘), ) return uri class Config: DEBUG = False TEST = False ONLINE = False SECRET_KEY = ‘aisofhas‘ #如果想要使用flask_debugtoolbar ,需要設置 #SECRET_KEY,同時DEBUG = True。 SESSION_TYPE = ‘redis‘ SESSION_KEY_PREFIX = ‘myapp:‘ SQLALCHEMY_TRACK_MODIFICATIONS = False class DebugConfig(Config): DEBUG = True SESSION_REDIS = StrictRedis(‘127.0.0.1‘, db=1) DATABASE = { ‘backend‘: ‘mysql‘, ‘engine‘: ‘pymysql‘, ‘user‘: os.environ.get(‘DB_USER‘), ‘pwd‘: os.environ.get(‘DB_PASSWD‘), ‘host‘: ‘127.0.0.1‘, ‘port‘: 3306, ‘name‘: ‘ex2‘ } SQLALCHEMY_DATABASE_URI = get_db_uri(DATABASE) class OnlineConfig(Config): ONLINE = True SESSION_REDIS = StrictRedis(‘127.0.0.1‘, db=2) DATABASE = { ‘backend‘: ‘mysql‘, ‘engine‘: ‘pymysql‘, ‘user‘: os.environ.get(‘DB_USER‘), ‘pwd‘: os.environ.get(‘DB_PASSWD‘), ‘host‘: ‘127.0.0.1‘, ‘port‘: 3306, ‘name‘: ‘ex3‘ } SQLALCHEMY_DATABASE_URI = get_db_uri(DATABASE) conf = { ‘debug‘: DebugConfig, ‘online‘: OnlineConfig, }settings.py的必要配置
註意:如果要使用flask_migrate,manage.py需要填上下面配置。
from flask_script import Manager from myapp import create_app from flask_migrate import MigrateCommand app = create_app(‘debug‘) manage = Manager(app) manage.add_command(‘db‘,MigrateCommand) if __name__ == ‘__main__‘: manage.run()manage.py
from flask import Blueprint, render_template from myapp.ext import * from myapp.models import * blue = Blueprint("wusir",__name__) def init_blue(app): app.register_blueprint(blue) @blue.route(‘/‘) @cache.cached(10) def index(): return render_template(‘index.html‘)views.py
註意:如果要使用flask_bootstrap,頁面需要先繼承{% extends ‘bootstrap/base.html‘ %},
{% extends ‘bootstrap/base.html‘ %}
{% block content %}
寫你的頁面內容就可以了
{% endblock %}
前端頁面
Flask部分三方模塊的使用