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

简介: 一、认证和权限目前,我们的API对谁可以编辑或删除代码段没有任何限制。我们希望有更高级的行为,以确保:代码片段始终与创建者相关联。只有通过身份验证的用户可以创建片段。

一、认证和权限

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

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

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

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

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

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

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

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

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

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


    img_9287f58e76125368b1b4c980c8cc07e1.png
    选区_005
img_78a6ac02afd5afaa027e5805a39fe020.png
选区_008
  • 退出登录,刷新浏览器
img_2ad3bb5d00988c112da8745aa84e9108.png
选区_006
img_427d0ff72634df5b095bcda45420d729.png
选区_007
img_640e1641c8a71502acca231fc327ebc2.png
选区_009

5. 创建自己的权限

  • 创建一个模块
img_c6867b28abd3de2c4b8db89a8d4e3018.png
选区_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
  • 创建一个新账号
img_a1737d860434e50ba3bf56c1288d0d09.png
选区_012
  • 切换账号
img_d87d47eee231352af709d8cf18247786.png
选区_014
  • 导入自己的写的权限
from app01.permissions import IsOwnerOrReadOnly
img_5764e4094b3c8aa0c94a262c57aa1e21.png
选区_015
  • 因为不是录入者,不能写
目录
相关文章
|
2月前
|
Python API 网络架构
Django实践-10RESTful架构和DRF入门
Django实践-10RESTful架构和DRF入门
Django实践-10RESTful架构和DRF入门
|
2月前
|
中间件 程序员 开发工具
Django实践-08中间件的应用
Django实践-08中间件的应用
Django实践-08中间件的应用
|
5天前
|
前端开发 JavaScript API
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
【7月更文挑战第17天】现代Web开发趋势中,前后端分离配合WebSocket满足实时通信需求。Django Channels扩展了Django,支持WebSocket连接和异步功能。通过安装Channels、配置设置、定义路由和消费者,能在Django中实现WebSocket交互。前端使用WebSocket API连接后端,实现双向数据流,如在线聊天功能。集成Channels提升Web应用的实时性和用户体验,适应实时交互场景的需求。**
25 6
|
3天前
|
安全 API 网络安全
Django RESTful API安全实践
【7月更文挑战第19天】构建安全的Django RESTful API需要综合考虑多个方面,包括身份验证与授权、数据验证与清洗、安全的HTTPS连接、限制请求频率以及审计与日志记录等。通过实施这些安全实践,可以有效地保护API服务免受各种安全威胁的侵害,确保用户数据的安全性和服务的可用性。开发者在开发RESTful API时,应始终将安全性放在首位,确保API服务的安全可靠。
|
1月前
|
存储 监控 调度
Django中的定时任务与后台任务队列的实践
【6月更文挑战第10天】在Django中实现定时任务和后台任务队列,可以使用Celery+Beat进行定时任务,Django Q处理后台任务。Celery配置包括设置Broker和Result Backend,创建Celery实例及任务。Django Q则涉及安装、配置ORM和创建任务。通过`async_task`将任务放入队列。注意性能、资源、安全和错误处理。使用时需考虑认证、输入验证、日志监控、部署策略和测试质量保障。
20 3
Django中的定时任务与后台任务队列的实践
|
26天前
|
安全 API 数据安全/隐私保护
Django REST framework安全实践:轻松实现认证、权限与限流功能
Django REST framework安全实践:轻松实现认证、权限与限流功能
|
26天前
|
JSON 前端开发 API
Django API开发实战:前后端分离、Restful风格与DRF序列化器详解
Django API开发实战:前后端分离、Restful风格与DRF序列化器详解
|
26天前
|
JSON 搜索推荐 数据库
Django REST framework数据展示技巧:分页、过滤与搜索的实用配置与实践
Django REST framework数据展示技巧:分页、过滤与搜索的实用配置与实践
|
1月前
|
中间件 数据库 数据安全/隐私保护
Django框架的深入探索与实践
本文介绍了Django,一个流行的Python Web框架,以其优雅设计和强大功能吸引开发者。Django遵循MVC模式,提供URL路由、模板引擎和ORM等核心组件,强调高效简洁的开发方式。文中详细阐述了Django的安装配置过程,核心组件包括URL路由、视图模板和模型ORM。此外,还探讨了Django的表单处理、用户认证、中间件和信号等进阶应用。Django凭借其不断发展的特性和全面的Web开发解决方案,持续受到开发者的青睐。【6月更文挑战第8天】
28 4
|
26天前
|
存储 安全 数据库
Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践
Django ORM深度游:探索多对一、一对一与多对多数据关系的奥秘与实践