## Flask介紹:
* Flask是一種使用Python編寫的輕量級的Web框架, WSGI工具采用Werkzeug,模板引擎使用Jinja2, Flask使用的是BSD授權
* Flask核心簡單, 可以自定義擴展, 沒有固定的數據庫和模板等設置, 簡單輕便
* Flask也有web開發'微'框架之稱
## 開始項目
下面是官網中的一個Flask項目, 只需要簡單的7行代碼, 我們就是可以讓一個Flask項目運行起來。
~~~
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
~~~
## 項目拆分
Flask由于框架體量小, 所有的拓展包都需要我們自己去安裝, 所以一個Flask項目會安裝很多的拓展包是很常見的。基于項目的可拓展性和代碼的可閱讀性, 當代碼量較大時, 將所有的代碼寫在一個文件中是一件很可怕的事, 所以我們就要對其進行拆分, 主要還是參考 MVC模式進行, 將不同的功能放在其對應的模塊中, 方便我們進行閱讀。
* 創建app的文件目錄, 將views 和 models 寫入其中進行管理
* 在app目錄下創建 static 目錄,存放靜態文件
* 在app目錄下創建 templates 目錄, 存放網頁模板
* 在app目錄下創建settings.py文件,存放所有的配置文件
* 創建ext.py文件,用來管理擴展的工具函數
* 在app下的\_\_init\_\_.py文件中,創建一個函數用來創建app并整合所有的配置信息。
* 將主要的執行內容寫在執行文件manage.py中,manage.py和創建的app目錄為同一級, 在這里面調用app下\_\_init\_\_.py中創建的函數來創建app,并且引入 Manage 進行管理app。
## 整體結構:

```
from flask_script import Manager
from myapp import create_app
app = create_app('debug')
manage = Manager(app = app)
if __name__ == '__main__':
manage.run()
manage.py
```
static目錄用來存放靜態文件目錄。如css,js,img等。templates目錄用來存放html模板文件。
```
from flask import Flask
from myapp.ext import init_ext #導入擴展庫中的函數
from myapp.settings import conf #從settings中導入配置文件
from myapp.views import init_blue #從views中導入注冊藍圖的函數
from myapp.models import db #從models中導入實例化SQLAlchemy的對象
def create_app(env_name): #創建一個創建app的函數,并傳入要配置的環境
if not env_name in conf.keys():
raise Exception('環境名稱有問題')
app = Flask(__name__)
app.config.from_object(conf.get(env_name)) #根據傳入的環境導入settings配置
init_ext(app) #實例化第三方插件
init_blue(app) #實例化藍圖
return app
__init__.py
```
```
from flask_session import Session
from flask_sqlalchemy import SQLAlchemy
def init_ext(app): #實例化第三方插件并綁定app
se = Session()
se.init_app(app)
db = SQLAlchemy()
db.init_app(app)
ext.py
```
```
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy() #實例化SQLAlchemy對象
class Student(db.Model):
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
name = db.Column(db.String(30),nullable=True,unique=True)
models.py
```
```
import os
from redis import StrictRedis
# 數據庫的連接拼寫規則
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'
#做session持久化的配置
SESSION_TYPE = 'redis' # 指定session存儲方案
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':'hzflask'
}
SQLALCHEMY_DATABASE_URI = get_db_uri(DATABASE)
class TestConfig(Config):
Test = 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': 'hzflask2'
}
SQLALCHEMY_DATABASE_URI = get_db_uri(DATABASE)
class OnlineConfig(Config):
Online = True
SESSION_REDIS = StrictRedis('127.0.0.1', db=3)
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': 'hzflask3'
}
SQLALCHEMY_DATABASE_URI = get_db_uri(DATABASE)
conf = {
'debug':DebugConfig,
'test':TestConfig,
'online':OnlineConfig,
}
settings.py
```
```
from flask import Blueprint, session, render_template
from myapp.models import db, Student
blue = Blueprint('wusir',__name__)
def init_blue(app):
app.register_blueprint(blue)
@blue.route('/')
def index():
return 'index'
views.py
```
- 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