zoukankan      html  css  js  c++  java
  • 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 %}
    前端页面
    Fake it,till you make it
  • 相关阅读:
    更改EBSserver域名/IP
    iOS Dev (60) 怎样实现 UITextView 中的 placeHolder
    程序猿的量化交易之路(29)--Cointrader之Tick实体(16)
    美团面试中被问到的问题汇总
    汇报措辞:你懂得如何向领导汇报吗(审阅、审批、审阅、批示、查阅)?
    九月份总结
    Android 编程之第三方开发 MaoZhuaWeiBo微博开发演示样例-1
    OLE操作Excel编译错误处理
    在 VS2008 下操作 Excel 的方法总结
    vs2008 ole excel
  • 原文地址:https://www.cnblogs.com/wusir66/p/9966082.html
Copyright © 2011-2022 走看看