在django3查看项目和编辑应用权限

简介: 【6月更文挑战第5天】本文介绍在Django REST Framework中,权限管理对于Web API的安全至关重要。总的来说,应实施严格的项目级别权限,并按需调整视图级别的权限策略,利用DRF的内置权限系统增强安全性。

简介

默认情况下,所有用户都能访问API。

首先,通过在urls.py中引入rest_framework.urls并设置api/auth/路由以实现登录和注销功能。

其次,为PostListPostDetail视图添加permissions.IsAuthenticated,确保只有认证的用户才能访问。

这使得未认证用户收到403错误。

1 查看和编辑权限 Permissions

权限和安全性是任何网站的重要组成部分,但对于Web API而言则至关重要。

现在rest_framework 有out-of-the-box 权限可以应用于项目水平,视图层 或 个人模型 ( project-level, a view-level,individual model level.)

创建一个用户,并赋予它不同权限。

在 127.0.0.1:2000/admin/ 添加一个用户(user) 用户名/密码: testuser/user.123 其他不做操作,保存后转跳至用户列表。

今后,无论何时我们想在用户帐户之间切换时,都需要跳到Django管理员,退出一个帐户,然后登录另一个帐户。每次。然后切换回到我们的API端点。

Django REST Framework具有单行设置来添加登录并直接注销到可操作的API。

在项目级别的urls.py文件中,添加一个包含rest_framework.urls的新URL路由。使用 api/auth 匹配,只有登录后认证的用户可以查看。

    # config/urls.py
    from django.contrib import admin
    from django.urls import include, path
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('api/v1/', include('posts.urls')),
        path('api/auth/', include('rest_framework.urls')),  
    ]

访问 <http://127.0.0.1:8000/api/v1/
上的可浏览API。有一个细微的变化:右上角的用户名旁边点击可以发现> logout 登出按钮。

登出后 被重定向到Django REST Framework的登录页面,使用新用户 testuser登录。

登录后可以发现,所有api都没有进行权限限制,可以被任何人使用。 即使登出testuser 也一样。 任何用户都可以查看删除修改文章。

2 项目级别授权

这是因为 “发布列表”端点以及“详细列表”端点,是我们之前在config/settings.py中将项目的项目级别权限设置为AllowAny。

我们可以在多个层次操作权限

 this—project-level, view-level,   object-level—but

视图权限 这里有两个视图,让我们为它们都添加权限。

from rest_framework import generics, permissions #权限

每个视图类都增加权限属性。 只有登录后认证的用户可以查看

    class PostList(generics.ListCreateAPIView):
        permission_classes = (permissions.IsAuthenticated,) 
        ...
    class PostDetail(generics.RetrieveUpdateDestroyAPIView):
        permission_classes = (permissions.IsAuthenticated,) 
        ...

刷新可浏览的API,网址为http://127.0.0.1:8000/api/v1/。看看发生了什么,此时后台将返回 403 拒绝消息

    HTTP 403 Forbidden
    Allow: GET, POST, HEAD, OPTIONS
    Content-Type: application/json
    Vary: Accept

    {
        "detail": "Authentication credentials were not provided."
    }

向每个视图添加专用的Permission_classes如果要在整个API上设置相同的权限设置,则重复此操作。最好一次更改我们的权限(最好是在项目级别)。

3 小结

在项目级别设置严格的权限策略,并根据需要在视图级别放宽策略。这就是我们要做的。

REST_Framework随附了许多内置的项目权限管理级别,我们将继续探索。

目录
相关文章
|
1月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
76 1
|
1月前
|
IDE 关系型数据库 MySQL
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
39 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
|
2月前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
121 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
2月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
103 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
2月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
91 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
2月前
|
Linux Python
解决django项目报错很离谱的报错之RuntimeError: populate() isn't reentrant
解决django项目报错很离谱的报错之RuntimeError: populate() isn't reentrant
|
1月前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
106 0
|
1月前
|
存储 开发框架 JSON
【查漏补缺】Django模型字段类型及其应用
【查漏补缺】Django模型字段类型及其应用
18 0
|
1月前
|
存储 安全 UED
GitHub OAuth认证的Django应用
GitHub OAuth认证的Django应用
22 0
|
2月前
|
机器学习/深度学习 人工智能 算法
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台。果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜'),然后基于TensorFlow库搭建CNN卷积神经网络算法模型,然后对数据集进行训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地文件方便后期调用。再使用Django框架搭建Web网页平台操作界面,实现用户上传一张果蔬图片识别其名称。
55 0
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台

热门文章

最新文章