Flask部分三方模块的使用

Posted wusir66

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 %}
前端页面

 

以上是关于Flask部分三方模块的使用的主要内容,如果未能解决你的问题,请参考以下文章

python之用smtplib模块使用第三方smtp发送邮件(通过flask实现一个http接口)

Flask 安装第三方库 ImportError: No module named flask 导包失败,Python3重新安装Flask模块

Python三大主流框架分析

python 模块的概念介绍

Flask 编写http接口api及接口自动化测试

网站后端_Flask-第三方库.利用Flask-Socketio扩展构建实时流应用?