Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不允许方法POST [DRF]

不允许方法POST [DRF]
EN

Stack Overflow用户
提问于 2021-10-03 16:28:52
回答 3查看 166关注 0票数 2

当我尝试使用url http://localhost:8000/api/user/profile/2通过user_id=2User创建UserProfile时,得到的结果是detail : not found

models.py:

代码语言:javascript
运行
AI代码解释
复制
class User(AbstractBaseUser, PermissionsMixin, Base):
    user_id = models.AutoField(primary_key=True)
    email = models.EmailField(db_index=True, max_length=100, unique=True)
    is_advisor = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_active = models.BooleanField(default=False)

UserProfile:

代码语言:javascript
运行
AI代码解释
复制
class UserProfile(Base):
    profile_id = models.AutoField(primary_key=True)
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='user_profile')
    first_name = models.CharField(null=True, blank=True, max_length=100)
    last_name = models.CharField(null=True, blank=True, max_length=100)

UserProfileSerializer:

代码语言:javascript
运行
AI代码解释
复制
class UserProfileSerializer:
    class Meta:
        model = UserProfile
        fields = "__all__"

views.py:

代码语言:javascript
运行
AI代码解释
复制
class UserProfileViewSet(viewsets.ModelViewSet):
    queryset = UserProfile.objects.all()
    parser_classes = (MultiPartParser, )
    serializer_class = UserProfileSerializer
    lookup_field = 'user'

urls.py:

代码语言:javascript
运行
AI代码解释
复制
router = SimpleRouter(trailing_slash=False)
router.register(r'user', UserViewSet)
router.register(r'user/profile', UserProfileViewSet)
urlpatterns = [
    path(r'user/activate', ActivateUser.as_view(), name='activate_user'),
] + router.urls
EN

回答 3

Stack Overflow用户

发布于 2021-10-05 22:01:37

对于ModelViewSetsapi/user/profile/2对应于一个详细视图。这意味着该对象应该已经存在。

由于用户2还没有配置文件(您希望创建一个),因此会出现404/not found错误。

有许多方法可以解决这个问题,但要支持为用户创建配置文件,而不需要在当前代码中进行更改,您只需在请求数据中使用用户id发布到/api/user/profile即可:

帖子:http://localhost:8000/api/user/profile

代码语言:javascript
运行
AI代码解释
复制
{
    "user": 2,
    "first_name": "Tannisha",
    "last_name": "Hill"
}
票数 1
EN

Stack Overflow用户

发布于 2021-10-12 03:01:39

……=路径(‘’,包含(router.urls)),…模式

票数 0
EN

Stack Overflow用户

发布于 2021-10-05 20:48:21

我看到相当多的初学者的小错误。我建议您采取较小的步骤,并确保每个部分在您前进的过程中都正常工作。

确保您的用户模型在设置中设置为AUTH_USER_MODEL,并检查您是否可以在shell中创建和查看至少一个用户,甚至在您担心DRF序列化等问题之前。

然后,由于您有一个自定义的用户模型,所以您不太可能需要或想要一个UserProfile对象-它的存在通常是为了扩展现有的用户模型,而当您有了自己的模型时,您可能只需要对其进行扩展,以使事情尽可能简单。

按照您想要的方式获取用户字段,并尝试在shell中创建用户。django shell是一个优秀的开发和学习工具。

