Django API 开发:博客系统的权限管理(中)

简介: 安全性是任何网站的重要组成部分,但对于 Web API 而言则至关重要。 目前,我们的 Blog API 允许任何人进行完全访问。 没有任何限制; 任何用户都可以做任何极其危险的事情。 例如,匿名用户可以创建,阅读,更新或删除任何博客文章。 他们甚至没有创造一个! 显然,我们不希望这样做。

AllowAny

当前,任何匿名非授权用户都可以访问我们的 PostList 端点。 之所以知道这一点,是因为即使我们尚未登录,也可以看到我们的单个博客文章。 更糟糕的是,任何人都有权创建,编辑,更新或删除帖子!


在详细信息页面 http://127.0.0.1:8000/api/v1/1/ 上,该信息也是可见的,任何随机用户都可以更新或删除现有博客文章。



之所以仍然可以看到“发布列表”终结点和“详细列表”终结点,是因为我们之前在 settings.py 文件中将项目的项目级别权限设置为 AllowAny。 简要提醒一下,它看起来像这样:

# blog_project/settings.py
REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': [
    'rest_framework.permissions.AllowAny', 
    ]
}

视图层权限

我们现在想要的是将 API 访问限制为经过身份验证的用户。 我们可以在多个地方执行此操作-项目级,视图级或对象级-但是由于目前我们只有两个视图,因此我们从那里开始,并为每个视图添加权限。


在您的 posts/views.py文件中,从 Django REST 框架的顶部导入权限,然后向每个视图添加一个 permission_classes字段。

# posts/views.py
from rest_framework import generics, permissions # new
from .models import Post
from .serializers import PostSerializer
class PostList(generics.ListCreateAPIView): 
    permission_classes = (permissions.IsAuthenticated,) # new 
    queryset = Post.objects.all()
    serializer_class = PostSerializer
class PostDetail(generics.RetrieveUpdateDestroyAPIView): 
    permission_classes = (permissions.IsAuthenticated,) # new 
    queryset = Post.objects.all()
    serializer_class = PostSerializer


这就是我们所需要的。 通过 http://127.0.0.1:8000/api/v1/ 刷新可浏览的 API。 看看发生了什么!


我们不再看到我们的“帖子列表”页面。 取而代之的是,由于我们尚未登录,因此会收到不友好的 HTTP 403 禁止状态代码。由于我们没有权限,因此可浏览的 API 中没有表格可以编辑数据。



因此,目前只有登录的用户可以查看我们的 API。 如果您使用超级用户或 testuser 帐户重新登录,则可以访问 API 端点。


但是,请考虑一下随着 API 复杂性的增长会发生什么。 将来我们可能会有更多的视图和终点。 如果我们要在整个 API 中设置相同的权限设置,则向每个视图添加专用的 permission_class似乎是重复的。


最好只在项目级别更改一次权限,而不是对每个视图都进行一次更改,这会更好吗?

项目级别权限

此时,您应该点头。 在项目级别设置严格的权限策略并在视图级别根据需要放宽策略是一种更简单,更安全的方法。 这就是我们要做的。


幸运的是,Django REST Framework 随 附了许多我们可以使用的内置项目级权限设置,包括:


  • AllowAny-任何经过身份验证的用户都具有完全访问权限
  • IsAuthenticated-只有经过身份验证的注册用户才能访问
  • IsAdminUser-只有管理员/超级用户有权访问
  • IsAuthenticatedOrReadOnly-未经授权的用户可以查看任何页面,但只能查看经过身份验证的用户具有写,编辑或删除权限


要实施这四个设置中的任何一个,都需要更 DEFAULT_PERMISSION_CLASSES 设置和刷新我们的 Web 浏览器。 而已!


让我们切换到 IsAuthenticated ,这样只有经过身份验证或登录的用户才能查看 API。


更新 blog_project/settings.py,如下:

# blog_project/settings.py
REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated', # new
    ]
}


现在返回到 views.py 文件,并删除我们刚刚进行的权限更改。

# posts/views.py
from rest_framework import generics
from .models import Post
from .serializers import PostSerializer
class PostList(generics.ListCreateAPIView): 
    queryset = Post.objects.all() 
    serializer_class = PostSerializer
class PostDetail(generics.RetrieveUpdateDestroyAPIView): 
    queryset = Post.objects.all()
    serializer_class = PostSerializer


如果刷新“发布列表”和“详细列表” API 页面,您仍将看到相同的 403 状态代码。 现在,我们要求所有用户都必须先进行身份验证,然后才能访问 API,但是我们也始终可以根据需要进行其他视图级更改。

