flask web学习之flask与http(二)

文章目录

      • 1. HTTP响应
        • 1.1 响应报文
        • 1.2 常见HTTP状态码
        • 1.3 在flask中如何生成响应
          • 1.3.1重定向
          • 1.3.2错误响应
        • 1.4响应格式

在flask程序中,客户端发出的请求触发相应的视图函数,获取返回值会作为响应的主体,最后生成完整的响应,即响应报文。

1. HTTP响应

1.1 响应报文

响应报文主要由协议版本、状态码、原因短语、响应首部和响应主体组成。

  • 协议版本:响应报文的开头通常包含协议版本信息,用于标识使用的通信协议的版本。如HTTP/1.1。
  • 状态码:状态码是一个三位数字的代码,用于表示请求的处理结果。常见的状态码有200(成功)、404(未找到)、500(服务器内部错误)等。
  • 原因短语:原因短语是对状态码的文本解释,用于提供关于请求处理结果的更详细的信息。
  • 响应首部:响应首部包含了一些额外的信息,如响应内容的类型、长度等。这些信息对于理解响应内容非常重要。
  • 响应主体:响应主体是实际的数据内容,即服务器返回给客户端的具体信息。
1.2 常见HTTP状态码
类型状态码原因短语说明
成功200OK请求被正常处理
成功201Created请求被处理,并创建了一个新资源
成功204No Content请求处理成功,但无内容返回
重定向301Move Permanently永久重定向
重定向302Found临时性重定向
重定向304Not Modified请求的资源未被修改,重定向缓存的资源
客户端错误400Bad Request表示请求无效,即请求报文中存在错误
客户端错误401Unauthorized类似403,表示请求资源未授权
客户端错误403Forbidden表示请求资源被服务器拒绝访问
客户端错误404Not Found表示服务器上找不到请求的资源或URL无效
服务器端错误500Internal Server Error服务器内部发生错误
1.3 在flask中如何生成响应

响应大部分内容由服务器处理,大多数情况下,我们只负责返回主体内容。响应在flask中使用Response对象表示。

Flask会先判断是否可以找到与请求url相匹配的路由,如果没有返回404。如果找到,就会调用对应的视图函数,视图函数的返回值构成了响应报文的主题内容,正确返回的状态码为200。

1.3.1重定向

如果你访问http://localhost:5000/hi,你会发现页面加载后地址栏中的URL变成了http://localhost:5000/hellp。这种行为被称为重定向,你可以理解为网页跳转。

代码示例:

from flask import Flask, redirect, url_for@app.route('/hello')
def hello():	# 直接返回网页return redirect('/hi')@app.route('/hi')
def hi():return redirect(url_for('hello'))
1.3.2错误响应

如果你访问http://localhost:5000/brew/coffee,会获得一个418错误响应(I’m a teapot)

大多数情况下,flask可以自动处理常见的错误响应。Http错误对应的异常类在werkzeug的werkzeug.exceptions模块中被定义,抛出这些异常即可返回对应的错误响应。如果你想手动返回错误响应,你可以使用flask提供的abort()函数。

from flask import Flask, abort@app.route('/404')
def not_found():abort(404)

abort 函数不需要使用return返回,但他之后的代码也不会在执行。

1.4响应格式
  1. 纯文本
    MIME类型:text/plain
    当MIME类型设置为纯文本时,浏览器会以文本形式显示返回值。
  2. HTML
    MIME类型:text/html
    当MIME类型设置为text/html时,浏览器会将返回值渲染成html。
  3. XML
    MIME类型:application/xml
    XML是指Extensible Markup Language(可扩展标记语言),他是一种简单灵活的文本格式,被设计用来存储和交换数据。XML和HTML的不同之处在于HTML的标签用于显示内容,而XML的标签只用于定义数据。
  4. JSON
    MIME类型:application/json
    JSON是指JavaScript object Notation(Javascript 对象表示法),是一种流行的、轻量的数据交换格式。他的出现是为了弥补xml的各种不足。在Python中,通过引入json模块,调用json.dumps()方法将字典、列表或元组序列化为JSON字符串。Flask提供了包装这些方法的jsonify()函数,使操作更方便。