一旦您可以在shell中创建用户并列出他们(例如使用User.objects.all()),您就可以考虑添加一个序列化程序。这将需要从合适的DRF默认序列化程序继承一些行为。将其添加到您的urls并使用DRF进行测试(您需要在您的设置中使用'rest_framework‘)。

您也可以在shell中测试序列化程序,但DRF api测试器在您开始使用时非常方便,因此您可能希望直接添加url并使用它。您将能够查看和发布您的更改。lookup_field不是必需的。

在为模型添加urls时,不要使用斜杠来分隔模型名称。斜杠表示不同的部分,型号名称是url的一个有意义的部分。如果您想拆分名称,可以使用下划线(例如"api/user_profile/")。

保留DRF尾部斜杠,除非您有很好的理由不需要它们。如果你忘记输入它们,Django会自动附加它们作为错误处理的一部分。

我希望这足以让你解脱。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69429861

复制
相关文章
Android View post 方法
说起post方法,我们很容易联想到Handler的post方法,都是接收一个Runnable对象。那么这两个方法有啥不同呢?
玖柒的小窝
2021/09/20
4860
Android View post 方法
HTTP 方法:GET方法 对比 POST方法
Http请求中的get方法和post方法的异同,算是我们Web开发时候常见的问题吧,这次还是老生常谈,新壶装旧酒,权当复习了。
浩Coding
2019/07/03
2.4K0
HTTP 方法:GET方法 对比 POST方法
HTTP 方法:GET 对比 POST
举例:客户端(浏览器)向服务器提交 HTTP 请求;服务器向客户端返回响应。响应包含关于请求的状态信息以及可能被请求的内容。
流柯
2018/08/30
7900
HTTP 方法:GET 对比 POST
两种最常用的 HTTP 方法是:GET 和 POST。 什么是 HTTP? 超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信。 HTTP 的工作方式是客户机与服务器之间的请求-应答协议。 web 浏览器可能是客户端,而计算机上的网络应用程序也可能作为服务器端。 举例:客户端(浏览器)向服务器提交 HTTP 请求;服务器向客户端返回响应。响应包含关于请求的状态信息以及可能被请求的内容。 两种 HTTP 请求方法:GET 和 POST 在客户机和服务器之间进行请求-响应时,两种最常被用到的方法
三哥
2018/06/27
7910
c++发送post请求_request的post方法作用
RestSharp是一个轻量的,不依赖任何第三方的模拟Http的组件或者类库。RestSharp具体以下特性;支持net4.0++,支持HTTP的GET, POST, PUT, HEAD, OPTIONS, DELETE等操作,支持oAuth 1, oAuth 2, Basic, NTLM and Parameter-based Authenticators等授权验证等。截止当前目前是github最高stars的http类库。
全栈程序员站长
2022/10/03
2K0
c++发送post请求_request的post方法作用
DRF分页
REST framework提供了分页的支持,并允许在settings.py中进行全局配置,如下所示:
zy010101
2021/12/17
4850
DRF分页
get和post方法的区别
在form表单提交数据的过程中,method属性提供了两个值:get,post,默认为get方式[参1]
Hongten
2018/09/13
1.6K0
jQuery - AJAX get() 和 post() 方法
jQuery get() 和 post() 方法用于通过 HTTP GET 或 POST 请求从服务器请求数据。
陈不成i
2021/07/22
1.6K0
Excel Post下载网址获取方法
打开浏览器的抓取数据功能下载报表,然后用?连起来,如 http://i.srm.jd.com/msReport/futureRpExport?dcNo=10&whNo=81 Chrome > Ctr
林万程
2018/06/20
8150
POST 和 PUT 方法的区别
某日突然想在 Server 端扩展一下 可以接受的 http 方法, 所以学习了一下其他方法的使用.
szhshp
2022/09/21
6000
jQuery调用RESTful WCF示例(GET方法/POST方法)
不废话了,直奔主题吧 wcf端: 近几年比较流行restful,为了能让ajax调用,同时也为了支持restful风格的uri,在创建一个Ajax-enabled Wcf Service后,必须手动修改svc文件,指定Factory,即: <%@ ServiceHost Language="C#" Debug="true" Service="ajaxSample.HelloWorld" CodeBehind="HelloWorld.svc.cs" Factory="System.ServiceModel.
菩提树下的杨过
2018/01/23
1.8K0
drf分页器
也可通过自定义Pagination类,来为视图添加不同分页行为。在视图中通过pagination_clas属性来指明。例如:
仙人技术
2020/07/14
8401
Django DRF Redis
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.
vanguard
2020/03/20
5330
取消Tomcat post长度限制的方法
Tomcat 默认的post参数的最大大小为2M, 当超过时将会出错,可以配置maxPostSize参数来改变大小。
飞奔去旅行
2019/06/13
2.7K0
取消Tomcat post长度限制的方法
HTTP方法之GET与POST对比
超文本传输协议(HTTP)的设计目的是保证客户端与服务器之间的通信。最常用的是GET与POST   1.GET方法:     查询字符串(键/值对)是在GET请求的URL中发送的。 /test.p
用户1149564
2018/01/11
1K0
HTTP方法之GET与POST对比
ORA-00984: 列在此处不允许 解决方法
背景:   今天在用代码生成SQL的时候,在数据库中执行出现了 列在此处不允许问题 解决方案: 把插入值的双引号包裹换成单引号包裹 到此列在此处不允许解决 作者:彼岸舞 时间:2020\11\26
彼岸舞
2020/11/27
1.8K0
DRF系列总结一:DRF是啥?为啥子要用?
目前组内很多项目都在用Django REST framework(简称DRF)来构建Restful WebApi,并推广到了许多实习生同学和外部服务商的开发同学使用。对于刚接触DRF的同学,都觉得有点儿懵,搞不懂为什么要用,怎么用才是最好的,于是我想把项目中对DRF的使用经验总结出几篇文章,希望能帮到后面的开发同学。
高木工
2019/08/25
9.9K0
DRF 视图组件
先来看看这其中的人情世故:两个视图基本类,五个扩展类,九个视图子类,视图集方法,视图集··
HammerZe
2022/05/09
9700
DRF 视图组件
DRF工程搭建
DRF是以Django扩展应用的方式提供的,所以我们可以直接利用已有的Django环境而无需从新创建。(若没有Django环境,需要先创建环境安装Django)
py3study
2020/01/15
1.2K0
DRF工程搭建
点击加载更多

相似问题

不允许使用Post方法drf

181

drf中的Post方法

114

不允许使用DRF -方法'GET‘

10

DRF:“细节”:“方法\"GET\”不允许“。

16

DRF -不允许

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档