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