from flask import jsonify@app.route('/foo')
def foo():return jsonify(name="hello", gender="45")return jsonify({"name": "hello", "gender": "45")return jsonify(message="error"), 500

flask获取json数据可以使用request.get_json()方法和request.json属性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/587104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#多线程(补充)

C#多线程(补充) C# 多线程的补充在C#中使用多线程1. Thread类2. 线程池3. Parallel类4. Task类启动任务接收任务的返回值同步调用指定连续任务任务的层次结构 5. BackgroundWorker控件 C# 多线程的补充 在C#中使用多线程 1. Thread类 使用Thread类通过…

ASM-HEMT射频建模

关于ASM-HEMT RF模型 ASM-HEMT是指用于氮化镓高迁移率电子晶体管的先进SPICE模型。该模型于2018年由紧凑模型委员会(CMC)进行了标准化。 ASM-HEMT模型涵盖了氮化镓器件在射频(RF)和功率电子应用中的应用。模型手册提供了模型方程…

力扣每日一题day39[105. 从前序与中序遍历序列构造二叉树]

思路 根据两个顺序构造一个唯一的二叉树,以 后先序数组的第一个元素为切割点,先切中序数组,根据中序数组,反过来在切先序数组。一层一层切下去,每次先序数组第一个元素就是节点元素。 第一步:如果数组大小…

【docker】—— Docker 简介

目录 (一)容器技术发展史 1、Jail 时代 2、云时代 3、云原生时代 (二)编排与容器的技术演进之路 1、DockerClient 2、RUNC&Shim 3、CRI-Containerd 4、CRI-O 5、Containerd (三)Docker 简介…

【已解决】 ubuntu apt-get update连不上dl.google.com

在终端使用apt-get update时,连接dl.google.com超时,一直卡在0%,原因是当前ip无法ping到google(墙)。 解决方法: dl.google.com国内可用IP 选一个,然后按以下命令操作: cd ~ vim …

AI人工智能大模型讲师叶梓《基于人工智能的内容生成(AIGC)理论与实践》培训提纲

【课程简介】 本课程介绍了chatGPT相关模型的具体案例实践,通过实操更好的掌握chatGPT的概念与应用场景,可以作为chatGPT领域学习者的入门到进阶级课程。 【课程时长】 1天(6小时/天) 【课程对象】 理工科本科及以上&#xff0…

图像分割实战-系列教程2:Unet系列算法(Unet、Unet++、Unet+++、网络架构、损失计算方法)

图像分割实战-系列教程 总目录 语义分割与实例分割概述 Unet系列算法 1、Unet网络 1.1 概述 整体结构:概述就是编码解码过程简单但是很实用,应用广起初是做医学方向,现在也是 虽然用的不是很多,在16年特别火,在医学…

迅软科技助力高科技防泄密:从华为事件中汲取经验教训

近期,涉及华为芯片技术被窃一事引起广泛关注。据报道,华为海思的两个高管张某、刘某离职后成立尊湃通讯,然后以支付高薪、股权支付等方式,诱导多名海思研发人员跳槽其公司,并指使这些人员在离职前通过摘抄、截屏等方式…

自动化测试系列 之 Python单元测试框架unittest

一、概述 什么是单元测试 单元测试是一种软件测试方法,是测试最小的可测试单元,通常是一个函数或一个方法。 在软件开发过程中,单元测试作为一项重要的测试方法被广泛应用。 为什么需要单元测试 单元测试是软件开发中重要的一环&#xf…

11. 标准库浏览 – Part II

11. 标准库浏览 – Part II 第二部分包含了支持专业编程工作所需的更高级的模块,这些模块很少出现在小脚本中。 11.1. 输出格式 repr 模块为大型的或深度嵌套的容器缩写显示提供了 repr() 函数的一个定制版本: >>> impor…

C++之std::decay

1.简介 std::decay是C11之后引进的模板编程工具&#xff0c;它的主要作用是将给定的类型T转换为它的“衰变”类型。这个“衰变”类型是指去除类型T的所有引用、常量和易变性限定符&#xff0c;以及将所有数组和函数转换为对应的指针类型后得到的类型&#xff1b;在头文件 <…

c++哈希表——超实用的数据结构

文章目录 1. 概念引入1.1 整数哈希1.1.1 直接取余法。1.1.2 哈希冲突1.1.2.1 开放寻址法1.1.2.2 拉链法 1.2 字符串哈希 3.结语 1. 概念引入 哈希表是一种高效的数据结构 。 H a s h Hash Hash表又称为散列表&#xff0c;一般由 H a s h Hash Hash函数(散列函数)与链表结构共同…

docker学习——汇总版

历时一个月将docker系统的学习了一下&#xff0c;并且记录了详细的笔记和实践过程。 希望能对工作需要的小伙伴们有所帮助~ docker基础篇 docker学习&#xff08;一、docker与VM对比&#xff09; docker学习&#xff08;二、安装docker&#xff09; docker学习&#xff08;…

用通俗易懂的方式讲解大模型:一个强大的 LLM 微调工具 LLaMA Factory

LLM&#xff08;大语言模型&#xff09;微调一直都是老大难问题&#xff0c;不仅因为微调需要大量的计算资源&#xff0c;而且微调的方法也很多&#xff0c;要去尝试每种方法的效果&#xff0c;需要安装大量的第三方库和依赖&#xff0c;甚至要接入一些框架&#xff0c;可能在还…

【INTEL(ALTERA)】使用 ReadFile 读取时出错: juart-terminal: error: 从 STDIO 收集输入

说明 由于 英特尔 Quartus Prime Pro Edition 软件版本 22.4 中存在一个问题&#xff0c;您在从 Windows 操作系统上的 Nios V 命令外壳输入字符时可能会看到此错误&#xff1a; 使用 ReadFile 读取时出错&#xff1a; juart-terminal&#xff1a; error&#xff1a; 从 STDI…

机器学习(二) -- 数据预处理(3)

系列文章目录 机器学习&#xff08;一&#xff09; -- 概述 机器学习&#xff08;二&#xff09; -- 数据预处理&#xff08;1-3&#xff09; 未完待续…… 目录 前言 tips&#xff1a;这里只是总结&#xff0c;不是教程哈。本章开始会用到numpy&#xff0c;pandas以及matpl…

亚信安慧AntDB数据库引领数字时代通信创新

在数字经济与实体经济深度融合的时代&#xff0c;通信行业正迎来前所未有的新机遇。特别是在中国信通院的预测中&#xff0c;2027年5G专网市场规模预计将达到802亿元&#xff0c;呈现出显著的增长态势&#xff0c;年复合增长率高达42%。 亚信安慧AntDB数据库一直致力于紧跟科技…

不同角度深入探讨Maya和Blender这两款软件的差异

当我们面对三维建模软件的选择时&#xff0c;许多初学者可能会感到迷茫。今天&#xff0c;我们将从不同角度深入探讨Maya和Blender这两款软件的差异&#xff0c;特别是对于游戏建模领域的用户来说&#xff0c;这将有助于您更好地理解两者之间的区别。 软件授权与开发背景&#…

QT上位机开发(倒计时软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 倒计时软件是生活中经常遇到的一种场景。比如运动跑步&#xff0c;比如学校考试&#xff0c;比如论文答辩等等&#xff0c;只要有时间限制规定的地…

Debezium发布历史36

原文地址&#xff1a; https://debezium.io/blog/2018/07/26/debezium-0-9-0-alpha1-released/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Debezium 0.9 Alpha1 和 0.8.1 发布 七月 26, 2018 作者&#xff…