首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django rest-framwork [视图]:用户只能更新他们创建的模块

Django rest-framework是一个基于Django框架的强大工具,用于构建RESTful API。它提供了一套简单而灵活的视图类,用于处理HTTP请求和响应。其中,视图是处理请求并返回响应的核心组件。

在Django rest-framework中,视图类负责处理各种HTTP方法(如GET、POST、PUT、DELETE等),并根据请求的类型执行相应的操作。对于给定的问题,要求用户只能更新他们创建的模块,可以通过自定义视图类来实现。

首先,我们可以使用Django rest-framework提供的APIView作为基类来创建一个自定义视图类。然后,我们可以重写update方法,以确保只有创建者可以更新模块。

以下是一个示例代码:

代码语言:txt
复制
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Module
from .serializers import ModuleSerializer

class ModuleDetailAPIView(APIView):
    def get_object(self, pk):
        try:
            return Module.objects.get(pk=pk)
        except Module.DoesNotExist:
            raise status.HTTP_404_NOT_FOUND

    def get(self, request, pk):
        module = self.get_object(pk)
        serializer = ModuleSerializer(module)
        return Response(serializer.data)

    def update(self, request, pk):
        module = self.get_object(pk)
        
        # 检查用户是否是模块的创建者
        if module.created_by != request.user:
            return Response("You are not allowed to update this module.", status=status.HTTP_403_FORBIDDEN)
        
        serializer = ModuleSerializer(module, data=request.data, partial=True)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

在上述代码中,我们首先定义了一个get_object方法,用于获取指定主键的模块对象。然后,我们定义了get方法,用于处理GET请求并返回模块的详细信息。

接下来,我们重写了update方法。在该方法中,我们首先获取要更新的模块对象,并检查请求的用户是否是该模块的创建者。如果不是,我们返回一个403 Forbidden的响应。

然后,我们使用ModuleSerializer对模块对象进行序列化,并将请求的数据传递给序列化器。如果数据有效,我们保存更新后的模块对象并返回更新后的数据。否则,我们返回一个400 Bad Request的响应。

这只是一个简单的示例,你可以根据具体需求进行更多的定制和扩展。同时,为了更好地使用Django rest-framework,你可以参考腾讯云提供的云服务器CVM产品,详情请查看腾讯云云服务器CVM

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

DRF比Django认证和权限高在哪里

Django可以用LoginRequiredMixin和PermissionRequiredMixin给类视图添加认证和权限,DRF做了高级封装,提供了更简洁实现方式。...因为前面只给Snippet添加了owner字段,还没有写反序列化更新模型代码,所以通过请求访问视图,再尝试反序列化时候,报错了。...我们请求中并没有用户信息,正常来说在访问视图时候就该被拦截了。 给视图添加认证 我们需要让API更符合常规,让未认证用户不能执行视图代码。...对象级权限 为了更细粒度控制权限,让用户只能编辑自己创建snippet,新建snippets/permissions.py: from rest_framework import permissions...普通用户player也可以创建snippet: ? 我想让普通用户不能创建只能超管创建

1.4K20

如何从Django应用程序发送Web推送通知

第3步 - 将URL映射到视图 Django可以创建使用名为URLconfPython模块连接到视图URL。此模块将URL路径表达式映射到Python函数(您视图)。...通常,在创建项目时会自动生成URL配置文件。在此步骤中,您将更新此文件以包含您在上一步中创建视图新路由以及django-webpush应用程序URL ,这将为订阅用户提供推送通知端点。...第4步 - 创建模板 Django模板引擎允许您使用与HTML文件类似的模板定义应用程序面向用户层。在此步骤中,您将为home视图创建和呈现模板。...如果当前用户是注册用户,则模板将创建一个meta标签,并将其id作为内容。 下一步是告诉Django在哪里找到你模板。为此,您将编辑settings.py和更新TEMPLATES列表。...步骤7 - 注册服务工作者和订阅用户以推送通知 Web推送通知可以在订阅了应用程序更新时通知用户,或者提示他们重新使用他们过去使用过应用程序。它们依赖于两种技术,即推送 API和通知 API。

9.7K115

First Django App!

