ANSHENG'S BLOG
通过django-rest-framework中的status模块来学习HTTP状态码
# django# python# djangorestframeworkpublishDate · 2018-12-16 / lastEditedTime · 2022-04-06 04:49:00

Django下面有一个特别实用的框架,就是django-rest-framework,用它你可以写出更符合restful标准的 api,本篇会通读django-rest-framework下的status模块来学习http返回的状态码是如何定义的,如果你正在写API相关的接口,本篇文章对你会有一定的帮助,希望你能够通读下去。

在开始之前我们需要安装一下django-rest-framework的框架:

pip install djangorestframework

状态码范围的定义

HTTP状态码分为1xx,2xx,3xx,4xx,5xx,那么每个范围代表什么意思呢?如下表,我已经把它列出来了

然而,在status模块中,为我们提供了几个方法用来验证此状态码是否是这个错误,比如说,我使用requests模块请求了某个网站,然后我要判断是否请求成功,因为要根据不同的结果做不同的事情,实例代码如下:

from rest_framework import status import requests # 定义一个URL URL = '<https://ansheng.me>' # 发送一次请求 result = requests.get(URL) # 如果返回值是成功的状态码就输出 if status.is_success(result.status_code): print('请求成功!') # 在发送一个请求 ret = requests.get(URL + '/hello') # 如果返回值是客户端错误的就输出 if status.is_client_error(ret.status_code): print('客户端出错!')

返回结果如下:

/Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5 /Users/ansheng/MyPythonCode/code.py 请求成功! 客户端出错!
  • 源码是怎么干的?

如果你要问我是怎么知道状态码范围的定义的,那么我只能告诉你,源码告诉我了,所以我知道了。

def is_informational(code): return code >= 100 and code <= 199 def is_success(code): return code >= 200 and code <= 299 def is_redirect(code): return code >= 300 and code <= 399 def is_client_error(code): return code >= 400 and code <= 499 def is_server_error(code): return code >= 500 and code <= 599

常用的HTTP状态码

发现如果要一个一个的说明每个状态码是干什么使的,会浪费很多的精力去看这些不是那么重要的问题,所以我会把几个常用的状态码列举出来,然后剩下的我会推荐几篇文章,如果你真的感兴趣(虽然不推荐这么做,浪费时间)

推荐的一些资源。