web开发的两种模式:前后端不分离和前后端分离

RestFul API接口设计风格:前后端分离被广泛采用

使用Django基础自定义Rest API接口

DRF框架: 提高开发Rest API接口的效率

web开发的两种模式

前后端不分离:前端看到的效果是由后端进行控制的

缺点:只适用于纯网页的应用。

优点:有利于网站的SEO优化。

DRF框架知识点总结

前后端分离:后端只返回前端所需的数据,至于数据怎么进行展示,由前端自己控制。

优点:可以对接不同类型的客户端。

缺点:不利于SEO优化
DRF框架知识点总结

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

相关文章: