Python Flask 请求数据获取响应详解

Python Flask请求数据获取响应详解

什么是 Python Flask

Python Flask 是一个轻量级的 Web 应用框架。它的设计原则是让开发 Web 应用变得简单和快速。Flask 的核心是 WSGI 工具箱,它负责管理 Flask 的请求和响应。Flask 还提供了一些有用的扩展功能,方便我们处理数据和连接到数据库服务器等。

Flask 请求

在 Flask 中,一个请求由一个 URL 和请求方法组成。Flask 认为 GET 是默认请求方法,所以如果请求方法没有明确指定,Flask 就会使用 GET 方法。常见的请求方法包括:GET、POST、PUT、DELETE、PATCH 等。

获取请求参数

Flask 可以很方便地获取 HTTP 请求参数。下面是一些常用的获取参数的方法。

获取 GET 请求参数

获取 GET 请求参数有两种方式:通过 request.args 对象获取单个参数,或通过 request.args.to_dict() 方法获取所有参数。

示例代码:

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def index():
    username = request.args.get('username')
    password = request.args.get('password')
    return 'username: %s, password: %s' % (username, password)

if __name__ == '__main__':
    app.run()

URL:http://localhost:5000/?username=alice&password=123456

返回结果:username: alice, password: 123456

另一种方式是调用 request.args.to_dict() 方法,并将所有参数保存到一个字典中:

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def index():
    args = request.args.to_dict()
    return str(args)

if __name__ == '__main__':
    app.run()

URL:http://localhost:5000/?username=alice&password=123456

返回结果:{'username': 'alice', 'password': '123456'}

获取 POST 请求参数

获取 POST 请求参数的方法与 GET 请求参数类似,不同的是你需要在 request 对象上调用 form 属性。

示例代码:

from flask import Flask, request

app = Flask(__name__)

@app.route('/', methods=['POST'])
def index():
    username = request.form.get('username')
    password = request.form.get('password')
    return 'username: %s, password: %s' % (username, password)

if __name__ == '__main__':
    app.run()

POST 数据:username=alice&password=123456

返回结果:username: alice, password: 123456

文件上传

文件上传是 Web 开发中常见的功能,Flask 简化了文件上传的流程。

单文件上传

Flask 可以很方便地处理单个文件上传。你需要在表单中添加一个 file 类型的 input,然后在 Flask 中使用 request.files 属性获取文件对象。

示例代码:

from flask import Flask, request

app = Flask(__name__)

@app.route('/', methods=['POST'])
def index():
    f = request.files['file']
    f.save('/tmp/upload/' + f.filename)
    return 'File uploaded successfully.'

if __name__ == '__main__':
    app.run()

HTML 表单:

<form action="/" method="POST" enctype="multipart/form-data">
  <input type="file" name="file" />
  <input type="submit" value="Upload" />
</form>

多文件上传

Flask 也可以处理多个文件上传。你可以使用 getlist() 方法获取多个文件对象。

示例代码:

from flask import Flask, request

app = Flask(__name__)

@app.route('/', methods=['POST'])
def index():
    files = request.files.getlist('file')
    for f in files:
        f.save('/tmp/upload/' + f.filename)
    return 'Files uploaded successfully.'

if __name__ == '__main__':
    app.run()

HTML 表单:

<form action="/" method="POST" enctype="multipart/form-data">
  <input type="file" name="file" />
  <input type="file" name="file" />
  <input type="file" name="file" />
  <input type="submit" value="Upload" />
</form>

Flask 响应

在 Flask 中,响应是由视图函数返回的。默认情况下,视图函数返回的是字符串。Flask 可以把字符串转换为响应对象,也可以自动转换 JSON 数据格式。

字符串响应

可以直接将字符串作为响应返回。Flask 会将字符串封装为 Response 对象,同时设置一些默认的 Content-Type 和 HTTP 状态码。

示例代码:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, world!'

if __name__ == '__main__':
    app.run()

JSON 响应

使用 Flask 时,你可能需要返回 JSON 格式的数据。Flask 可以自动将 Python 字典转换为 JSON 对象,并将其设置到 Response 对象中。

示例代码:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/')
def index():
    data = {'username': 'alice', 'age': 18}
    return jsonify(data)

if __name__ == '__main__':
    app.run()

返回结果:{"age":18,"username":"alice"}

自定义响应

有时候,你需要自己定义响应,包括 HTTP 状态码、响应头等。你可以使用 make_response() 方法来创建 Response 对象,并指定一些参数。

示例代码:

from flask import Flask, make_response

app = Flask(__name__)

@app.route('/')
def index():
    response = make_response('Hello, world!')
    response.headers['Server'] = 'Apache/2.2.14'
    response.status_code = 404
    return response

if __name__ == '__main__':
    app.run()

返回结果:

Hello, world!
Status: 404 NOT FOUND
Server: Apache/2.2.14

结语

这就是 Python Flask 请求数据获取响应的详细介绍。希望你已经掌握了 Flask 的基本用法,并能够使用 Flask 开发自己的 Web 应用程序。

如果你需要更多关于 Flask 的帮助,可以访问 Flask 的官网 https://flask.palletsprojects.com/,或查看 Flask 文档。

示例1

from flask import Flask, jsonify, request
app = Flask(__name__)

