美文网首页Python
Django前后端分离实践之DRF--06

Django前后端分离实践之DRF--06

作者: f050d162bcc1 | 来源:发表于2018-10-21 22:45 被阅读6次

一、认证和权限

目前,我们的API对谁可以编辑或删除代码段没有任何限制。我们希望有更高级的行为,以确保:

  • 代码片段始终与创建者相关联。
  • 只有通过身份验证的用户可以创建片段。
  • 只有代码片段的创建者可以更新或删除它。
  • 未经身份验证的请求应具有完全只读访问权限。

1. 在模型中增加一个字段

  • 我们要做一个只有本人才能修改的权限
    # 操作者
    operator = models.ForeignKey('auth.User')
选区_197

2. 生成迁移文件和执行迁移

  • 解决报错
    这里报错的原因是,它说之前我们已经创建了很多条数据,现在你又给表增加了字段,原来的数据库里面没有这个字段,你又设置默认值,要么你输入1提供默认值,要输入2退出
选区_198 选区_199

3. 去序列化里面把字段给添加上

选区_200
  • 刷新浏览器
选区_001
  • 重写operator 拿出用户名字段
    # 读取用户名
    operator = serializers.ReadOnlyField(source='operator.username')
选区_003 选区_004

4. 通过认证的用户才能修改

  • 导入模块
from rest_framework import permissions
  • 在视图里面添加一个权限(空权限) 


    选区_005
选区_008
  • 退出登录,刷新浏览器
选区_006 选区_007 选区_009

5. 创建自己的权限

  • 创建一个模块
选区_011

from rest_framework import permissions

class IsOwnerOrReadOnly(permissions.BasePermission):
    """
    自定义权限只允许对象的所有者编辑它
    """
    def has_object_permission(self, request, view, obj):
        # 读取权限允许任何请求
        # 所以我们总是允许GET HEAD POTIONS请求
        if request.method in permissions.SAFE_METHODS:
            return True
        # 只有该出版社的录入者才有权限写
        return obj.operator == request.user
  • 创建一个新账号
选区_012
  • 切换账号
选区_014
  • 导入自己的写的权限
from app01.permissions import IsOwnerOrReadOnly
选区_015
  • 因为不是录入者,不能写

相关文章

网友评论

    本文标题:Django前后端分离实践之DRF--06

    本文链接:https://www.haomeiwen.com/subject/pbwizftx.html