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
  • 相关阅读:
    21.Merge Two Sorted Lists 、23. Merge k Sorted Lists
    34. Find First and Last Position of Element in Sorted Array
    leetcode 20. Valid Parentheses 、32. Longest Valid Parentheses 、301. Remove Invalid Parentheses
    31. Next Permutation
    17. Letter Combinations of a Phone Number
    android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
    oc 异常处理
    oc 类型判断
    oc Delegate
    oc 协议
  • 原文地址:https://www.cnblogs.com/wusir66/p/9966082.html
Copyright © 2011-2022 走看看