users = {
    '1': {
        'username': 'alice',
        'email': 'alice@abc.com',
        'password': '123456'
    },
    '2': {
        'username': 'bob',
        'email': 'bob@abc.com',
        'password': '654321'
    }
}

@app.route('/users', methods=['GET'])
def get_users():
    return jsonify(users)

@app.route('/users/<user_id>', methods=['GET'])
def get_user(user_id):
    return jsonify(users[user_id])

@app.route('/users', methods=['POST'])
def create_user():
    user = request.json
    user_id = str(len(users) + 1)
    users[user_id] = user
    return jsonify(user)

@app.route('/users/<user_id>', methods=['PUT'])
def update_user(user_id):
    user = request.json
    users[user_id] = user
    return jsonify(user)

@app.route('/users/<user_id>', methods=['DELETE'])
def delete_user(user_id):
    users.pop(user_id)
    return '', 204

if __name__ == '__main__':
    app.run(debug=True)

示例功能:用户信息的 CRUDE 操作。可以获取单个用户信息,可以获取所有用户信息,可以创建、修改、删除单个用户。

示例2

from flask import Flask, request, redirect, url_for
app = Flask(__name__)

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        if username == 'admin' and password == '123456':
            return redirect(url_for('index'))
    return '''
        <form action="" method="post">
            <p><input type="text" name="username"></p>
            <p><input type="password" name="password"></p>
            <p><input type="submit" value="Login"></p>
        </form>
    '''

@app.route('/')
def index():
    return 'Hello, world!'

if __name__ == '__main__':
    app.run(debug=True)

示例功能:模拟登录操作。如果用户名和密码正确,则重定向到主页。如果用户名和密码错误,则重新显示登录表单。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Flask 请求数据获取响应详解 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 解决Python 进程池Pool中一些坑

    解决Python 进程池Pool中一些坑 在Python中,进程池(Pool)是一种常用的并发编程方式,可以有效地提高程序的执行效率。但是,在使用进程池时,我们也需要注意一些坑点,本文将详细讲解如何解决这些坑点。 坑点一:进程池中函数必须在主模块中定义 在使用进程池时,我们需要将要执行的函数定义在主模块中,否则会出现PicklingError异常。这是因为在…

    python 2023年5月13日
    00
  • python 实现对数据集的归一化的方法(0-1之间)

    Python 实现对数据集的归一化的方法(0-1之间) 归一化是数据预处理中的一项重要工作。它可以将数值型的数据进行标准化处理,让数据按照一定的比例缩小到0-1之间,提高数据处理的精度。 在 Python 中,我们可以使用 sklearn 库中的 MinMaxScaler 类对数据集进行归一化。 步骤 导入需要的库 from sklearn.preproce…

    python 2023年6月3日
    00
  • python 动态调用函数实例解析

    Python动态调用函数实例解析 在Python中,我们可以使用动态调用函数的方式来实现更加灵活的编程。本文将介绍Python动态调用函数的实现方式,包括使用函数名字符串、使用getattr函数、使用字典等方式,并提供两个示例。 使用函数名字符串 在Python中,我们可以使用函数名字符串来动态调用函数。以下是一个示例: def add(x, y): ret…

    python 2023年5月15日
    00
  • Python使用sys.exc_info()方法获取异常信息

    当Python程序在运行过程中遇到异常时,我们可以使用try…except结构来捕获并处理异常。sys模块中的exc_info()方法可以用来获取当前异常的详细信息。 exc_info()方法返回一个元组,包括当前异常的类型、异常实例以及异常的traceback信息三个元素。我们可以通过访问该元组中的元素来获取具体的异常信息。 下面是exc_info()…

    python 2023年5月13日
    00
  • Python 3 到 2 等效代码

    【问题标题】:Python 3 to 2 equivalent codePython 3 到 2 等效代码 【发布时间】:2023-04-05 16:15:01 【问题描述】: 这是来自 Ken Lambert 的书,基于 Python 3。 print(‘The median is’, end=” “) Python 2 中的等价物是什么?我认为是 ‘en…

    Python开发 2023年4月5日
    00
  • 如何在Python中查询Redis数据库中的数据?

    以下是在Python中查询Redis数据库中的数据的完整使用攻略。 使用Redis数据库的前提条件 在使用Python连接Redis数据库之前,需要确保已经安装Redis数据库,并已经创建使用的数据库,同时需要安装Python的驱动程序,例如redis。 步骤1:导入模块 在Python中使用redis模块连接Redis数据库。以下是导入redis模块的基本…

    python 2023年5月12日
    00
  • Python相互导入的问题解决

    Python 中的模块可以相互导入,但是当两个或多个模块相互引用时,有时候可能会产生报错,这个时候我们需要一些技巧来解决。 以下是处理 Python 相互导入问题的完整攻略: 1. 实际遇到相互引用的问题 当在 Python 中有两个模块,其中一个模块引用了另一个模块的函数或者变量,而另一个模块又引用了第一个模块的某些内容时,就会产生相互导入的问题。 如下所…

    python 2023年5月13日
    00
  • Python实现图片添加文字

    下面是Python实现图片添加文字的完整攻略: 1. 准备工具和环境 首先,我们需要确保电脑中有Python环境和ImageMagick工具。可以在终端中通过以下命令检查: python –version convert -version 如果命令行输出了相应版本的信息,那么就说明已经具备了必要的工具和环境。 2. 使用Python库Pillow打开图片 …

    python 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部