Flask部分三方模塊的使用

  Flask是一個基於Python開發而且依賴jinja2模板和Werkzeug WSGI服務的一個微型框架,「微」(micro) 並不表示你須要把整個 Web 應用塞進單個 Python 文件,也不意味着 Flask 在功能上有所欠缺。微框架中的「微」意味着 Flask 旨在保持核心簡單而易於擴展。Flask 不會替你作出太多決策——好比使用何種數據庫。而那些 Flask 所選擇的——好比使用何種模板引擎——則很容易替換。除此以外的一切都由可由你掌握。默認狀況下,Flask 不包含數據庫抽象層、表單驗證,或是其它任何已有多種庫能夠勝任的功能。然而,Flask 支持用擴展來給應用添加這些功能,如同是 Flask 自己實現的同樣。衆多的擴展提供了數據庫集成、表單驗證、上傳處理、各類各樣的開放認證技術等功能。Flask 也許是「微小」的,但它已準備好在需求繁雜的生產環境中投入使用。html

  Flask經常使用第三方組件

一、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

因爲下面的三方組件配置都很相似,咱們就把配置文件都一塊兒寫在最後。

二、flask_sqlalchemy

  將sqlalchemy 的engine session Base 操做封裝在db 對象,從而使得代碼更加簡潔,是專屬於flask的sqlalchemy,使其能夠像Django的ORM方式同樣操做數據庫。前端

三、flask_session

  flask-session是flask框架的session組件,因爲原來flask內置session使用簽名cookie保存,該組件則將支持session保存到多個地方,如:mysql

  • redis
  • memcached
  • filesystem
  • mongodb
  • sqlalchmey

四、flask_migrate

  想讓flask相似Django同樣經過命令行的方式 執行遷移,生成表。web

五、flask_bootstrap

  幫咱們直接集成了bootstrap的東西,配置好了之後就能夠直接使用bootstrap上的東西。redis

六、flask_caching

  臨時緩存數據(固然也能夠將數據存儲下來長期緩存),提升客戶端的響應速度,減輕服務端壓力(數據庫壓力) 支持數據過時。sql

七、flask_debugtoolbar

  幫咱們在頁面上快速查看開發相關配置和後端的sql 路由等等。mongodb

以上的配置:shell

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,就能夠正常使用了。django

{% extends 'bootstrap/base.html' %}

{% block content %}
    寫你的頁面內容就能夠了
{% endblock %}
前端頁面
相關文章
相關標籤/搜索