1. 程式人生 > >Flask部分三方模塊的使用

Flask部分三方模塊的使用

ons click passwd nbsp __name__ cli div memcach 數據庫

  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(/)
def hello_world(): return Hello World! if __name__ == __main__: manage .run()
flask_script

由於下面的三方組件配置都很類似,我們就把配置文件都一起寫在最後。

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‘ %},然後完善base.html裏寫的block,就可以正常使用了。

技術分享圖片
{% extends ‘bootstrap/base.html‘ %}

{% block content %}
    寫你的頁面內容就可以了
{% endblock %}
前端頁面

Flask部分三方模塊的使用