本文共 1373 字,大约阅读时间需要 4 分钟。
目前,我们的API对谁可以编辑或删除代码段没有任何限制。我们希望有更高级的行为,以确保:
前期的准备工作就不一一介绍了,详情可参考:
开始之前,确保我们已经有一个可以正常访问的api接口了!!!
我们在settings中加入rest framework的相关配置
REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [ # 配置此项为,只有登录认证的管理员才可以访问数据 'rest_framework.permissions.IsAdminUser', # 配置此项为,任何人都可访问数据,但只有管理员才可增加修改数据 # 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' ]}
模型迁移:
python manage.py makemigrations
python manage.py migrate创建新用户:
python manage.py createsuperuser
用户名:admin
密码:admin123
登录后,就可以正常访问api接口了
为让用户名更加直观,给序列化器增加以下内容
修改前:
修改后:
为了实现未经身份验证的请求只有只读权限,认证的身份具有可读可写权限
新建:permissions.py
from rest_framework import permissionsclass IsOwnerOrReadOnly(permissions.BasePermission): """ 自定义权限只允许对象的所有者编辑它。 """ def has_object_permission(self, request, view, obj): # 读取权限允许任何请求, # 所以我们总是允许GET,HEAD或OPTIONS请求。 if request.method in permissions.SAFE_METHODS: return True # 只有该数据的所有者才允许写权限。 return obj.permission == request.user
这样就可以实现上述权限了,但发现post增加数据时,新增的表数据还存在问题
所以还要增加一个.save()
方法
访问IP:
就可以访问所有数据,并看到数据的所属关系,并且利用post增加数据,会自动在permission中增加当前登录的用户
访问IP:1/
如果数据是自己创建的就可以看到自己的数据,并可以修改数据,如果不是,就只有可读权限!!!
转载地址:http://ngren.baihongyu.com/