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日

相关文章

  • Stem 作为 python tor 客户端 – 卡在加载描述符上

    【问题标题】:Stem as python tor client – stuck on loading descriptorsStem 作为 python tor 客户端 – 卡在加载描述符上 【发布时间】:2023-04-02 18:26:01 【问题描述】: 我正在尝试使用 python stem 连接到 tor,同时尝试连接(使用修改后的示例)它只是无…

    Python开发 2023年4月8日
    00
  • Python利用正则表达式从字符串提取数字

    在Python中,可以使用正则表达式从字符串中提取数字。本文将为您详细讲解Python利用正则表达式从字符串提取数字的完整攻略,包括正达式的语法、re块的常用方法和两个示例说明。 正则表达式的语法 在正则表达式中,使用\d匹配数字,使用+表示匹配前一个字符1次或多次,使用*表示匹配前一个字符0次或次,使用?表示匹配前一个字符0次或1次。下面是一些常用的正则表…

    python 2023年5月14日
    00
  • Django 解决开发自定义抛出异常的问题

    要讲解Django解决开发自定义抛出异常的问题,需要从以下三个方面展开: 什么是Django异常处理系统 如何在Django中自定义抛出异常 如何在Django视图函数中捕获和处理异常 1. 什么是Django异常处理系统 Django的异常处理系统是一个大而强大的机制,用于处理应用程序中的各种异常。这个机制可以很方便地处理HTTP请求和响应的异常,它还可以…

    python 2023年5月13日
    00
  • Python matplotlib 绘制散点图详解建议收藏

    Python matplotlib 绘制散点图详解 什么是散点图? 散点图是用于观察两个变量之间关系的一种图表,通常用于研究变量之间的相关性。 如何使用Python的matplotlib库绘制散点图 步骤1:导入matplotlib和numpy库 要使用matplotlib绘制散点图,需要导入matplotlib库和numpy库: import matplo…

    python 2023年5月19日
    00
  • Python Ruby 等语言弃用自增运算符原因剖析

    Python、Ruby等语言弃用自增运算符原因剖析 在Python、Ruby等动态语言中,不再支持自增运算符(++)的使用,其原因主要有以下几点: 1. 语法歧义 在C语言中,自增运算符可以放在变量名前或者后面,但是在不同的语法环境下会产生不同的意义。 例如: int a = 1, b = 0; b = a++; // 等价于 b = a; a = a + …

    python 2023年5月13日
    00
  • Pyqt5 实现多线程文件搜索的案例

    关于“Pyqt5 实现多线程文件搜索的案例”的完整攻略,我将分为以下几个部分进行讲解: 确定需求 安装必要的软件和库 创建Pyqt5界面 编写多线程文件搜索代码 执行程序 接下来,我将详细讲解每个步骤。 1. 确定需求 在开始编码之前,我们需要确定项目的需求。在这个案例中,我们需要实现一个可以在指定目录中查找包含指定字符串的所有文件的功能。 2. 安装必要的…

    python 2023年5月19日
    00
  • python pandas库读取excel/csv中指定行或列数据

    在这里我将为您详细讲解如何使用Python Pandas库读取Excel或CSV文件中的指定行或列数据的完整实例教程。 1. 准备数据 首先,我们需要准备一份Excel或CSV文件作为数据源。这里我以CSV文件为例,假设我们有一个名为“data.csv”的文件,它的内容如下: Name,Age,Gender,City John,25,Male,New Yor…

    python 2023年5月14日
    00
  • Python中的list与tuple集合区别解析

    以下是详细讲解“Python中的List与Tuple集合区别解析”的完整攻略。 在Python中,List和Tuple都是常用的集合类型。虽然它们都可以存储多个元素,但是它们之间是有一些区别的。本文将介绍List和Tuple的区别,并提供两个示例说明。 List和Tuple的区别 1. 可变性 List是可变的,即可以通过添加、删除、修改元素来改变List的…

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