Flask 入门指南。
介绍
在本文中,如果您已经熟悉 Python 编程,我将解释如何在您的计算机上安装 Flask 以开发 Web 应用程序。 在 Flask 中,您可以使用 Python 和一些 HTML 和 CSS 创建 Web 应用程序。 我正在逐步解释过程,以便您可以跟随我。 我在本教程中使用的是 Mac 计算机。
1.搭建平台。
首先,您需要在计算机上安装 pip,以便在使用 Flask 进行开发时安装必要的东西。 使用 pip --version 命令检查您的计算机中是否有 pip。 如果您的计算机上没有安装 pip,请使用以下命令并将 pip 安装到本地工作站。
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py $ python get-pip.py $ pip --version
在计算机上安装 pip 后,您几乎可以开始使用了。特别是,您可以全局安装 Flask,也可以在虚拟环境中安装。在本教程中,我在虚拟环境中安装 Flask 并运行我们的第一个 Flask 应用程序。
您可以通过 pip list 命令检查您的系统上是否已经安装了 Flask。如果在列表中没有找到 Flask,请运行 pip install flask 命令安装 Flask。正如我之前提到的,因为我们在虚拟环境中运行 Flask,所以不需要全局安装 Flask。
2.创建第一个Flask App
接下来,使用 pip list 命令检查您的系统上是否安装了 virtualenv。如果没有,请使用 pip install virtualenv 命令。这将帮助您在虚拟环境中运行应用程序。
然后导航到您的项目目录并在终端中运行 virtualenv env 命令。这将在您的项目目录中创建一个 env 目录。之后,您需要使用源 env/bin/activate 或 . env/bin/activate 命令[如果您使用的是 Windows 计算机,此命令会有所不同]。现在您在虚拟环境中。
检查点子列表,看看你有什么。即使您之前已全局安装过 Flask,您也不会在列表中看到它。然后,您可以使用 pip install flask 在虚拟环境中安装 Flask,它不会影响全局。
接下来,创建一个 app.py 文件并将以下代码添加到其中。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello from Flask!
'
if __name__ == '__main__':
app.run(debug=True)
然后,您可以在终端上运行 flask run 命令来启动 Flask App 并导航到 127.0.0.1:5000 以在浏览器中打开该应用程序。
如果不使用名称 app.py 作为文件名,则需要使用 .flaskenv 文件将环境变量设置为相关文件。 假设您的文件名为 main.py。 然后您需要创建 .flaskenv 文件并按如下方式设置这些变量。
FLASK_ENV=development
FLASK_APP=main.py
现在,由于您拥有 .flaskenv 文件,因此您需要在运行 flask run 命令之前运行 pip install python-dotenv 命令。 此命令将允许您使用 .flaskenv 文件。 运行 pip install python-dotenv 命令后,运行 deactivate 命令以禁用环境,并使用 source env/bin/activate 命令再次激活虚拟环境。 然后运行 flask run 命令来启动应用程序并在浏览器中查看输出。
此外,您可以将所有包保存到一个文本文件中,并且有一天如果您必须将您的项目移动到另一台计算机上,您不必再次创建 env 目录。 您可以使用此文本文件来创建它。 使用以下命令将您的包添加到文本文件中。
$ pip freeze > requirements.txt'requirements.txt' is the file name
然后在新机器上,您可以运行以下命令以使用文本文件创建 env 文件夹。
$ pip install -r requirements.txt
3. 渲染网页并添加路由
然后在项目目录中创建模板、静态和图像目录。 这些目录分别保存 HTML 页面、样式表和图片。 之后,在静态目录中的模板目录和 CSS 目录中创建 index.html 文件。 您还可以在 CSS 目录中添加 main.css 文件。
此外,您需要将 render_template 模块导入 app.py 以呈现 HTML 页面。
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
Home
This is the Home page
然后你可以运行 flask run 命令在浏览器上渲染 index.html 文件。
Web 应用程序通常具有使用户更容易探索的路由。 目前我们只有一个 HTML 页面和静态内容。 接下来,我们将看到如何在 Flask 应用中添加多个页面并设置路由。
让我们创建两个名为 about.html 和 contact.html 的 HTML 文件。 确保您还将这两个文件放在模板目录中。 出于学习目的,我尽可能简单地创建这两个文件。
About
About Us
Conatct
Contact Us
接下来,我们可以将路由添加到我们的 app.py 文件中,如下所示。
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/about')
def about():
return render_template('about.html')
@app.route('/contact')
def contact():
return render_template('contact.html')
if __name__ == '__main__':
app.run(debug=True)
运行烧瓶运行命令后,您将在浏览器上看到这些页面和导航。
4. 模板继承
模板继承是您在使用 Flask 开发应用程序时遇到的一个引人入胜的功能。 基本上,模板继承的作用是,它允许我们为所有 HTML 网页创建基础或布局,并仅自定义/添加相关部分,而无需一遍又一遍地从头开始构建整个 HTML 网页。
为了在我们的 Flask 应用程序中实现模板继承,我们创建了一个 base.html 文件并将其扩展到其他 HTML 文件,如下所示。 这个场景 Jinja2 发挥作用,那些分隔符属于 Jinja2 。 一般来说,Jinja2 被称为现代模板语言,供 Python 开发人员创建 HTML、XML 或其他标记格式。
当你运行命令 pip list 时,你会看到 Jinja2 已经存在并且已经安装了 Flask。
让我们将 base.html 文件创建为普通的 HTML 文件,并在必要时添加 Jinja2 分隔符。
{% block head %}{% endblock%}
{% block body %}{% endblock%}
这里,{% block head %}{% endblock%} 和 {% block body %}{% endblock%} 是 Jinja2 的分隔符。
接下来,让我们相应地修改我们的 index、about 和 contact HTML 文件。
{% extends 'base.html' %}
{% block head %}
Home
{% endblock%}
{% block body %}
This is the Home page
{% endblock%}
{% extends 'base.html' %}
{% block head %}
About
{% endblock%}
{% block body %}
About page
{% endblock%}
{% extends 'base.html' %}
{% block head %}
Conatct
{% endblock%}
{% block body %}
Contact Us
{% endblock%}
这种方法很容易在我们的网页上应用和创建动态内容。 接下来,将了解如何在我们的应用程序中添加和呈现动态内容。
5. 渲染动态内容。
让我们在 app.py 文件中创建一个简单的 Python 列表,并在其中添加必要的更改,如下所示。
from flask import Flask, render_template
app = Flask(__name__)
names = ['Randil', 'John', 'Michael']
@app.route('/')
def index():
return render_template('index.html', names=names, title='Flask')
@app.route('/about')
def about():
return render_template('about.html')
@app.route('/contact')
def contact():
return render_template('contact.html')
if __name__ == '__main__':
app.run(debug=True)
并将必要的更改添加到 index.html 中,如下所示。
{% extends 'base.html' %}
{% block head %}
{% if title%}
Hello - {{ title }}
{% else %}
Hello
{% endif %}
{% endblock%}
{% block body %}
Hey {{ names[0] }}, from Flask
{% for name in names %}
-
{{ name }}
{% endfor %}
{% endblock%}
同样,您可以遍历列表或字典并将值从 Python 应用程序传递到 HTML 页面。
6. 使用 GET、POST 方法
通常,我们的网页上有表单来获取用户输入并据此采取必要的行动。 因此,在本节中,您将学习如何从网页获取用户输入并将其传递给我们的应用程序。
让我们创建一个名为 login.html 的新页面,如下所示。
{% extends 'base.html' %}
{% block head %}
Login
{% endblock%}
{% block body %}
Log In
{% endblock%}
让我们更新 app.py 应用程序来处理表单请求。 这次我们将 4 个新模块导入到 app.py 文件中,它们是 request、redirect、url_for 和 flash。
from turtle import title
from flask import Flask, render_template,request, redirect, url_for, flash
app = Flask(__name__)
app.config['SECRET_KEY'] = 'de921e121eec1e95642035ca4d39d34b'
names = ['Randil', 'John', 'Michael']
@app.route('/')
def home():
return render_template('index.html', names=names, title='Flask')
@app.route('/about')
def about():
return render_template('about.html')
@app.route('/contact')
def contact():
return render_template('contact.html')
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
title = username
flash(f'User {username} successfully logged in!')
return redirect(url_for('success', username=username, title=title))
else:
return render_template('login.html')
@app.route('/success/username:?title:')
def success(username, title):
return render_template('success.html', username=username, title=title)
if __name__ == '__main__':
app.run(debug=True)
要在 Flask 中处理 GET、POST 请求,您需要拥有密钥。 在上面的 app.py 代码片段中,我已将该密钥设置到 app.config['SECRET_KEY'] 中。 您可以为您的应用程序生成一个密钥,如下所示。
打开终端的另一个选项卡并运行命令 $ python 。 这将打开 Python shell,然后运行以下命令。
$ python>>> import secrets
>>> secrets.token_hex(16)
'de921e121eec1e95642035ca4d39d34b'
>>>
复制该值并将其设置为 app.config['SECRET_KEY']。
然后,一旦用户填写表格并单击登录按钮,结果将显示在 success.html 文件中。 因此,让我们按如下方式创建 success.html 文件。
{% extends 'base.html' %}
{% block head %}
{% if title%}
Logged in as {{ title }}
{% else %}
Logged In
{% endif %}
{% endblock%}
{% block body %}
{% with messages = get_flashed_messages() %}
{% if messages %}
{% for message in messages %}
{{ message }}
{% endfor %}
{% endif %}
{% endwith %}
Welcom, {{ username }}!
{% endblock%}
最后,您将在浏览器上获得输出。
这是应用程序快照。
恭喜
希望您喜欢并喜欢这篇文章,并希望您发现这些信息有用。 对于喜欢使用 Python 相关框架开发 Web 应用程序的人来说,这是一个适合初学者的教程。
如果您有任何问题,请给我留言。
感谢您的阅读!