项目,一个项目肯定是由多个模块组成,比方说一个电商项目,包括支付模块,商品展示模块,商家用户聊天模块等等,这些模块便可称之为一个应用。   ...")   写了两个视图函数,我们需要把他显示在前端,但是有两个,我们改如何分别显示他们呢?   路由器。...在 polls 目录下创建一个新文件urls.py # path 就是处理路径一个模块 from django.urls import path # 引入我们自己写视图函数,不引入的话路由器怎么知道改管理谁视图呢...十一、编写表单   我们已经写好详情页需要显示内容,但这毕竟是一个选择题,这样写只能展示,但用户没法选择,所以我们需要写一个表单。 detail.html <!...,因为我们这里引用了HttpResponseRedirect()和reverse()函数,所以我们需要从相应模块里引入他们

2.1K10

一杯茶时间,上手 Django 框架开发

他们俩当时为一个新闻报社制作网站,对快速开发有着比较高需求,并且希望能够在开发同时也能够让非技术人员为网站添加内容。...创建第一个自定义 Django App 在上一节中我们讲到,Django 是一个高度模块框架。.../buy 对应 BuyView 视图,返回给用户结果。...理解模板:网页前端实现 上一步中,我们学会了如何实现视图,并将其接入路由配置中,使其能够被用户访问。接下来,我们将实现一个 Django 模板作为网页前端,从而给用户呈现更丰富内容。...数据库迁移完成后,我们就可以创建用于登录后台管理超级用户: python manage.py createsuperuser 按照提示填写用户名和密码即可。

1.4K21

Django来敲门升级版----认证authenticate

创建普通用户 内建用户直接通过类型进行创建用户操作,如下: from django.contrib.auth.models import User user = User.objects.create_user...创建超级用户 Django身份认证系统同样包含了后台管理员身份操作,创建后台管理员账号如下 python manage.py createsuperuser --username=john --email...类似于Django后台系统中定义权限访问方式如下: 访问视图’add’表单处理函数并且尝试添加一个对象情况下,至少需要一个对该对象操作’add’权限才可以 访问视图’change’处理函数...,并且尝试进行对象数据更新情况下,至少需要一个对该对象操作 ‘change’权限才可以 访问视图’delete’处理函数并尝试删除一个对象时,至少需要一个该对象’delete’权限才可以 权限设置不仅仅可以指定在类型上...()进行操作,他们同样可以指定给相同类型不同对象上。

55230

初探Django框架

所以我们可以将用户请求分为两类: a.如果不涉及到数据调用,那么这个时候视图函数直接返回一个模板也就是一个网页给用户。...b.如果涉及到数据调用,那么视图函数调用模型,模型去数据库查找数据,然后逐级返回。 模型将视图函数所需要数据返回到视图函数中, 然后视图函数再把返回数据填充到模板中空格中,最后返回网页给用户。...实际上我们需要明白一点是, Django模型和数据库间交互并不是完全由Django内部组件完成, 而是依靠pymysql这些独立于Django之外,需要另外安装模块来完成。...所以我们需要告诉 Django 使用 pymysql 模块连接 mysql 数据库: # 在与 settings.py 同级目录下 __init__.py 中引入模块和进行配置 import pymysql...Django 表单 GET 方法 我们在之前项目中创建一个 /HelloWorld/HelloWorld/search.py文件(视图结构),用于接收用户请求: from django.http import

2K20

【云+社区年度征文】Django认证系统并不鸡肋反而很重要

是模型级权限,用户只能具有全部文章权限。...创建用户 方法1 代码创建 在代码中使用create_user()函数来创建用户: >>> from django.contrib.auth.models import User # 创建用户并保存到数据库...认证后端 认证后端(authentication backends)是Django用户验证后端模块,默认为['django.contrib.auth.backends.ModelBackend'],...django.contrib.authPasswordChangeView和user_change_password视图会在修改密码时更新session中密码hash,来避免session失效。...如果对修改密码视图进行了自定义,那么可以使用update_session_auth_hash(request, user)来更新session中密码,防止修改密码导致session失效。

1.6K70

框架介绍

对于简单界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构复杂性,并可能产生过多更新操作,降低运行效率。 (2)视图与控制器间过于紧密连接。...视图与控制器是相互分离,但确实联系紧密部件,视图没有控制器存在,其应用是很有限,反之亦然,这样就妨碍了他们独立重用。 (3)视图对模型数据低效率访问。...DjangoMTV模式 Model(模型):负责业务对象与数据库对象(ORM) Template(模版):负责如何把页面展示给用户 View(视图):负责业务逻辑...Django框架图示 APP 一个Django项目可以分为很多个APP,用来隔离不同功能模块代码。...命令行创建 python manage.py startapp app01 使用PyCharm创建 在下方弹出命令窗口输入: startapp app01 路由 视图 模板 模型 发布者:全栈程序员栈长

