web开发的两种模式:前后端不分离和前后端分离
RestFul API接口设计风格:前后端分离被广泛采用
使用Django基础自定义Rest API接口
DRF框架: 提高开发Rest API接口的效率
web开发的两种模式
前后端不分离:前端看到的效果是由后端进行控制的
缺点:只适用于纯网页的应用。
优点:有利于网站的SEO优化。
前后端分离:后端只返回前端所需的数据,至于数据怎么进行展示,由前端自己控制。
优点:可以对接不同类型的客户端。
缺点:不利于SEO优化
RestFul API接口设计风格介绍
统一接口设计风格:
1.URL地址尽量使用名词,不要出现动词
2.使用不同的请求方式,代表要执行不同的操作
(GET)获取 POST(新增) PUT(修改)DELETE(删除)
不常用:PATCH(修改) HEAD(只返回请求头没有请求体) OPTIONS(获取信息)
3.访问URL地址时,如果有一些过滤的参数,参数可以放到查询字符串中
4.响应数据:
GET /books/:返回所有的图书数据
GET /books/1/:返回id为1的图书数据
POST /books/:将新增的图书数据返回
PUT /books/1/:将修改的图书数据返回
DELETE /books/1:返回空文档
获取|修改:200
新增:201
删除:204
参数有误:400
服务器出错:500
5.响应数据的格式:json
了解:1.域名:使用专有域名
2.版本:将版本信息放在url地址
3.错误:将错误信息返回
4.在访问api接口时,将和接口相关的其他API接口的地址也在响应数据中返回
Django自定义RestAPI
需求:
设计一套符合RestAPI风格的接口,提供以下5个接口:
1. 获取所有图书数据:GET /books/
2. 新增一本图书数据:POST /books/
3. 获取指定的图书数据(根据id):GET /books/(?P<pk>\d+)/
4. 修改指定的图书数据(根据id):PUT /books/(?P<pk>\d+)/
5. 删除指定的图书数据(根据id):DELETE /books/(?P<pk>\d+)/
# 2个类视图
class BookListView(View):
# GET /books/
def get(self, request):
"""
获取所有图书数据:
1. 查询所有图书的数据
2. 将图书的数据进行返回
数据格式:json 状态码:200
"""
# 1. 查询所有图书的数据
books = BookInfo.objects.all() # QuerySet
# 组织数据
books_li = []
for book in books:
book_dict = {
'id': book.id,
'btitle': book.btitle,
'bpub_date': book.bpub_date,
'bread': book.bread,
'bcomment': book.bcomment,
'image': book.image.url if book.image else ''
}
books_li.append(book_dict)
# 2. 将图书的数据进行返回
# 注意点:将list转换为json数据时,需要将safe设置False
return JsonResponse(books_li, safe=False)
# POST /books/
# 参数:客户端传递 btitle,bpub_date,通过json传递
def post(self, request):
"""
新增一本图书数据:
1. 获取参数并进行校验:request.body->decode->json.loads
2. 创建图书并添加到数据库
3. 将新增的图书数据进行返回
数据格式:json 状态码:200
"""
pass
class BookDetailView(View):
# GET /books/(?P<pk>\d+)/
def get(self, request, pk):
"""获取指定的图书数据(根据id)"""
pass
# PUT /books/(?P<pk>\d+)/
def put(self, request, pk):
"""修改指定的图书数据(根据id)"""
pass
# DELETE /books/(?P<pk>\d+)/
def delete(self, request, pk):
"""删除指定的图书数据(根据id)"""
pass