目录
- Introduction
- Installations
- Building a Flask App
- Routing
- Dynamic Web Pages and HTTP Methods
- Conclusion
什么是烧瓶?
烧瓶是一个轻巧的框架,用于在Python中构建完整的Web应用程序。有许多用于在Python构建Web应用程序的框架。但是,烧瓶提供了与传统的Web框架不同的系统,并且可以轻松地使用几行代码构建应用程序。
要了解烧瓶的工作原理,您必须知道一些术语,因为它们有助于Python的功能。其中一些术语是
- Web服务器网关接口(WSGI): WSGI是Web服务器和Web应用程序之间通用接口的规范。它用于将请求从Web服务器转发到后端Python Web应用程序或框架。
- werkzeug: werkzeug是一个可用于创建WSGI(Web Server网关接口)的库的集合。
- jinja2 是一个python库,使我们能够构建表现力和可扩展的模板。它用于构建模板并将Python与非Python代码集成。
基本上,Flask使用Web服务器网关接口(WSGI)处理请求和响应,并根据Jinja2模板引擎修改应用程序。构建复杂的应用程序时,您可以利用Python库为您的Web应用程序添加高级功能。
在本文中,我们将研究构建完整烧瓶应用程序所涉及的所有主要概念。为了演示这些概念,我们将构建一个基本应用程序,该应用程序接收请求并动态发送浏览器的响应。
- 对Python语法和概念的理解,
- HTML和CSS的基础知识,
- 本地Python 3编程环境和一个浏览器。
安装烧瓶并设置虚拟环境
在开始应用程序之前,您需要安装virtualenv
和Flask
软件包。这些软件包提供了设置和使用烧瓶应用程序的必要工具和库。
virtualenv
Virtualenv用于为您的Python项目创建一个孤立的环境。它确保您的项目具有其独立的库实例,可防止与不同库版本的兼容性问题。
这些是您需要遵循的步骤安装virtualenv
:
- 创建一个要存储项目文件的文件夹。
- 打开命令提示符或终端并运行以下命令:
pip install virtualenv
3. Once Virtualenv已安装,您必须使用此命令来创建环境:
virtualenv venv
这将创建一个名为"venv"
的文件夹
请知道,您可以为虚拟环境选择任何名称。我们正在使用_ venv _为了本文。
4.next,您必须激活创建的环境;
如果您正在使用Windows操作系统,则可以使用此提示:
.\venv\Scripts\activate
用于MacOS或Linux用户:
source venv/bin/activate
激活虚拟环境后,您应该在终端提示中看到环境的名称,这表明环境处于活动状态。
安装烧瓶
要安装烧瓶包,请打开终端或命令提示符并按照以下步骤;
1.驱逐到要创建烧瓶项目的目录。例如,如果要创建一个名为“ myFolder ”的文件夹,则使用cd
命令导航到该位置。假设“ myFolder ”位于桌面上,命令将是:
cd Desktop/myfolder
2.当您在正确的目录中,您可以运行以下命令使用PIP安装烧瓶:
pip install flask
3.执行命令后,PIP将下载并安装烧瓶包及其依赖项。
构建烧瓶应用程序
现在您已经安装了所需的软件包,现在可以按照以下步骤构建应用程序;
-
创建一个带有
.py
扩展名的新的python文件来存储烧瓶代码。您可以为文件选择任何名称。例如,让我们称之为app.py
。 -
在您首选的文本编辑器或集成开发环境(IDE)中打开
app.py
文件。
3.启动从flask
模块导入烧瓶类。此类提供了创建烧瓶应用程序的必要功能。
from flask import Flask
4.next,创建烧瓶类的实例并将其分配给变量。此实例代表您的烧瓶应用程序。您可以为变量选择任何名称。在此示例中,我们将使用app
。
from flask import Flask
app = Flask(__name__)
烧瓶类是烧瓶应用程序的核心,它提供了处理HTTP请求和响应所需的功能。
- 为您的应用程序定义路由。路由是与特定函数相对应的URL路径。在这种情况下,我们将使用
@app.route()
Decorator定义根路由(“/”)。
路由装饰器用于定义路线。通常紧随其后的是函数,因为它将路由绑定到函数。这意味着,当用户访问应用程序的根URL时,烧瓶将调用装饰功能,index()
from flask import Flask
app =Flask(__name__)
@app.route('/')
def index():
return ' Hello World'
- 通常,当Python脚本运行时,Python将名称“ main ”分配给脚本。但是,一旦条件确保脚本直接由Python解释器执行,我们可以使用IF语句运行该应用程序,而不是从另一个脚本中导入的模块。如果我们导入另一个脚本,则IF语句将阻止其他脚本运行。
if __name__ == "__main__":
app.run(debug =True)
注意:
将您的调试模式设置为true将允许您的代码中所做的所有更改都应用于浏览器中的应用程序,而无需再次运行
这是所有代码步骤的汇编;
from flask import Flask
app =Flask(__name__)
@app.route('/')
def index():
return ' Hello World'
if __name__ == "__main__":
app.run(debug =True)
- 保存并运行文件。要运行烧瓶应用程序,请打开终端或命令提示符,导航到
app.py
文件所在的目录,并使用Python命令运行文件的路径。
烧瓶将启动本地开发服务器,您会看到一个输出,表明该应用程序正在运行。现在,您可以在浏览器中访问root URL(通常是http://localhost:5000/),以查看“ Hello,World!”显示消息。
虽然此输出中有许多有用的信息,但目前最重要的是第四行,这表明该应用程序正在url http://127.0.0.1:5000/上的本地主机上运行。 (Localhost是指您的本地计算机)
打开一个浏览器并粘贴URL,您应该看到:
恭喜您!您已经成功地构建了烧瓶应用程序,该应用在浏览器上显示信息,
但是,在现实生活中,有许多页面和不同的功能来处理不同的事件。这似乎是压倒性的,但是Web框架有一个用于处理此过程的系统,并且该系统称为路由。
路由
路由用于将特定的URL映射到关联的功能。例如,在上一个代码中,使用路由装饰器将URL(//)映射到索引函数,
@app.route('/')
def index():
return ' Hello World'
路由使您可以为可能需要的不同功能声明不同的URL或路由。例如:
from flask import Flask
app =Flask(__name__)
@app.route('/')
def index():
return ' Hello World'
@app.route('/product')
def Product():
return 'This is our products page'
if __name__ == "__main__":
app.run(debug =True)
在前面的代码中,我们创建了一个名为“产品”的新功能,“映射到url” /products"
。当用户访问/product
URL并返回字符串'这是我们的产品页面'。
第一个路线是'/',它是根网址。 index()函数与此路由关联,当用户访问根网址时,将调用。它返回家庭功能“ Hello World”的输出。
因此,URL 127.0.0.1:5000/product
显示了产品功能的输出。
路由装饰器@app.route()
通常接受URL作为第一个参数。但是,它也可以接受HTTP方法的列表作为第二个参数。
HTTP方法是客户(例如Web浏览器)与服务器通信以执行特定操作的指令。每个方法都定义要在资源上执行的操作。一些常见的HTTP方法是;
get :用于从服务器检索数据。
POST :此方法将数据从网页发送到服务器。就像提交表格或发送要处理或存储的信息一样。
head :从服务器中检索数据,就像GET方法一样,但没有接收实际内容。这就像询问有关资源的元数据。
put :用更新版本替换服务器上的现有资源。
删除:从服务器删除目标资源
默认情况下,烧瓶路由响应以获取请求。除非路线装饰者明确提到应该尊重哪种HTTP方法。为了说明帖子方法如何与URL路由一起工作,现在,让我们首先创建一个HTML表单并使用帖子并获取方法以检索和将表单数据发送到URL。
html代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="http://localhost:5000/login">
<p> Enter name:</p>
<p><input type="text" name="name"></p>
<p><input type="submit" value="submit"></p>
</form>
</body>
</html>
使用此代码,我们创建了一个HTML表单,该表单要求一个名称,并将输入的值提交给URL“ http://localhost:5000/login”,该值将在Python文件中定义。
Python代码
from flask import Flask, request, redirect, url_for, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html')
@app.route('/success/<name>')
def success(name):
return 'Welcome %s' % name
@app.route('/login', methods=['POST', 'GET'])
def login():
if request.method == 'POST':
user = request.form['name']
return redirect(url_for('success', name=user))
else:
user = request.args.get('name')
return redirect(url_for('success', name=user) if user else url_for('home'))
if __name__ == "__main__":
app.run(debug=True)
这是烧瓶代码的故障;
第1和2行:导入烧瓶类并为我们的应用程序创建一个类的实例。
第3-5行:代码创建一个路由装饰器(@app.route()),将URL路径/成功/成功函数绑定到成功函数。
PS ,所使用的变量称为URL参数。 ,URL参数用于在烧瓶应用程序的URL中传递动态数据。他们从URL捕获特定值,并使它们可以在烧瓶路线和功能中使用。
成功函数返回一个字符串,该字符串代替了名称空间(%s)。
行4- 8:路由装饰器将URL路径(/登录)绑定到登录函数。该功能还处理get和post请求。
POST请求使用request. form['name']
检索通过名称表单字段提交的值。 (这是我们以形式给我们输入的名称)。然后,使用redirect
函数和url_for
函数将用户值传递到成功路线,该功能生成了成功路线的URL。
GET请求使用request.args.get('name')
从URL检索名称查询参数的值。同样,用户值使用redirect
和url_for
传递到成功路线。
在某些情况下,您可能需要在网页上修改输出,而不必从函数更改输出消息。您可能还需要创建一个更复杂的输出,可以对简单的返回语句感到满意。
烧瓶具有称为render_template
的函数,可在您的应用程序上处理此类事件。 render_templates
允许您以网络应用程序的模板的形式创建和使用HTML页面。这替换了有限的字符串输出,并允许您在烧瓶中创建更多的交互式网页。
要利用render_template
函数,我们必须在您的工作环境中创建一个文件夹,其中render_template
函数可以获取您要使用的.html文件。该文件夹应始终命名为“模板”,因为此功能在模板文件夹中寻找模板(HTML文件)。
如果您可以按指示命名文件,则必须在烧瓶类的实例中初始化模板变量来将功能引导到您的首选文件夹。
app = Flask(__name__, template_folder="templates")
主页
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>This is our home page</h2>
</body>
</html>
关于页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>This is out about page</h2>
</body>
</html>
烧瓶代码
from flask import Flask, request, redirect, url_for, render_template
app = Flask(__name__)
@app.route("/")
def home():
return render_template("home.html")
@app.route("/about")
def about ():
return render_template("about.html")
if __name__ == "__main__":
app.run(debug=True)
在我们的烧瓶应用程序中,我们从烧瓶模块导入了 render_template()方法。但是,大多数代码保持不变,但是在第7行中,我们修改了返回语句。现在,我们使用 render_template(“ home.html”)而不是返回普通的字符串或响应。这指示烧瓶在“模板”文件夹中查找“ home.html”模板文件,并将其作为响应渲染。
这也适用于awing函数。
通过利用Render_template(),我们可以轻松地将HTML模板合并到我们的烧瓶应用程序中,从而将演示逻辑与代码的其余部分分开。这使我们能够通过将HTML与烧瓶的强大功能结合在一起来创建动态和交互式网页。您还可以使用CSS语言为这些页面设计样式,以提高网站的视觉吸引力。
结论
在整个指南中,我们涵盖了烧瓶的基础知识,包括如何设置烧瓶项目,定义路线,处理HTTP方法并使用烧瓶的模板系统。有了这些知识,您可以开始构建自己的烧瓶应用程序,随着您的进步添加更多功能。