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('/')
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 %}
前端页面

 

posted @ 2018-11-15 21:11  WuSir_ZJ  阅读(282)  评论(0编辑  收藏  举报