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技术站