多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
  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 %} ~~~