DRF框架知识点总结

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
DRF框架-RestAPI接口的核心工作
序列化:将模型对象转换为字典或者json的过程,叫做序列化的过程。
反序列化:将客户端传递的数据保存转化到模型对象的过程,叫做反序列化的过程。

核心:
1. 将数据库数据序列化为前端所需要的格式,并返回;
2. 将前端发送的数据反序列化为模型类对象,并保存到数据库中。
Django RestFrameWork 简介/安装
作用:提高RestAPI接口开发的效率
关键功能:
	序列化器:序列化和反序列化
	类视图,MiXin扩展类:简化视图代码的编写
安装: pip install djangorestframework

在settings.py的INSTALLED_APPS中添加’rest_framework’。

INSTALLED_APPS = [
    ...
    'rest_framework', # 添加
]
DRF框架功能演示
序列化器Serializer-功能&知识点说明
功能:进行数据的序列化和反序列化
使用:首先定义序列化器类

序列化功能:将对象转换字典。
	1.序列化单个对象
	2.序列化多个对象
	3.关联对象的嵌套序列化

反序列化功能:
	数据校验:
		1.基本验证
		2.补充验证
	数据保存
		1.数据新增create
		2.数据更新update
序列化器Serializer-定义&基本使用
定义模型类:

	class 模型类(modles.Model):

		模型字段 = models.字段类型(选项参数)

定义序列化器类:

	from rest_framework import serializers
	class 序列化器类(serializers.Serializer):
    	序列化器字段= serializers.字段类型(选项参数)
        
序列化器类(instance=None,data={
   },**kwargs)
	1.进行序列化操作,将对象传递给instance
    2.进行反序列化操作,将数据传递给data

在tests.py文件中进行演示:

import os

import django
from django.test import TestCase

# Create your tests here.
if not os.environ.get("DJANGO_SETTINGS_MODULE"):
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "drf_demo.settings")

# 让django进行一次初始化
import django
django.setup()

from rest_framework import serializers


class User(object):
    """用户类"""

    def __init__(self, name, age):
        self.name = name
        self.age = age


class
  • 48
    点赞
  • 291
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zyj1189

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值