• django restframework 简单总结


    官方文档: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')
  • 相关阅读:
    android学习---ListView
    android学习---ViewStub惰性装载控件
    android学习---TabHost
    微信小程序二维码带参数
    as
    niginx高性能原因
    Nginx动态反向代理1
    Niginx反向代理负载均衡
    jmeter测试,定制化内嵌tomcat调优
    Git通过密钥对远程仓库上传和更新详细操作
  • 原文地址:https://www.cnblogs.com/wspblog/p/8289212.html
Copyright © 2020-2023  润新知