1 HTTP简介与应用场景
1.1 报文结构的介绍与分析★★ ★★
用于HTTP协议交互的信息被称为HTTP报文,请求端的HTTP报文叫请求报文,响应端的叫响应报文。
HTTP报文是由报文头部、空行、报文主体组成的。
1、请求报文
HTTP请求报文由:请求行、请求头部、空行、请求体组成
例如:
GET / HTTP/1.1 #请求行
Host: www.enjoytoday.cn #请求头
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://www.enjoytoday.cn/posts/326
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: bdshare_firstime=1466032270994;
JSESSIONID=ADBC8C3DADF6C815D778450C193C6637.ajp13_worker;
#空格
username=hfcai&sex=man #请求体
2、响应报文
HTTP响应报文由 响应行(HTTP版本、状态码、状态消息)、响应头部、空行、响应体4个部分构成
1.2 请求方式的介绍以及应用场景★★★
HTTP协议定义了很多的请求方法,来满足不同的需求
序号 | 方法 | 描述 | 其他 |
---|---|---|---|
1 | GET | 向接口发送请求,获取信息 | 很常用 |
2 | POST | 向接口提交数据,常用来做添加功能 | 很常用 |
3 | PUT | 向接口提交更新数据,用来做更新功能 | 常用 |
4 | DELETE | 想接口发起删除请求,用来做删除功能 | 常用 |
5 | HEAD | 类似于GET请求,只用于获取报头信息 | 不常用 |
相应的在视图中也要写对应请求的处理方法,例如:
class BookView(View):
def get(self, request): #处理 GET请求
pass
def post(self, request): #处理 POST请求
pass
def put(self, request): #处理PUT请求
pass
def delete(self,request): #处理DELETE请求
pass
以上是对HTTP请求的方式做了介绍,接下来我们继续学习 HTTP的响应部分
1.3 常见状态码以及代表的错误信息★★★
客户端发起HTTP请求,那服务端收到了请求以后需要作出响应。
这个响应可能是成功的,也可能是失败的。
HTTP协议已经制定好了一套数字来表示 响应状态,我们成为HTTP状态码
状态码非常多,可以参考 HTTP教程:https://www.w3.org/Protocols/rfc2616/rfc2616.html
常用的几个状态码
状态码 | 描述 | |
---|---|---|
200 | 请求成功,返回成功的响应 | 响应成功 |
204 | 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 | 响应成功 |
301 | 永久移动,请求的资源已被永久的移动到新URI | 重定向 |
302 | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI | 重定向 |
304 | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源 | 重定向 |
400 | 客户端请求的语法错误,服务器无法理解 | 客户端错误 |
401 | 请求要求用户的身份认证 | 客户端错误 |
403 | 服务器理解客户端的请求,但是拒绝执行此请求 | 客户端错误 |
404 | 服务器无法根据请求找到对应资源,一般是请求路径出现 ·错误 | 客户端错误 |
500 | 服务器内部错误,无法完成请求 | 服务端错误 |
504 | 服务器作为网关或代理,未及时从远端服务器获取请求 | 服务端错误 |
505 | 服务器不支持请求的HTTP协议,无法完成处理 | 服务端错误 |
1.4 浏览器的使用方法★★★★
首先先学习一下,如何通过浏览器 这个主要的Web客户端来查看请求与响应。这里以Google浏览器为案例进行讲解演示。
通过快捷键F12 ,或者右键–>查看 打开调试窗口:
可以通过浏览器 清晰看到 我们的HTTP请求报文、HTTP响应报文,在以后的学习中,会经常通过浏览器来查看我们的网络请求与响应。
1.5 postman的使用方法★★★★
Postman是一款功能强大的Web接口和HTTP请求的调试工具。可以发送HTTP支持的任何请求,可以携带各种数据参数。当我们的接口开发完毕后,就可以使用postman这一工具进行调试。
如上所示,我们可以通过postman进行网络请求,可以携带参数、获取响应信息,支持各种请求方式,代替浏览器完成更多的功能。
2 json数据结构与使用方法
首先我们先认识一下什么是json。json的全称是”JavaScript Object Notation”,表示是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。
2.1 json的数据结构★★★★
json有两种表示结构,对象和数组,对应到我们的python语言就是字典与列表。
基本元素:一对key:value构成json的基本元素,元素之间逗号隔开,且json中字符串必须是双引号
对象:一对{}括起来的就是一个json对象,类似于我们的字典。
单对象案例:
{
"id": 3,
"name": "绿色食品"
}
json中,key对应的value值可以是整型、字符串等基本类型,也可以是一个对象类型
{
"id": 3,
"name": "绿色食品"
"info":{
"address":"产自北京市平谷区",
"company":"大自然有限公司"
}
}
数组:一对[]括起来的就是一个json数组,类似我们的列表。
[
{
"id": 3,
"name": "绿色食品"
},
{
"id": 4,
"name": "鞋子"
}
]
2.2 json数据的页面响应★★★
Django提供了专门用来返回JsonResponse的响应类,我们可以通过这个类来返回我们的json数据
1、返回json单个对象,可以直接把一个字典作为参数传递给JsonResponse使用
from django.http.response import JsonResponse
class ProductView(View):
def get(self, request):
book1 = {"name": "Java", "price": "66", "author": "Mrs.Fan"}
return JsonResponse(book1)python
2、返回一个json数组案例
from django.http.response import JsonResponse
class ProductView(APIView):
def get(self, request):
book1 = {"name": "Java", "price": "66", "author": "Mrs.Fan"}
book2 = {"name": "C", "price": "77", "author": "Mrs.Li"}
book3 = {"name": "Python", "price": "88", "author": "Mrs.Liu"}
books = [book1, book2, book3]
return JsonResponse(books,safe=False)
这里注意的是 JsonResponse 如果传递的参数是一个列表,则需要传参safe=False。
3、使用postman进行json案例测试
如上,是用postman工具进行测试,返回我们的json数据。