相关文章
|
5月前
|
数据采集 机器学习/深度学习 搜索推荐
利用通义大模型构建个性化推荐系统——从数据预处理到实时API部署
本文详细介绍了基于通义大模型构建个性化推荐系统的全流程,涵盖数据预处理、模型微调、实时部署及效果优化。通过采用Qwen-72B结合LoRA技术,实现电商场景下CTR提升58%,GMV增长12.7%。文章分析了特征工程、多任务学习和性能调优的关键步骤,并探讨内存优化与蒸馏实践。最后总结了大模型在推荐系统中的适用场景与局限性,提出未来向MoE架构和因果推断方向演进的建议。
833 11
|
4月前
|
JSON 搜索推荐 算法
利用API提升电商用户体验:个性化推荐系统
在电商竞争激烈的当下,个性化推荐系统成为提升用户粘性与转化率的关键。本文详解如何通过API集成高效接入先进推荐算法,实现实时精准推荐,优化用户体验,提升业务增长。
201 0
|
2月前
|
算法 API 数据库
生鲜电商技术实践:基于保质期API的自动下架系统保障食品安全
基于保质期提醒API与自动化工作流,实现生鲜商品临期智能预警与自动下架。通过设定差异化预警阈值(如蔬菜2天、冷冻品7天),每日扫描数据库并触发下架指令,确保食品安全合规,降低损耗与客诉,提升运营效率。
212 0
|
3月前
|
监控 安全 API
京东 API 接口:打造高效京东店铺订单处理系统
在电商竞争激烈的环境下,京东店铺需提升订单处理效率以优化用户体验与收益。本文介绍如何利用京东开放平台的API接口,构建高效订单处理系统,涵盖订单查询、库存同步、物流跟踪等功能,助力商家实现自动化管理,显著提升运营效率与客户满意度。
212 0
|
4月前
|
存储 前端开发 应用服务中间件
Django 实战:静态文件与媒体文件从开发配置到生产部署
Django项目中,静态文件(Static Files)和媒体文件(Media Files)是两类不同用途的文件。本文详细介绍了它们的区别、配置方法以及在开发与生产环境中的处理方式,并结合用户头像上传功能进行实战演示,最后讲解了如何通过Nginx或OpenResty部署静态与媒体文件服务。
235 1
|
3月前
|
机器学习/深度学习 人工智能 供应链
淘宝API智能补货系统:库存周转率提升50%的奥秘
在电商竞争激烈的当下,库存管理效率决定企业成败。淘宝API智能补货系统融合人工智能与淘宝开放接口,实现库存自动化管理,大幅提升库存周转率,降低运营成本,助力企业实现高效、智能、精益的供应链管理。
252 0
|
5月前
|
缓存 自然语言处理 监控
基于通义大模型的智能客服系统构建实战:从模型微调到API部署
本文详细解析了基于通义大模型的智能客服系统构建全流程,涵盖数据准备、模型微调、性能优化及API部署等关键环节。通过实战案例与代码演示,展示了如何针对客服场景优化训练数据、高效微调大模型、解决部署中的延迟与并发问题,以及构建完整的API服务与监控体系。文章还探讨了性能优化进阶技术,如模型量化压缩和缓存策略,并提供了安全与合规实践建议。最终总结显示,微调后模型意图识别准确率提升14.3%,QPS从12.3提升至86.7,延迟降低74%。
1633 15
|
4月前
|
机器学习/深度学习 JSON 监控
拼多多API库存预警系统:避免缺货损失千万!
在电商运营中,缺货可能导致订单流失与经济损失,拼多多推出的API库存预警系统可实时监控库存,及时预警,降低缺货风险。系统支持多语言集成,商家可快速构建自动化监控与补货流程,提升供应链效率,保障销售连续性。
303 0
|
4月前
|
缓存 算法 API
从 0 实现 API 接口签名验证系统:基于 HMAC-SHA256 的防篡改方案(附 Python 全代码)
本文介绍基于 的 API 接口签名验证系统,实现防篡改与防重放攻击,包含完整设计原理、签名生成规则及可运行的 Python 客户端与服务端代码,并提供安全性优化与部署建议。
|
4月前
|
人工智能 供应链 物联网
效率提升300%:开放银行API驱动电商分账系统的“零代码”革命
在数字经济背景下,开放银行API与电商生态深度融合,推动支付清算与分账系统从封闭走向开放。通过技术解耦与系统重构,实现资金流、信息流与业务流的高效协同,提升支付效率与分账灵活性,助力电商场景创新。本文从技术驱动力、重构路径、实践案例与未来趋势四方面,解析这一变革的核心逻辑与落地价值。

热门文章

最新文章