前言
记录一下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
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
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
|