一份完整且适合初学者的 Python Flask 教程🐍。从基础的模板渲染到 Web 服务器部署,一应俱全。
面向初学者的完整 Flask 教程
快速入门
面向初学者的完整 Flask 教程
我制作这个教程是为了帮助和教导我的学生使用 Flask 制作出色的动态网站。Flask 是 Python 的一个 API,允许我们构建 Web 应用程序。它由 Armin Ronacher 开发。它非常现代且富有表现力。我学习它是因为它非常有用,还能让我减少代码编写。
我尝试删除 Flask 的额外主题,并尽可能使其对初学者友好。那么,让我们开始安装,然后通过快速入门进行概述。本教程将展示如何使用 Flask 创建一个小型但完整的应用程序。
祝你好运!
目录
必需的:
- 具有一点 Python 编码经验(变量、循环、方法/函数等)
- 耐心
- 时间
请注意,本教程针对的是后端开发,而非前端开发。像谷歌、亚马逊、
Facebook 和微软这样的大型软件公司认为后端开发人员与前端开发人员有所不同。然而,要想成为一名优秀的程序员,就需要理解两者的概念。
文档
Flask 文档
Jinja 文档
为什么选择Flask
Flask 的框架比 Django 的框架更清晰,也更容易学习,因为它只需要更少的基础代码就能实现一个简单的 Web 应用程序。
使用 Flask 框架的公司列表 - 谁在使用 Flask?
使用 Flask 的公司
- Red Hat、Rackspace、Airbnb、Netflix、PythonAnywhere、Lyft、Reddit、Mailgun、MIT、Mozilla、Balrog(应用程序更新服务)、发布工程服务、Hotjar、Patreon、Teradata、Uber、三星、Nginx 、 https://stackshare.io/flask/上还有 1.5k 多家公司
快速入门
安装
pip install flask
最小应用程序
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
if __name__=="__main__":
app.run()
那么该代码做了什么?
-
首先我们导入了 Flask 类。该类的一个实例将成为我们的 WSGI 应用程序。
-
接下来我们创建这个类的一个实例。第一个参数是应用程序模块或包的名称。name是一个方便的缩写,适用于大多数情况。这是为了让 Flask 知道在哪里查找资源(例如模板和静态文件)。
-
然后我们使用 route() 装饰器来告诉 Flask 哪个 URL 应该触发我们的功能。
-
该函数返回我们想要在用户浏览器中显示的消息。默认内容类型是 HTML,因此字符串中的 HTML 将由浏览器渲染。
调试模式
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
# debud mode running on 8000 port
if __name__=="__main__":
app.run(debug=True, port=8000)
flask run 命令的功能远不止启动开发服务器。启用调试模式后,服务器会在代码更改时自动重新加载;如果请求过程中出现错误,则会在浏览器中显示交互式调试器。
警告 ⚠️
该调试器允许从浏览器执行任意 Python 代码。虽然它已受密码保护,但仍然存在重大安全风险。请勿在生产环境中运行开发服务器或调试器。
路由
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'This is Index Page'
@app.route('/login')
def login():
return 'This is Login Page'
@app.route('/hello')
def hello():
return 'Hello, World'
if __name__=="__main__":
app.run(debug=True)
现代 Web 应用程序使用有意义的 URL 来帮助用户。如果页面使用有意义的 URL,用户能够记住并直接访问,那么他们更有可能喜欢该页面并再次访问。
使用
route()
装饰器将函数绑定到 URL。
渲染模板
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def index():
return render_template('index.html')
@app.route("/")
def about():
return render_template('about.html')
if __name__=="__main__":
app.run()
在 flask 中,html 文件默认由“templates”文件夹提供,所有静态文件;图像、css、js 等由“static”文件夹提供。
这些文件夹应该存在于你的 Python 应用程序的根目录中
URL 变量
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
# string
@app.route('/string/<string:value>')
def string(value):
return f"<p>Hi this is a string value {value}</p>"
# int
@app.route('/int/<int:value>')
def int(value):
return f"<p>Hi this is a int value {value}</p>"
# float
@app.route('/float/<float:value>')
def float(value):
return f"<p>Hi this is a float value {value}</p>"
# path
@app.route('/path/<path:value>')
def path(value):
return f"<p>Hi this is a path value {value}</p>"
# uuid
@app.route('/uuid/<uuid:value>')
def uuid(value):
return f"<p>Hi this is a uuid value {value}</p>"
if __name__=="__main__":
app.run(debug=True)
您可以通过使用 标记各部分来向 URL 添加变量部分
<variable_name>
。然后,您的函数将接收<variable_name>
作为关键字参数。您也可以选择使用转换器来指定参数的类型,例如转换器:变量名。
类型 | 价值 | 使用 |
---|---|---|
细绳 | (默认)接受任何不带斜线的文本 | 字符串:值 |
整数 | 接受正整数 | int:值 |
漂浮 | 接受正浮点值 | 浮点数:值 |
小路 | 类似于字符串,但也接受斜杠 | 路径:值 |
唯一标识符 | 接受 UUID 字符串 | uuid:值 |
重定向
from flask import Flask, render_template, request
from werkzeug.utils import redirect
app = Flask(__name__)
@app.route('/', methods = ['GET', 'POST'])
def home():
if request.method == 'POST':
name = request.form.get('name')
age = request.form.get('age')
return redirect(f'/result/{name}/{age}')
return render_template('home.html')
@app.route('/about')
def about():
return "This is about"
@app.route('/result/<name>/<age>')
def result(name, age):
return render_template('result.html', name=name, age=age)
app.run()
项目端点的规范 URL 末尾有一个斜杠。它类似于文件系统中的文件夹。如果您访问的 URL 末尾没有斜杠 (/about),Flask 会将您重定向到末尾带有斜杠的规范 URL (/about/)。
消息闪烁
from flask import Flask, flash, redirect, render_template, request, url_for
app = Flask(__name__)
app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'
@app.route('/')
def index():
return render_template('index.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
error = None
if request.method == 'POST':
if request.form['username'] != 'admin' or request.form['password'] != 'secret':
error = 'Invalid credentials'
else:
flash('You were successfully logged in')
return redirect('/')
return render_template('login.html', error=error)
if __name__=="__main__":
app.run(debug=True)
继续阅读:https://dev.to/sid86dev/a-complete-beginner-friendly-python-flask-tutorial-learn-from-basic-template-rendering-to-deploying-in-web-servers-5ack好的应用程序和用户界面都离不开反馈。如果用户得不到足够的反馈,他们最终可能会讨厌这个应用程序。Flask 提供了一种非常简单的方式来通过闪现系统向用户提供反馈。闪现系统基本上可以在请求结束时记录一条消息,并在下一个请求(且仅在下一个请求)中访问它。这通常与实现此功能的布局模板结合使用。需要注意的是,浏览器(有时 Web 服务器)会限制 Cookie 的大小。这意味着,如果闪现的消息对于会话 Cookie 来说过大,则会导致消息闪现失败,且不会发出任何提示。