python信息技术实践之六Flask WEB框架
Flask是一个使用Python编写的轻量级Web应用框架。它被设计为易于使用和扩展,使得开发者可以快速搭建基本的Web应用,同时也能够构建复杂的系统。本篇文章将引导初学者了解Flask的安装、基础用法、进阶技巧以及如何处理异常。
Flask的安装
安装Flask非常简单,可以通过Python的包管理工具pip来完成。打开命令行工具,输入以下命令:
pip install Flask
如果你使用的是Python 3,则可能需要使用pip3
来确保安装的是Python 3版本的Flask。
创建第一个Flask应用
创建一个基本的Flask应用只需要几行代码。下面是一个简单的示例:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'Hello, Flask!'
这段代码创建了一个名为app
的Flask实例,并定义了一个路由/
,当用户访问根目录时,会返回一个简单的字符串Hello, Flask!
。
运行这个应用,可以使用以下命令:
flask run
这将启动一个开发服务器,通常可以在http://127.0.0.1:5000/
访问你的应用。
那么,这些代码是什么意思呢?
-
首先我们导入了
Flask
类。 该类的实例将会成为我们的 WSGI 应用。 -
接着我们创建一个该类的实例。第一个参数是应用模块或者包的名称。如果你使用 一个单一模块(就像本例),那么应当使用
__name__
,因为名称会根据这个 模块是按应用方式使用还是作为一个模块导入而发生变化(可能是 ‘__main__’ , 也可能是实际导入的名称)。这个参数是必需的,这样 Flask 才能知道在哪里可以 找到模板和静态文件等东西。更多内容详见Flask
文档。 -
然后我们使用
route()
装饰器来告诉 Flask 触发函数的 URL 。 -
函数名称被用于生成相关联的 URL 。函数最后返回需要在用户浏览器中显示的信息。
Flask的常用接口
Flask提供了许多接口来处理Web请求。下面是一些基础但非常有用的接口。
路由
路由是URL到Python函数的映射。在Flask中,使用@app.route()
装饰器来定义路由。
@app.route('/hello')
def hello_world():
return 'Hello, World!'
上面的代码定义了一个路由/hello
,当访问这个URL时,会调用hello_world()
函数。
处理表单数据
Flask可以很容易地处理表单提交的数据。假设你有一个简单的HTML表单,用户可以输入他们的姓名:
<form method="post" action="/greet">
<input type="text" name="name">
<input type="submit" value="Greet">
</form>
在Flask中,你可以这样获取表单数据:
from flask import request
@app.route('/greet', methods=['POST'])
def greet():
name = request.form['name']
return 'Hello, {}!'.format(name)
错误处理
在Web应用中,错误处理是非常重要的。Flask允许你自定义错误页面。
@app.errorhandler(404)
def page_not_found(e):
return 'This page does not exist.', 404
这段代码定义了当用户访问不存在的页面时,会显示自定义的404错误页面。
唯一的 URL / 重定向行为
以下两条规则的不同之处在于是否使用尾部的斜杠。:
@app.route('/projects/')
def projects():
return 'The project page'
@app.route('/about')
def about():
return 'The about page'
projects
的 URL 是中规中矩的,尾部有一个斜杠,看起来就如同一个文件夹。 访问一个没有斜杠结尾的 URL 时 Flask 会自动进行重定向,帮你在尾部加上一个斜杠。
about
的 URL 没有尾部斜杠,因此其行为表现与一个文件类似。如果访问这个 URL 时添加了尾部斜杠就会得到一个 404 错误。这样可以保持 URL 唯一,并帮助 搜索引擎避免重复索引同一页面。
URL 构建
url_for()
函数用于构建指定函数的 URL。它把函数名称作为第一个 参数。它可以接受任意个关键字参数,每个关键字参数对应 URL 中的变量。未知变量 将添加到 URL 中作为查询参数。
为什么不在把 URL 写死在模板中,而要使用反转函数 url_for()
动态构建?
-
反转通常比硬编码 URL 的描述性更好。
-
你可以只在一个地方改变 URL ,而不用到处乱找。
-
URL 创建会为你处理特殊字符的转义和 Unicode 数据,比较直观。
-
生产的路径总是绝对路径,可以避免相对路径产生副作用。
-
如果你的应用是放在 URL 根路径之外的地方(如在
/myapplication
中,不在/
中),url_for()
会为你妥善处理。
例如,这里我们使用 test_request_context()
方法来尝试使用 url_for()
。 test_request_context()
告诉 Flask 正在处理一个请求,而实际上也许我们正处在交互 Python shell 之中, 并没有真正的请求。
from flask import Flask, url_for
from markupsafe import escape
app = Flask(__name__)
@app.route('/')
def index():
return 'index'
@app.route('/login')
def login():
return 'login'
@app.route('/user/<username>')
def profile(username):
return '{}\'s profile'.format(escape(username))
with app.test_request_context():
print(url_for('index'))
print(url_for('login'))
print(url_for('login', next='/'))
print(url_for('profile', username='John Doe'))
/
/login
/login?next=/
/user/John%20Doe
- 点赞
- 收藏
- 关注作者
评论(0)