django restframework 簡單總結
阿新 • • 發佈:2018-01-15
超鏈接 pre 寫法 users objects lin 查詢 添加 destroy
官方文檔: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')
django restframework 簡單總結