momo's Blog.

django-rest-framework使用

字数统计: 343阅读时长: 1 min
2020/09/11 Share

前言

记录一下django-rest-framework使用,方便自己查询

安装

使用pip安装

针对python版本以及django版本要求

  • Python (3.5, 3.6, 3.7, 3.8)
  • Django (2.2, 3.0)
    1
    pip install djangorestframework

添加rest_framework应用到 INSTALLED_APPS 配置中

1
2
3
4
INSTALLED_APPS = [
...
'rest_framework',
]

定义Serializers 序列化器

添加模型类

我们在应用下添加一个模型类

1
2
3
4
5
6
from django.db import models
# Create your models here.

class Depart(models.Model):
titel = models.CharField(verbose_name="标题", max_length=32)
count = models.IntegerField(verbose_name="人数")

定义一个 serializers.py 的模块

1
2
3
4
5
6
7
8
from app01 import models
from rest_framework import serializers


class DepartSerializer(serializers.ModelSerializer):
class Meta:
model = models.Depart
fields = "__all__"

其中fields字段可以通过列表的方式指定

1
2
3
4
5
6
7
8
from app01 import models
from rest_framework import serializers


class DepartSerializer(serializers.ModelSerializer):
class Meta:
model = models.Depart
fields = fields = ['titel', 'count']

编写view视图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from rest_framework.views import APIView
from rest_framework.response import Response
from serializers import DepartSerializer


# 需要继承rest_framework的APIView
class DepartView(APIView):
def post(self, request, *args, **kwargs):
ser = DepartSerializer(data=request.data)
if ser.is_valid():
ser.save()
return Response(ser.data, status=status.HTTP_201_CREATED)
return Response(ser.errors, status=status.HTTP_400_BAD_REQUEST)

def get(self, request, *args, **kwargs):
pk = kwargs.get('pk')
if not pk:
result = models.Depart.objects.all()
ser = DepartSerializer(instance=result, many=True)
return Response(ser.data)
else:
result = models.Depart.objects.get(id=pk)
ser = DepartSerializer(instance=result, many=False)
return Response(ser.data)

def delete(self, request, pk):

models.Depart.objects.filter(id=pk).delete()
return Response("删除成功")

def put(self, request, pk):
depart_object = models.Depart.objects.filter(id=pk).first()
if not depart_object:
return Response("数据不存在")

使用 generics 快速生成接口

1
2
3
4
from rest_framework import generics
class SnippetList(generics.ListCreateAPIView, generics.RetrieveUpdateDestroyAPIView):
queryset = models.Depart.objects.all()
serializer_class = DepartSerializer
CATALOG
  1. 1. 前言
  2. 2. 安装
  3. 3. 定义Serializers 序列化器
    1. 3.1. 添加模型类
    2. 3.2. 定义一个 serializers.py 的模块
    3. 3.3. 编写view视图
    4. 3.4. 使用 generics 快速生成接口