【flask入门系列】flask处理请求和处理响应

简介: 上一节我写了flask获取路径参数以及转换器的使用,这节我们来讲如何获取其他地方的参数以及flask如何处理响应。

📋 个人简介

  • 💖 作者简介:大家好,我是阿牛。😜
  • 📝 博主的个人网站:阿牛的博客小屋🔥

前言

上一节我写了flask获取路径参数以及转换器的使用,这节我们来讲如何获取其他地方的参数。

flask处理请求之request对象

如果想要获取其他地方的参数,可以通过Flask提供的request对象来读取,
不同位置的参数都存放在request的不同属性中,可以看下面的表格:

属性 说明 类型
data 记录请求的数据,并转换为字符串 *
form 记录请求中的表单数据 MultDict
args 记录请求中的查询参数 MultDict
cookies 记录请求中的cookies信息 Dict
headers 记录请求中的报文头 EnvironHeaders
method 记录请求使用的http方法 GET/POST
url 记录请求的URL地址 string
files 记录请求上传的文件 *

例如,想要获取请求/articles?channel_id 的参数,可以按如下方式使用:

#导入Flask类和request对象
from flask import Flask,request

app = Flask(__name__)

@app.route('/articles')
def get_articles():
    channel_id = request.args.get('channel_id')
    return 'you want get articles of channel {}'.format(channel_id)

在这里插入图片描述

不同于django,django的requset对象必须是视图函数的第一个参数,而Flask不同,我们需要用 from flask import request,并且不需要在视图函数参数中写request。

上传图片

客户端上传图片,并保存到服务器中

@app.route('/upload',methods=['POST'])
def upload_files():
    f = request.files['pic']  # pic为文件名
    # with open('./demo.png','wb') as new_file:
    #     new_file.write(f.read())
    f.save('./demo.png') # 保存图片  save()方法是框架自带的快速保存文件的方法
    return 'ok'

这个是存储上传的文件的路由和视图,还可以写一个提交文件的form表单对应的html,然后后端给个返回这个html文件的路由和视图,表单将文件提交到上面这个路由就行,这里先不写这个实现,大家可以用postman这款软件自己提交图片到这个路径测试一下就可以了,当你在做前后端结合的项目的时候这些东西都会慢慢掌握!

处理响应

1.返回模板 render_template

使用 render_template 方法渲染模板并返回
例如,新建一个模板index.html,放在templates目录下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

</head>
<body>
    <div>{{ my_str }}</div>
    <div>{{ my_int }}</div>
</body>
</html>

代码中的{{ }}为jinja2模板语法。

from flask import Flask,render_template
app = Flask(__name__)

@app.route('/')
def index():
    mystr = "hello aniu"
    mint = 20
    return render_template('index.html',my_str=mystr,my_int=mint)

在这里插入图片描述
跟django不同的是,返回到前端的参数是直接放到 render_template 方法中的,而django是封装成字典,当然,利用python 的语法,我们也可以将其封装成字典。

@app.route('/')
def index():
    data = {
        'my_str':'hello aniu',
        'my_int':20
    }
    return render_template('index.html',**data)

**data会将字典转换成独立的参数,相当于下面这行代码:

 return  render_template('index.html',my_str='hello aniu',my_int=20)

2.重定向 redirect

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

app.route('/demo1')
def demo1():
    return redirect("https://www.aniu.space/")

3.返回JSON

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

@app.route('/demo2')
def demo2():
    json_dict = {
        "user_id":10,
        "user_name":"aniu"
    }
    return jsonify(json_dict)

jsonify()跟json模块中的json.dumps()的区别:

1.json.dumps()只是将字典转换成了json字符串,并没有改变HTTP响应报文中的Content-Type。
2.jsonify()不仅将字典转换为json字符串,而且将HTTP响应报文中的Content-Type值改为了application/json.

在这里插入图片描述

4.自定义状态吗和响应头

1.元组方式

可以返回一个元组,这样的元组必须是(response,status,headers)的形式,且至少包含一个元素。 status 值会覆盖状态代码, headers 可以是一个列表或字典,作为额外的消息标头值。

@app.route('/demo3')
def demo2():
    return ('状态码666',666,{'aniu':'hahaha'})

在这里插入图片描述

2.make _ response 方式

from flask import Flask,make_response
app = Flask(__name__)

