关于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/