Python流行的轻量级web框架-Flask
前言
Web开发大致分为两个方面-客户端(Frontend)和服务器端(Backend)。每当我们在浏览器中输入任何网站的URL时,浏览器就会向服务器发出请求,服务器确认该请求并提供网站内容(HTML,CSS,JS,图像等),然后在浏览器中呈现该内容以进行显示网站。
使用Python,我们可以创建一个服务器,该服务器可以确认对它的请求,并向请求者提供适当的内容。也可以使用其他语言(例如Ruby,JavaScript,Java等)编写。但是,利用现有的Python知识,我们可以轻松地构建完善的网站。
http.server
Python有一个内置模块http.server,它使我们能够轻松创建一个简单的服务器。但是,根据该模块的文档,建议不要在生产中使用它,因为它没有适当的安全检查功能。
Python流行的Web框架
Python提供了许多Web框架,这些框架提供了开发Web应用程序所需的一组全面的功能。一些受欢迎的是:
Django-是最著名的Python Web开发框架,并提供了构建Web应用程序所需的最广泛的功能。可以在其文档中找到更多信息。
Flask-它被列为一个轻量级web框架。它相对来说比较精简和小巧,但具有高度的可扩展性,并提供了构建web应用程序所必需的许多功能。
Pyramid-是Python的另一个轻量级web框架。
Flask
使用Flask创建Web应用程序
Flask是一个简单且易用的框架,所以我选择使用它来构建基于Python的web应用程序项目。Flask文档非常容易理解,并提供了构建我们自己的web应用程序项目所需的所有信息。
安装Flask库
pip install flask
现在我们可以通过构建一个简单的服务器来测试flask。我创建了一个Pythonserver.py
以包含服务器代码。
# server.py
# import Flask class from flask package
from flask import Flask
# create an instance of the Flask class by providing the application module as a parameter
app = Flask(__name__)
@app.route('/')
def my_first_app():
return 'This is my first Python Web Application!'
Flask使用装饰器功能来处理应用程序的不同路由。在此,我们已经处理了应用程序的默认本地路由。
Flask提供了一些环境变量。要运行该应用程序,需要为FLASK_APP
环境变量分配服务器文件server.py
。然后使用flask run
export FLASK_APP=hello.py
flask run
# * Running on http://127.0.0.1:5000/
(在 Windows 下需要使用 set 来代替 export 。)
在打开localhost URL http://127.0.0.1:5000
时,我们应该看到应用程序的内容。
为了确保服务器监视代码中所做的更改,需要像这样启用Flask调试模式:
$ export FLASK_ENV=development
$ flask run
现在,在对server.py
文件进行任何更改之后,无需重新启动服务器。
使用Flask提供文件
要构建实际的启动网站,我们需要提供HTML,CSS以及一些JS等网站文件。Flask有一些用于提供文件的约定。
所有模板文件(HTML)需要保留在templates
文件夹中,而所有静态文件(CSS,JS,assets)都需要放置在static
文件夹中。Flask内部使用Jinja模板引擎来渲染模板文件。
我创建了两个模板文件index.html
,about.html
以及一个CSS文件styles.css
来管理全局样式。为了提供模板文件,Flask提供了一个功能render_template
。
# server.py
# import Flask class from flask package
from flask import Flask, render_template
# create an instance of Flask class by providing the application module as a parameter
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html')
@app.route('/about')
def about():
return render_template('about.html')
我们可以将动态变量作为URL传递<variable>
,然后使用“变量规则”在模板中动态呈现它们。创建一个post route,该post route可以接受post id作为参数并动态呈现不同的内容。可以选择将converter类型作为传递给变量<converter:variable>
。以下是可用的converter类型:
Type | Value |
---|---|
string | (默认)接受任何不包含斜杠的文本 |
int | 接受正整数 |
float | 接受正浮点数 |
path | 类似 string ,但可以包含斜杠 |
uuid | 接受UUID字符串 |
# server.py
@app.route('/post/<int:post_id>')
def show_post(post_id):
# show the post with the given id, the id is an integer
return 'Post %d' % post_id
现在,在URL /post
之后输入任何整数值,页面应该动态显示输入的post id。因为我们添加了一个int
converter,传递除整数以外的任何值,将导致找不到页面。