10.16django+drf

关于drf权限

.get_object()调用时,对象级别权限由REST框架的通用视图运行。与视图级别权限一样,exceptions.PermissionDenied如果不允许用户对给定对象执行操作,则会引发异常。
如果您要编写自己的视图并要强制执行对象级别权限,或者get_object在通用视图上覆盖该方法,则需要.check_object_permissions(request, obj)在检索到该位置的视图上显式调用该方法。

drf的权限(permissions)

需要在setting中设置

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ]
}

也可以设置自定义的权限校验
自定义权限类要继承Basepermisson类并重写 has_permission 或者has_object_permission 方法
然后再setting中注册

AUTHENTICATION_BACKENDS = (
‘users.views.CustomBackend’, )

例子

from rest_framework.permissions import BasePermission


class CustomBackend(BasePermission):
    message =  '无权限访问'  # 定制错误信息
    def has_permission(self, request, view):
        # 已经过认证
        user = request._request.user
        if user:
            if user.user_type == 1:
                return True
        return False


#使用权限验证
class Permission(object):
    # 利用继承指定权限类
    permission_classes = [CustomBackend,]
drf的认证(AUTHENTICATION)

认证分为 全局认证和局部认证 再使用前都需要再setting中设置

设置全局设置默认身份验证方案

REST_FRAMEWORK = {
‘DEFAULT_AUTHENTICATION_CLASSES’: [
‘rest_framework.authentication.BasicAuthentication’,#框架自带的认证方式
‘rest_framework.authentication.SessionAuthentication’,#框架自带的认证方式
]
}

也可以用APIVIEW自定义验证方案

> from rest_framework.authentication import SessionAuthentication,
> BasicAuthentication from rest_framework.permissions import
> IsAuthenticated from rest_framework.response import Response from
> rest_framework.views import APIView
> 
> 
> class ExampleView(APIView):
>     authentication_classes = [SessionAuthentication, BasicAuthentication]  #设置验证方式
>     permission_classes = [IsAuthenticated]#设置认证方式
> 
>     def get(self, request, format=None):
>         content = {
>             'user': unicode(request.user),  # `django.contrib.auth.User` instance.
>             'auth': unicode(request.auth),  # None
>         }
>         return Response(content)

序列化器关系(Serializer relations)

返回指定的序列化格式

例子:

StringRelatedField
例如,下面的序列化器。

>  class AlbumSerializer(serializers.ModelSerializer):
>     tracks = serializers.StringRelatedField(many=True)
> 
>     class Meta:
>         model = Album
>         fields = ['album_name', 'artist', 'tracks']

将序列化为以下表示形式。

{
    'album_name': 'Things We Lost In The Fire',
    'artist': 'Low',
    'tracks': [
        '1: Sunflower',
        '2: Whitetail',
        '3: Dinosaur Act',
        ...
    ]
}

该字段是只读的。

参数:

many-如果应用于多对多关系,则应将此参数设置为True。

摘自:https://www.django-rest-framework.org/api-guide/relations/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值