55420

Django REST Framework-常用权限类型

DjangoObjectPermissions:允许用户在执行特定操作之前检查模型实例权限。例如,如果一个用户只有对一个特定模型实例“更改”权限,那么该用户只能够修改该实例。...return Response(content)这个视图只允许已经验证身份用户访问。如果一个未经身份验证用户尝试访问这个视图他们将会被重定向到登录页面。...示例以下是一个更完整示例,展示如何在Django REST Framework中使用权限。假设我们有一个名为Snippet模型,它表示代码片段,我们希望只有创建该代码片段用户才能够修改或删除它。...然后,我们定义了一个名为SnippetDetail视图类,该类允许用户获取、更新或删除一个代码片段实例。...在put()方法中,我们使用self.request.user将当前请求用户设置为代码片段所有者。这样,如果用户成功更新代码片段,他们就会成为该代码片段新所有者。

1.4K20

2. DRF入门

之前常用三种序列化方式: Django内置Serializers模块 Serializers是Django内置一个序列化器,可直接将Python对象转为JSON格式,但不支持反序列化 from django.core...DRF序列化器 DRF中有一个serializers模块专门负责数据序列化,DRF提供方案更先进、更高级别的序列化方案。...查看单条数据: http://127.0.0.1:8000/myapp/api/user/1/ Serializer用户创建接口 上述配置不变,只需要变动视图和序列化 app视图函数: myapp/...: http://127.0.0.1:8000/myapp/api/user/ 创建数据结果返回: http://127.0.0.1:8000/myapp/api/user/ Serializer用户更新和删除接口...'} return Response(res) 更新创建数据测试 DRF序列化器: 序列化器参数 序列化器工作流程: 序列化(读数据:视图里通过ORM从数据库获取数据查询集对象

1.5K50

Django简介

MVC与MTV模型 MVC Web服务器开发领域里著名MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式、松耦合方式连接在一起,模型负责业务对象与数据库映射...(ORM),视图负责与用户交互(页面),控制器接受用户输入调用模型和视图完成用户请求,其示意图如下所示: ?...它作为URL分发器,将url请求分发给不同     view处理 Django下载与基本命令 1、下载Django: pip3 install django 2、创建一个django project...直接views.index即可 必须导入blog应用views模块,否则它找不到对应视图函数 from django.contrib import adminfrom django.urls import...django有一个好处,代码更改之后,它会自动加载代码。而不需要重启django项目,网页就能更新了!

1.6K20

学习版pytest内核测试平台开发万字长文入门篇

后台管理模块用户管理也放到了后台管理子路由,根据url访问路径定义父子路由关系。 为了在未登录情况下,不允许访问首页,需要再加上访问拦截: ?...Django视图有两个类型:类视图和函数视图。path()只接受可调用对象,所以类视图需要使用as_view()进行转化,比如views.UserLogin.as_view()。...重写修改用户put方法: ? 和新增用户区别在于,更新user_role表数据时,需要根据老角色和新角色,比较差异后,添加新增,删除废旧。 重写删除用户delete方法: ?...除了类视图Django也提供了函数视图,并且Django REST framework提供了函数视图方法装饰器,可以像flask框架一样,感受写纯后端接口体验,按这个方法来写修改密码接口: ?...修改用户,修改用户名、密码,修改测试角色用户为管理员角色,重新登录,能看到用户名、密码已更新为修改后用户名、密码,并且管理员角色生效,能登进去看到后台管理功能。

4.9K30

Django学习笔记之使用 Django项目开发框架

Django 框架核心组件有: 用于创建模型对象关系映射 为最终用户设计完美管理界面 一流 URL 设计 设计者友好模板语言 缓存系统 本文是有关 Python Web 框架由两篇文章组成系列文章第一篇...现在可以使用 http://localhost:8000/admin 启动管理工具,并使用前面创建超级用户帐号进行登录。我们注意到现在还没有可用模块。...这两个视图(索引视图和详细视图)都是在这个 jobs 应用程序 views.py 模块中实现。...模板语言已经被设计为只能实现有限功能。...站点非常有用) 对象创建更新和删除(CRUD) 简单直接模板表示或简单地对 HTTP 重新进行定向 我们没有创建样板视图方法,而是将所有的业务逻辑都放入了 urls.py 文件中,它们都由 Django

