Python Flask Web 服务 - 快速创建动态 Web 应用程序的提示
讨论 Python Flask Web 服务。我将首先简要介绍 Flask,然后逐步在 Flask 中添加更高级的概念,例如路由、模板、表单处理和数据库集成。目标是让每个人了解和掌握 Flask 创建动态 Web 应用程序的使用技巧。
1。 Flask 简介
Flask 是一个轻量级 WSGI(Web 服务器网关接口)Web 应用程序框架。它的设计是为了易于使用,但它也提供了可扩展性,使用户可以自由选择要集成的第三方库。 Flask 是一个“微型”框架,这意味着它的核心功能非常有限,但可以通过许多插件来增强。
让我们看看如何创建一个简单的 Flask 应用程序。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
在此代码中,我们首先导入 Flask 模块并创建 Flask Web 服务器的实例。然后我们指定路线,即/
。该路由映射到函数 hello_world
,该函数返回“Hello, world!”当用户访问此 URL 时的字符串。
2。瓶子路线
Pulvi 通过提供装饰app.route
,使定义路线变得简单轻松。但你知道吗,我们也可以直接通过 app.add_url_rule
方法添加路由?这种方法提供了更大的灵活性,例如您可以向路由添加不同的 HTTP 方法。
def hello():
return "Hello, World!"
app.add_url_rule('/', 'hello', hello)
上面代码中,参数app.add_url_rule
第一个参数是URL规则,第二个参数是函数别名,第三个参数是要组合的函数。
3。 Flask 模板
Flask 使用 Jinja2 模板库。这个库非常强大,允许您在 HTML 中嵌入 Python 代码。以下示例展示了如何在 Flask 应用程序中使用模板:
from flask import render_template
@app.route('/hello/<name>')
def hello(name):
return render_template('hello.html', name=name)
render_template
函数用于渲染模板。它接收模板名称和一些模板变量作为参数并返回生成的 HTML 内容。在模板中,您可以使用 {{ name }}
显示变量的值。
4。处理瓶子形状
Flask-WTF 是一个用于处理在线表单的 Flask 扩展库。它基于 WTF Python,一个用于处理表单数据的 Python 库。 Flask-WTF 还包括 CSRF(跨站请求伪造)保护。
让我们看一个
简单的示例:
from flask import request
from flask_wtf import FlaskForm
from wtforms import StringField
class MyForm(FlaskForm):
name = StringField('name')
@app.route('/submit', methods=('GET', 'POST'))
def submit():
form = MyForm()
if form.validate_on_submit():
return 'Hello, %s' % form.name.data
return render_template('submit.html', form=form)
在这个示例中,我们定义表单类我的表单
,其中包含字段。然后,我们使用 submit
路由创建此类的实例,并检查表单是否通过验证。如果表格有效,我们会返回一条欢迎消息;否则我们渲染表单模板。
5。 Flask 数据库集成
Flask-SQLAlchemy 是一个插件库,为 Flask 应用程序提供 SQLAlchemy 支持。 SQLAlchemy是Python中的ORM(对象关系映射)工具,可以将类映射到数据库表。
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
def __repr__(self):
return '<User %r>' % self.username
在此示例中,我们首先定义数据库 URL,然后创建 在构建 Web API 时,Flask-RESTful 是一个值得了解的插件。它提供了一种快速创建 REST API 的简单方法。您可以通过定义Python类并将HTTP方法(例如GET、POST)绑定到类方法来实现API资源。 在上面的代码中,我们首先创建了一个Api对象,然后定义了资源类 Flask 的蓝图功能使我们能够组织更大、更复杂的应用程序。您可以将蓝图视为 Flask 应用程序的一部分,它可以拥有自己的路由、模板和静态文件。 这是一个简单的示例: 在这个示例中,我们首先创建一个名为 Pullo 允许我们自定义错误处理功能。当发生特定的 HTTP 错误时,我们可以返回自定义响应。以下是如何为 404 错误定义自定义处理程序的示例: 在此示例中,我们使用 Flask 有几个装饰器,允许我们注册在请求处理的不同阶段调用的函数。这些装饰器是 在此示例中, 在 Web 开发中,我们经常需要存储用户数据,例如用户偏好或登录状态。 Flask 提供了两种方法来完成此任务:cookie 和 session。 以下是在 Flask 中设置和读取 cookie 的示例: 在上面的示例中, er getcookie Flask 的测试客户端允许我们模拟向应用程序发送请求并查看响应。 在上面的代码中,我们首先创建一个测试客户端。然后我们将该客户端的 GET 请求发送到 这只是 Pullo 的冰山一角。 Flask 的魅力远不止于此。它还具有许多多功能插件,例如用于处理用户身份验证的 Flask-Log、用于发送电子邮件的 Flask-Mail 和用于处理数据库迁移的 Flask-Migrate 等。SQLAlchemy
的实例。接下来,定义 User
类,该类继承自 db.Model
,并具有两个属性: ❀❀ 。这两个属性都是数据库表列。
6。使用 Flask 构建 RESTful API
from flask_restful import Resource, Api
api = Api(app)
class HelloWorld(Resource):
def get(self):
return {'hello': 'world'}
api.add_resource(HelloWorld, '/')
HelloWorld
,并在该类中实现了get
方法。最后,我们使用 api.add_resource
将 HelloWorld
类绑定到 URL /❀。
7。 Flask 蓝图
from flask import Blueprint
simple_page = Blueprint('simple_page', __name__)
@simple_page.route('/<page>')
def show(page):
return 'Page %s' % page
simple_page
的计划,然后为该计划定义一条路线。
8。 Bottle 错误处理
@app.errorhandler(404)
def page_not_found(error):
return 'This page does not exist', 404
app.errorhandler
装饰器注册一个新的错误处理程序。当发生 404 错误时,它会返回自定义错误消息。 9。 Flask 的请求钩子
before_first_request
、before_request
、、❀teardown_request 。
路线读取并返回 cookie 的值。 @app.before_request
def before_request():
print("This is executed BEFORE each request.")
before_request
装饰器函数在每个请求之前执行。 10。 Flask 中的 Cookie 和会话
@app.route('/set')
def setcookie():
resp = make_response('Setting cookie!')
resp.set_cookie('username', 'the username')
return resp
@app.route('/get')
def getcookie():
username = request.cookies.get('username')
return 'The username is ' + username
setcookie
路由设置了一个名为 def test_index():
client = app.test_client()
response = client.get('/')
assert response.status_code == 200
还有一件事
def test_index():
client = app.test_client()
response = client.get('/')
assert response.status_code == 200
/
,最后检查响应的状态码是否为 200。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。