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 %}
~~~
- Python学习
- Python基础
- Python初识
- 列表生成式,生成器,可迭代对象,迭代器详解
- Python面向对象
- Python中的单例模式
- Python变量作用域、LEGB、闭包
- Python异常处理
- Python操作正则
- Python中的赋值与深浅拷贝
- Python自定义CLI三方库
- Python并发编程
- Python之进程
- Python之线程
- Python之协程
- Python并发编程与IO模型
- Python网络编程
- Python之socket网络编程
- Django学习
- 反向解析
- Cookie和Session操作
- 文件上传
- 缓存的配置和使用
- 信号
- FBV&&CBV&&中间件
- Django补充
- 用户认证
- 分页
- 自定义搜索组件
- Celery
- 搭建sentry平台监控
- DRF学习
- drf概述
- Flask学习
- 项目拆分
- 三方模块使用
- 爬虫学习
- Http和Https区别
- 请求相关库
- 解析相关库
- 常见面试题
- 面试题
- 面试题解析
- 网络原理
- 计算机网络知识简单介绍
- 详解TCP三次握手、四次挥手及11种状态
- 消息队列和数据库
- 消息队列之RabbitMQ
- 数据库之Redis
- 数据库之初识MySQL
- 数据库之MySQL进阶
- 数据库之MySQL补充
- 数据库之Python操作MySQL
- Kafka常用命令
- Linux学习
- Linux基础命令
- Git
- Git介绍
- Git基本配置及理论
- Git常用命令
- Docker
- Docker基本使用
- Docker常用命令
- Docker容器数据卷
- Dockerfile
- Docker网络原理
- docker-compose
- Docker Swarm
- HTML
- CSS
- JS
- VUE