@app.route('/demo4')
def demo4():
    resp = make_response("make_response测试")
    resp.headers['aniu'] = 'hahaha'
    resp.status = "404 not found"
    return resp

在这里插入图片描述

结语

如果你觉得博主写的还不错的话,可以关注一下当前专栏,博主会更完这个系列的哦!也欢迎订阅博主的其他好的专栏。

相关文章
|
3月前
|
NoSQL Redis UED
揭秘!Flask如何携手Celery,让异步任务处理不再是难题,打造极速响应的Web应用新纪元!
【8月更文挑战第31天】在Web开发中,Flask与Celery的结合为异步任务处理提供了强大支持。Flask作为轻量级Web框架,以其简洁灵活著称;而Celery则是一个分布式任务队列系统,擅长处理耗时任务。二者结合,Flask专注于处理Web请求,Celery则在后台异步执行复杂任务,如发送邮件或调用外部API。这种方式不仅提升了应用性能和响应速度,还优化了用户体验。下面的示例展示了如何在Flask应用中集成Celery以实现异步任务处理。
113 0
|
22天前
|
前端开发 JavaScript 数据库连接
一、Flask入门介绍
一、Flask入门介绍
37 1
|
22天前
|
JSON 中间件 数据格式
五、Flask的请求和响应方法与常用技巧
五、Flask的请求和响应方法与常用技巧
55 0
|
3月前
|
JSON 前端开发 API
[flask]统一API响应格式
[flask]统一API响应格式
|
3月前
|
数据库 关系型数据库 MySQL
惊!Hibernate与MySQL的绝密优化技巧大揭秘,让你的数据库飞起来!
【8月更文挑战第31天】在企业应用开发中,结合使用持久层框架Hibernate与数据库管理系统MySQL可显著提升数据库交互效率。本文探讨了多项优化策略,包括配置二级缓存、采用单向关联减少JOIN操作、优化HQL查询语句以及合理使用MySQL索引。通过具体示例,文章详细讲解了如何实施这些优化措施,以期为企业应用提供更高效稳定的数据支持。
54 0
|
6月前
|
前端开发 数据库 Python
使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
【1月更文挑战第13天】使用 Python 的 Web 框架(如 Django 或 Flask)来建立后端接口,用于处理用户的请求,从数据库中查找答案并返回给前端界面
241 7
|
5月前
|
JSON API 数据格式
如何使用Flask request对象处理请求
在 Flask 中,request对象是处理 HTTP 请求的重要工具之一。它提供了许多属性和方法,可以帮助我们获取请求的相关信息和数据。本文将向你介绍request对象的常用方法以及如何在 Flask 应用程序中使用它。
93 3
|
6月前
|
数据库连接 Python
Flask 框架入门与实践:构建你的第一个 Web 应用
【5月更文挑战第18天】本文介绍了使用 Flask 框架构建第一个 Web 应用的步骤。首先通过 `pip install Flask` 安装框架,然后编写基本的 Python 代码创建应用,包括定义路由和响应。示例展示如何显示 &quot;Hello, World!&quot;,并扩展到显示用户信息的功能。利用模板(如 `index.html`)可使页面更丰富。随着学习深入,可以利用 Flask 的更多特性,如表单处理和数据库连接,来构建更复杂的 Web 应用。本文旨在激发读者对 Flask 和 Web 开发的兴趣,鼓励不断探索和实践。
135 7
|
6月前
|
网络架构 Python
在Flask中,如何定义路由并处理HTTP请求的不同方法(GET、POST等)?
【4月更文挑战第25天】在Flask中,使用`@app.route()`装饰器定义路由,如`/hello`,处理GET请求返回&#39;Hello, World!&#39;。通过添加`methods`参数,可处理不同HTTP方法,如POST请求。单一函数可处理多种方法,通过检查`request.method`区分。动态路由使用 `&lt;variable_name&gt;` 传递URL变量到视图函数。这些基础构成处理HTTP请求的Flask应用。
96 1
|
6月前
|
JSON 数据格式 Python
如何在Flask框架中定义路由和处理请求?
【4月更文挑战第18天】在Flask框架中,创建应用实例、定义路由和处理请求涉及5个步骤:1) 导入Flask并实例化应用;2) 使用`app.route()`装饰器定义路由,指定URL和HTTP方法;3) 编写视图函数处理请求逻辑;4) 视图函数返回响应内容,Flask会自动转换格式;5) 用`app.run()`启动服务器。
92 3