flask web学习之flask与http(二)

文章目录

      • [1. HTTP响应](#1. HTTP响应)

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

1. HTTP响应

1.1 响应报文

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

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

相关推荐
m0_748247552 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
eybk2 小时前
Pytorch+Mumu模拟器+萤石摄像头实现对小孩学习的监控
学习
6.942 小时前
Scala学习记录 递归调用 练习
开发语言·学习·scala
m0_748255023 小时前
前端常用算法集合
前端·算法
真的很上进3 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
web130933203983 小时前
vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法
前端·vue.js·elementui
NiNg_1_2343 小时前
Echarts连接数据库,实时绘制图表详解
前端·数据库·echarts
守护者1704 小时前
JAVA学习-练习试用Java实现“使用Arrays.toString方法将数组转换为字符串并打印出来”
java·学习
学会沉淀。4 小时前
Docker学习
java·开发语言·学习
如若1234 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python