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 %}
前端页面
相关文章
相关标签/搜索