官方文档:http://www.django-rest-framework.org/
model.py class Snippet(models.Model): created = models.DateTimeField(auto_now_add=True) title = models.CharField(max_length=100, blank=True, default='') code = models.TextField() linenos = models.BooleanField(default=False) books = models.ForeignKey('Books', null=True) class Meta: ordering = ('created',) class Books(models.Model): booktitle = models.CharField(max_length=50) snippets = models.ForeignKey('Snippet')
1.序列化
from rest_framework import serializers class UserSerializer(serializers.ModelSerializer): owner = serializers.ReadOnlyField(source="owner.name") # 重写外键字段 class Meta: model = User #表名称 fields = ('id', 'username','snippet') # 要序列化的类
2.views
第一种写法: from snippets.models import Snippet from snippets.serializers import SnippetSerializer from rest_framework import generics class SnippetList(generics.ListCreateAPIView): """自动给你写好get和post""" queryset = Snippet.objects.all() serializer_class = SnippetSerializer class SnippetDetail(generics.RetrieveUpdateDestroyAPIView): """自动给你写好get、put和delete""" queryset = Snippet.objects.all() serializer_class = SnippetSerializer 第二种写法: from rest_framework import viewsets class SnippetViewSet(viewsets.ModelViewSet): queryset = Snippet.objects.all() serializer_class = SnippetSerializer
3.permissions
permissions.py from rest_framework import permissions class IsOwnerOrReadOnly(permissions.BasePermission): """ Custom permission to only allow owners of an object to edit it. """ def has_object_permission(self, request, view, obj): # Read permissions are allowed to any request, # so we'll always allow GET, HEAD or OPTIONS requests. if request.method in permissions.SAFE_METHODS: return True # Write permissions are only allowed to the owner of the snippet. return obj.owner == request.user 上面类的意思是只允许创建者去修改 from snippets.permissions import IsOwnerOrReadOnly 在views.py文件里添加 类的属性: permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly,)
4.Hyperlinked APIs 超链接
外键正向查询: class SnippetSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Snippet fields = ('id', 'title', 'code', 'linenos','books') urls.py文件里必须设置name参数,否则会报错 url(r'^snippets/$',views.SnippetList.as_view(), name='snippet-list'), url(r'^snippets/(?P<pk>[0-9]+)/$',views.SnippetDetail.as_view(), name='snippet-detail'), 反向查询: class BooksSerializer(serializers.HyperlinkedModelSerializer): snippets = serializers.HyperlinkedRelatedField(many=True, view_name="snippet-detail",read_only=True) class Meta: model = Books fields = ('id', 'booktitle')
来源:https://www.cnblogs.com/wspblog/p/8289212.html