Flask 是一个轻量级的Web框架,以简洁和灵活而著称。它提供了构建Web应用所需的基本工具,同时保持了足够的可扩展性,使其成为初学者和有经验的开发人员的首选。本系列专栏将带领大家逐步深入学习 Flask,从最基础的概念开始,逐步进阶至更高级的主题。
轻量级和简单: Flask 的设计理念是保持简单,使开发者能够专注于应用的逻辑而不被过多的框架代码干扰。
灵活性: Flask 是一个微框架,提供了基础的工具,但允许你根据项目的需要选择和集成其他库和工具。
易学易用: Flask 的文档清晰,社区活跃,对于初学者来说,是学习Web开发的绝佳选择。
虚拟环境是Python项目中推荐的一种良好实践,它使项目的依赖隔离开来。在终端中执行以下命令安装虚拟环境工具:
pipenv
是一个用于 Python 项目的依赖管理工具,它结合了 pip
、virtualenv
和 pyenv
的功能,提供了更简洁、一致的工作流。
pipenv
pip install pipenv
cd your_project_directory
pipenv install
这将会创建一个新的虚拟环境,并在项目根目录下生成 Pipfile
和 Pipfile.lock
文件。
requirements.txt
文件,也可以使用以下命令:pipenv install -r requirements.txt
pipenv shell
终端提示符会变成虚拟环境的名称,表示已经在虚拟环境中。
pipenv install package_name
这将自动更新 Pipfile
文件,并将依赖项添加到 Pipfile.lock
。
exit
# 查看虚拟环境中安装的包
pipenv graph
# 卸载依赖
pipenv uninstall package_name
# 查看虚拟环境路径
pipenv --venv
# 查看 Python 解释器路径
pipenv --py
# 检查安全性漏洞
pipenv check
Pipfile
文件用于指定项目的依赖关系,而 Pipfile.lock
文件用于确保项目的每次构建使用相同的依赖版本。这两个文件是配套使用的,Pipfile.lock
不需要手动编辑。
在团队合作时,你可以将 Pipfile
和 Pipfile.lock
文件一同提交到版本控制系统,确保每个人都使用相同的依赖环境。
Pipfile
示例:
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[dev-packages]
[packages]
requests = "*"
flask = "*"
[requires]
python_version = "3.8"
Pipfile.lock
示例:
{
"_meta": {
"requires": {
"python_version": "3.8"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"flask": {
"hashes": [
"sha256:abc123..."
],
"version": "==1.0.2"
},
"requests": {
"hashes": [
"sha256:def456..."
],
"version": "==2.25.1"
}
}
}
pipenv
简化了 Python 项目的依赖管理,提供了一种更清晰和一致的方式来定义和安装依赖。
venv
是 Python 自带的用于创建虚拟环境的工具。
打开终端或命令提示符,然后移动到你项目的目录中。运行以下命令来创建一个名为 myenv
的虚拟环境:
python3 -m venv myenv
这将在当前目录下创建一个名为 myenv
的虚拟环境。
激活虚拟环境可以确保你在该环境中执行的 Python 脚本使用该虚拟环境的解释器和包。在终端中运行以下命令激活虚拟环境:
myenv\Scripts\activate
source myenv/bin/activate
激活后,你的命令提示符会显示虚拟环境的名称(例如,(myenv)
),表示你当前在虚拟环境中。
在虚拟环境中,你可以使用 pip
安装任何你需要的包,而这些包将仅对当前虚拟环境可见。
pip install package_name
在虚拟环境中,你可以运行 Python 脚本,而这些脚本将使用虚拟环境中的 Python 解释器和安装的包。
python your_script.py
当你完成工作时,可以使用以下命令退出虚拟环境:
deactivate
虚拟环境的名称和目录结构是可以自定义的,上述命令中的 myenv
只是一个示例。
在虚拟环境中,你可以使用 pip freeze
命令生成 requirements.txt
文件,以便记录项目的依赖关系。
为了便于项目迁移,最好将虚拟环境放在项目目录之外,例如创建一个名为 venv
的目录,并将虚拟环境放在其中。
使用 venv
虚拟环境可以确保项目有独立的 Python 运行环境,防止包冲突和版本问题。
创建一个新的目录,进入该目录,并在其中创建一个名为 app.py
的文件。
mkdir my_flask_app
cd my_flask_app
touch app.py
进入虚拟环境,然后安装flask
pip install flask
在 app.py
文件中编写以下代码:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, Flask!'
if __name__ == '__main__':
app.run(debug=True)
在终端运行应用:
python app.py
你将看到输出提示,表明 Flask 应用正在运行。在浏览器中访问 http://localhost:5000/,将看到 “Hello, Flask!”。
Flask 使用 Jinja2 作为模板引擎。让我们添加一个简单的模板,以渲染 HTML 页面。
my_flask_app
目录中创建一个名为 templates
的文件夹。mkdir templates
templates
文件夹中创建一个名为 index.html
的文件。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flask Template Exampletitle>
head>
<body>
<h1>{{ greeting }}h1>
body>
html>
app.py
文件以使用模板。from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def hello():
return render_template('index.html', greeting='Hello, Flask with Templates!')
if __name__ == '__main__':
app.run(debug=True)
现在,当访问 /
路由时,Flask 将渲染 index.html
模板,并将 greeting
变量传递给模板。
让我们添加一个简单的表单,允许用户输入名字。
templates/index.html
文件。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flask Template Exampletitle>
head>
<body>
<form method="post" action="{{ url_for('greet') }}">
<label for="name">Enter your name:label>
<input type="text" id="name" name="name" required>
<button type="submit">Greetbutton>
form>
body>
html>
app.py
文件以处理表单提交。from flask import Flask, render_template, request, redirect, url_for
app = Flask(__name__)
@app.route('/')
def hello():
return render_template('index.html')
@app.route('/greet', methods=['POST'])
def greet():
name = request.form.get('name', 'Guest')
return f'Hello, {name}!'
if __name__ == '__main__':
app.run(debug=True)
现在,当用户在表单中输入他们的名字并点击 “Greet” 按钮时,Flask 将显示个性化的问候语。
官方文档:https://flask.palletsprojects.com/