哈尔滨可以做网站的公司,网络运维工程师项目案例,wordpress 空间安装,阿里云wordpress外网访问不了Flask 是一个灵活而强大的 Web 框架#xff0c;而请求与响应则是构建 Web 应用的核心组成部分。在本文中#xff0c;我们将探讨 Flask 中请求与响应的各种用法#xff0c;包括不同的请求方法、重定向、响应对象、获取查询参数以及文件上传等。
请求
在 Flask 中#xff0…Flask 是一个灵活而强大的 Web 框架而请求与响应则是构建 Web 应用的核心组成部分。在本文中我们将探讨 Flask 中请求与响应的各种用法包括不同的请求方法、重定向、响应对象、获取查询参数以及文件上传等。
请求
在 Flask 中请求是客户端浏览器向服务器发送的消息用于获取某种资源或执行某种操作。我们可以通过不同的方法来处理这些请求。
请求方式
通过使用不同的装饰器直接设置请求方法
from flask import Flaskapp Flask(__name__)app.get(/get_example)
def get_example():return This is a GET request.app.post(/post_example)
def post_example():return This is a POST request.app.delete(/delete_example)
def delete_example():return This is a DELETE request.app.put(/put_example)
def put_example():return This is a PUT request.if __name__ __main__:app.run(debugTrue)
对于不同的请求方式使用不同的装饰器即可进行设置。 通过装饰器 methods 参数设置请求方法
from flask import Flask, requestapp Flask(__name__)# GET 请求方法
app.route(/get_example, methods[GET])
def get_example():return This is a GET request.# POST 请求方法
app.route(/post_example, methods[POST])
def post_example():return This is a POST request.# PUT 请求方法
app.route(/put_example, methods[PUT])
def put_example():return This is a PUT request.# DELETE 请求方法
app.route(/delete_example, methods[DELETE])
def delete_example():return This is a DELETE request.# 支持 GET 和 POST 请求方法
app.route(/get_post_example, methods[GET, POST]) # 支持传入列表实现多个方法
def get_post_example():if request.method GET:return This is a GET request.elif request.method POST:return This is a POST request.if __name__ __main__:app.run(debugTrue) 重定向
在 Web 开发中重定向是一种常见的技术用于将用户从一个 URL 地址重定向到另一个 URL 地址。Flask 提供了多种重定向的方式通过不同的状态码来实现不同的重定向效果。
from flask import Flask, url_for, redirectapp Flask(__name__)app.route(/redirect_example/)
def redirect_example():# 重定向到指定的 URL并返回 301 状态码return redirect(url_for(target_route), code301)app.route(/target_route/)
def target_route():return you get it hereif __name__ __main__:app.run(debugTrue)
在以上示例中使用函数 redirect即可实现对路由的重定向并且可以设置状态码
重定向状态码以及含义
状态码名称含义301永久重定向请求的资源已被永久分配了新的 URL。302发现请求的资源已被临时分配了新的 URL。303查看其他位置对请求的响应可以在不同的 URL 下找到并且应该使用 GET 方法检索请求的资源。307临时重定向请求的资源已被临时移动到另一个位置。308永久重定向请求的资源已被永久移动到另一个位置。
响应
响应是服务器返回给客户端的消息它可以包含文本、JSON 数据、文件等内容。
响应对象
Flask 提供了 make_response() 函数用于创建响应对象我们可以通过这个对象来设置响应的内容和状态码同时 Flask也支持直接响应对应的数据
from flask import make_response# 响应模板
app.route(/)
def index():return render_template(index.html)
# template_folder 指定模板文件夹 默认是同级目录的 templates# 响应字符串
app.route(/string)
def return_string():return Hello, World!# 响应 JSON 数据
app.route(/json)
def return_json():data {message: Hello, World!}return data# return jsonify(data) 的效果一样老版本不支持直接返回必须要用jsonify# 响应元组
app.route(/tuple)
def return_tuple():response (Hello, World!, 200, {Content-Type: text/plain})response2 (Hello, World!, 200, [(Content-Type, text/plain)])response3 (Hello, World!, {Content-Type: text/plain})# 这都是合法的写法return responseif __name__ __main__:app.run(debugTrue) 可以返回一个元组元组中必须至少包含一个项目且项目应当由 (response, status) 、 (response, headers)或者 (response, status, headers)组成。 status的值会重载状态代码 headers是一个由额外头部值组成的列表 或字典 status值会覆盖状态代码 headers可以是一个列表或字典作为额外的消息标头值。 除了返回文本外我们还可以返回 JSON 数据、元组包含响应内容、状态码和头信息、模板等。
自定义响应对象
如果 Flask 提供的响应对象不能满足需求我们还可以自定义响应对象。
from flask import Flask, make_response, Responseapp Flask(__name__)# 使用 response 返回自定义响应对象
app.route(/response)
def custom_response():content Custom Response with responsecode 200headers {Content-Type: text/plain}custom_resp Response(content, code, headers)return custom_resp# 使用 make_response 返回自定义响应对象
app.route(/make_response)
def make_custom_response():content Custom Response with make_responsecode 200headers {Content-Type: text/plain}custom_resp make_response(content, code)custom_resp.headers.extend(headers)return custom_respif __name__ __main__:app.run(debugTrue) 获取查询参数
在处理 GET 请求时我们经常需要获取 URL 中的查询参数。Flask 提供了 request.args 来获取查询参数。
from flask import requestapp.route(/search)
def search():keyword request.args.get(q)return Search keyword: {}.format(keyword)而在处理 POST 请求时则可以使用 request.form来获取对应的参数
app.route(/example_post, methods[POST])
def example_post():# 获取表单中的参数name request.form.get(name)return Hello, {}.format(name)但是无论对于GET请求或者POST请求都可以使用 request.values来获取参数用法与上一致。 文件上传
处理文件上传也是 Web 开发中的常见需求。Flask 提供了 request.files 来获取上传的文件。
from flask import Flask, request, render_templateapp Flask(__name__)app.route(/upload, methods[POST])
def upload_image():if pic not in request.files:return 未上传文件file request.files[pic] # pic是上传参数的keyfile.save(test.png)return 文件上传成功if __name__ __main__:app.run(debugTrue)
结语
通过本文的介绍我们深入了解了 Flask 中请求与响应的多种用法。无论是处理不同的请求方法、实现重定向、创建不同类型的响应对象还是处理查询参数和文件上传Flask 都提供了丰富的功能和灵活的方法使得 Web 开发变得更加简单和高效。希望本文对您有所帮助