3.2K30

python django环境搭建_pythondjango框架

创建项目 Startproject命令用于创建Django项目,进入目标目录,执行以下命令即可。...HelloWorld/settings.py:该 Django 项目的配置。 HelloWorld/urls.py:路由文件,匹配不同url链接,调用不同视图函数处理。...三、 修改项目内容 如果你想知道这个修改原理,参考第二篇 Python Django(二)—— 项目结构、配置简介、路由与视图函数_Hehuyi_In博客-CSDN博客 1....视图配置 在先前创建 HelloWorld 目录下 HelloWorld 目录新建一个 views.py 文件,输入我们自己代码: from django.http import HttpResponse.../django-install.html https://www.cnblogs.com/shixi-study/p/11332891.html Django 创建第一个项目 | 菜鸟教程 版权声明:本文内容由互联网用户自发贡献

89010

Django 教程 --- Django视图

Django视图Django M V T结构重要参与者之一。视图用户界面,即您呈现网站时在浏览器中看到内容。它由HTML / CSS / Javascript和Jinja文件表示。...要检查如何使用DjangoMVT(模型,视图,模板)结构制作基本项目,请访问创建项目Django视图类型 Django视图分为两大类: 基于功能视图 基于类视图 ?...基于功能视图通常分为4种基本策略,即CRUD(创建,检索,更新,删除)。CRUD是用于开发任何框架基础。 基于功能视图示例– 让我们创建一个基于函数视图列表视图以显示模型实例。...类似地,基于函数视图可以使用用于创建更新,检索和删除视图逻辑来实现。...Django CRUD(创建,检索,更新,删除)基于功能视图:- 创建视图–基于函数视图Django 细节视图–基于函数视图Django 更新视图–基于函数视图Django 删除视图–基于函数视图

3K30

Python笔记:Django框架做web开发(二)

编辑视图 视图Django 中非常重要,是连接页面与数据中间纽带。例如登陆系统,用户在页面上输入了用户名和密码点击登录。...那么 request 请求会由视图来接收,如何提取出用户名和密码数据,如何用这些数据去查询数据库,再如何将登录成功页面返回给用户,这些工作全部由视图层来处理;使用IDE工具打开项目文件目录(笔者使用...这是Django中最简单视图。要调用视图,我们需要将其映射到URL - 为此我们需要一个URLconf文件。 要在polls目录中创建URLconf,请创建一个名为文件urls.py。...polls.urls 模块。...View视图,当Django找到匹配模式时,它调用指定视图函数,其中一个HttpRequest对象作为第一个参数,并且路由中任何“捕获”值作为关键字参数。

69910

【一周掌握Flask框架学习笔记】Flask概念及基础

其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是Flask框架核心。...框架之间差别 Django功能大而全,Flask只包含基本配置 Django一站式解决思路,能让开发者不用在开发之前就在选择应用基础设施上花费大量时间。...Flask 安装环境 使用虚拟环境安装Flask,可以避免包混乱和版本冲突,虚拟环境是Python解释器副本,在虚拟环境中你可以安装扩展包,为每个程序单独创建虚拟环境,可以保证程序只能访问虚拟环境中包...在虚拟环境使用以下命令将当前虚拟环境中依赖包以版本号生成至文件中: $ pip freeze >requirements.txt 安装或升级包后,最好更新这个文件以保证虚拟环境中依赖包。...,比如:使用同一个视图函数 来显示不同用户订单信息。

3.1K10

Python面试题大全(三):Web开发(Flask、爬虫)

一个蓝图不一定要实现应用或视图函数。 初始化一个Flask扩展时,在这些情况中注册一个蓝图。 蓝图缺点: 不能在应用创建后撤销注册一个蓝图而不销毁整个应用对象。...实现wsgi协议模块:wsgiref,本质上就是编写一socket服务端,用于接收用户请求(django) werkzeug,本质上就是编写一个socket服务端,用于接收用户请求(flask) uwsgi...146.简述Django请求生命周期 一般是用户通过浏览器向我们服务器发起一个请求(request),这个请求会去访问视图函数,如果不涉及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户...) 视图函数调用模型毛模型去数据库查找数据,然后逐级返回,视图函数把返回数据填充到模板中空格中,最后返回网页给用户。...Python自带:urllib,urllib2 第三方:requests 框架: Scrapy urllib 和urllib2模块都做与请求URL相关操作,但他们提供不同功能。

90520
领券