码迷,mamicode.com
首页 > 其他好文 > 详细

django rest frame work 初步使用 >> 认证权限

时间:2018-08-21 21:49:46      阅读:540      评论:0      收藏:0      [点我收藏+]

标签:hide   bsp   lap   let   一个   migrate   ural   read   view   

https://q1mi.github.io/Django-REST-framework-documentation/tutorial/4-authentication-and-permissions_zh/

 

1. models.py 表里面加入一列 “operater", 并且重新migrate

技术分享图片
from django.db import models


class Publisher(models.Model):
    name = models.CharField(max_length=32, verbose_name="Publisher Name", unique=True)
    address = models.CharField(max_length=128, verbose_name="Publisher Address")

    operator = models.ForeignKey("auth.User", on_delete=models.CASCADE)

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "Table Publisher"
        verbose_name_plural = verbose_name
models.py

 

2. serializers.py 里面需要再添加一个field, 并且可以对输出进行重写。

技术分享图片
from rest_framework import serializers
from helloworld.models import Publisher

class PublisherSerializer(serializers.ModelSerializer):
    operator = serializers.ReadOnlyField(source="operator.username")

    class Meta:
        model = Publisher
        fields = (
            "id",
            "name",
            "address",
            "operator"
        )
serializers.py

 

3. 新建文件 permissions.py 自定义权限

技术分享图片
from rest_framework import permissions


class IsOwnerOrReadOnly(permissions.BasePermission):
    """
    only allow owner to update
    """

    def has_object_permission(self, request, view, obj):
        # for GET, HEAD, OPTINOS
        if request.method in permissions.SAFE_METHODS:
            return True

        return obj.operator == request.user
permissions.py

 

4. views.py 针对新的新权限以及列进行调整。

技术分享图片
from rest_framework import permissions
from helloworld.permissions import IsOwnerOrReadOnly

class PublisherList(generics.ListCreateAPIView):
    queryset = Publisher.objects.all()
    serializer_class = PublisherSerializer

    # 新建内容
    permissions_classes = (permissions.IsAuthenticated,
                           IsOwnerOrReadOnly)

    # 针对创建时,进行重写某个方法,保证特殊列的写入
    def perform_create(self, serializer):
        serializer.save(operator=self.request.user)


class PublisherDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Publisher.objects.all()
    serializer_class = PublisherSerializer

    # 新建内容
    permissions_classes = (permissions.IsAuthenticated,
                           IsOwnerOrReadOnly)
views.py

 

django rest frame work 初步使用 >> 认证权限

标签:hide   bsp   lap   let   一个   migrate   ural   read   view   

原文地址:https://www.cnblogs.com/shuo-yang0459/p/9514333.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!