1. FlaskIntroduction
Flask is a 轻量级 Python Webframework, 由Armin Ronachercreation, 基于Werkzeug WSGItool箱 and Jinja2模板引擎. Flask被称 for "微framework", 因 for 它不依赖specific tool or library, providing了构建Webapplication所需 basicfunctions, 但允许Development者根据需要选择scale.
1.1 Flask 特点
- 轻量级: Flaskcorefunctions simple , 只package含必要 component, 不会强加过 many structure or 依赖
- flexible性: 允许Development者根据projectrequirements选择合适 scale and library
- 易于Learning: APIdesign简洁, documentation丰富, 适合初学者
- 强 big scale生态: 拥 has 丰富 scalelibrary, 可用于processingdatalibrary, 表单verification, userauthenticationetc.
- 基于Werkzeug and Jinja2: 利用成熟 toollibrary, 确保performance and security性
2. Environment Setup
in 开始usingFlask之 before , 我们需要搭建Developmentenvironment. 以 under is 详细 步骤:
2.1 installationPython
Flask is 基于Python , 所以首先需要installationPython. 推荐usingPython 3.6 or 更 high version.
- Windows: from Python官网 under 载installationpackage, runinstallation程序并勾选"Add Python to PATH"
- macOS: usingHomebrewinstallation:
brew install python - Linux: usingsystempackagemanagement器installation, such asUbuntu:
sudo apt-get install python3
2.2 verificationPythoninstallation
installationcompletion after , 打开终端 (Windows on is commands提示符 or PowerShell) , 输入以 under commandsverificationPython is 否installation成功:
python --version # Windows
python3 --version # macOS/Linux
such as果显示Pythonversion号 (such asPython 3.8.5) , 则说明installation成功.
2.3 installationpip
pip is Python packagemanagementtool, 用于installation and managementPythonlibrary. from Python 3.4开始, pip已经package含 in Pythoninstallationpackagein. verificationpip is 否installation成功:
pip --version # Windows
pip3 --version # macOS/Linux
2.4 creation虚拟environment
虚拟environment is Pythonproject 隔离environment, 可以避免不同project之间 依赖conflict. 推荐 for 每个Flaskprojectcreation一个独立 虚拟environment.
usingPython in 置 venvmodulecreation虚拟environment:
# creation虚拟environment
python -m venv flask_env # Windows
python3 -m venv flask_env # macOS/Linux
# 激活虚拟environment
# Windows (commands提示符)
flask_env\Scripts\activate.bat
# Windows (PowerShell)
flask_env\Scripts\Activate.ps1
# macOS/Linux
source flask_env/bin/activate
激活虚拟environment after , 终端提示符 before 会显示虚拟environment名称 (such as(flask_env)) .
2.5 installationFlask
in 激活 虚拟environmentin, usingpipinstallationFlask:
pip install flask
verificationFlask is 否installation成功:
python -c "import flask; print(flask.__version__)"
such as果显示Flaskversion号 (such as1.1.2) , 则说明installation成功.
3. creation第一个Flaskapplication
现 in 我们来creation一个 simple Flaskapplication, 体验Flask basicfunctions.
3.1 creationprojectstructure
首先creation一个projectTable of Contents, 然 after in Table of Contentsincreation一个Pythonfile:
# creationprojectTable of Contents
mkdir flask_app
cd flask_app
# creationPythonfile
touch app.py # macOS/Linux
echo. > app.py # Windows
3.2 writingFlaskapplicationcode
in app.pyfileinwriting以 under code:
from flask import Flask
# creationFlaskapplicationinstance
app = Flask(__name__)
# 定义routing and 视graphfunction
@app.route('/')
def hello_world():
return 'Hello, Flask!'
# runapplication
if __name__ == '__main__':
app.run(debug=True)
3.3 runFlaskapplication
in 终端inrunapplication:
python app.py
FlaskDevelopmentserver会 in 默认端口5000 on 启动, 输出class似以 under information:
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 123-456-789
打开浏览器, 访问http://127.0.0.1:5000/, 你将看 to "Hello, Flask!" 输出.
4. Flaskapplication basicstructure
让我们analysis一 under 刚才creation Flaskapplication basicstructure:
4.1 applicationinstance
app = Flask(__name__) creation了Flaskapplication instance. __name__ parameter is 当 before module 名称, Flaskusing它来确定application 根Table of Contents, 以便找 to 模板 and 静态fileetc.resource.
4.2 routing and 视graphfunction
routing is URL to 视graphfunction map. using@app.route('/')装饰器可以将URLpathmap to for 应 视graphfunction. 当user访问该URL时, Flask会调用 for 应 视graphfunction, 并将function return valueserving asresponse返回给客户端.
4.3 runapplication
app.run(debug=True) 启动FlaskDevelopmentserver. debug=True 启用debug模式, in debug模式 under , 当code发生变化时, server会自动重启, 并且 in 发生error时会显示详细 errorinformation.
5. FlaskDevelopmentserver configuration
FlaskDevelopmentserver可以throughapp.run()method parameterforconfiguration:
app.run(
host='0.0.0.0', # 允许所 has IP访问
port=8080, # using8080端口
debug=True # 启用debug模式
)
6. Flaskapplication configurationmanagement
Flaskproviding了 many 种方式来managementapplicationconfiguration:
6.1 usingconfigurationobject
class Config:
DEBUG = True
SECRET_KEY = 'your-secret-key'
app.config.from_object(Config)
6.2 usingenvironmentvariable
import os
app.config['DEBUG'] = os.environ.get('DEBUG', False)
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY', 'default-secret-key')
6.3 usingconfigurationfile
creation一个configurationfileconfig.py:
DEBUG = True
SECRET_KEY = 'your-secret-key'
然 after in applicationin加载configuration:
app.config.from_pyfile('config.py')
7. Flask corecomponent
Flaskpackage含以 under corecomponent:
- routingsystem: 将URLmap to 视graphfunction
- 模板引擎: usingJinja2模板引擎生成HTMLresponse
- requestprocessing: processingHTTPrequest, includingrequest头, request体etc.
- responseprocessing: 生成HTTPresponse, includingresponse头, response体etc.
- sessionmanagement: managementusersession
- on under 文management: providingrequest on under 文 and application on under 文
8. Flaskscale
Flask scale生态非常丰富, 以 under is 一些常用 scale:
- Flask-SQLAlchemy: SQLAlchemy ORM 集成, 用于datalibraryoperation
- Flask-WTF: 表单processing and verification
- Flask-Login: userauthentication and sessionmanagement
- Flask-Bcrypt: password哈希processing
- Flask-Mail: 发送电子email
- Flask-RESTful: DevelopmentRESTful API
- Flask-CORS: processing跨域resource共享
- Flask-Migrate: datalibrarymigrationmanagement
练习 1: creationFlaskapplication
- creation一个 new 虚拟environment
- installationFlask
- creation一个 simple Flaskapplication, package含以 under functions:
- 首页 (/) 显示"Hello, Flask!"
- /aboutrouting显示"This is an about page"
- /contactrouting显示"This is a contact page"
- runapplication, in 浏览器in访问各个routing
练习 2: configurationFlaskapplication
- creation一个configurationfileconfig.py, package含DEBUG and SECRET_KEYconfiguration
- in Flaskapplicationin加载configurationfile
- modifyapplication, 使其 in 不同environment under using不同 configuration
- runapplication, verificationconfiguration is 否生效