Method *** Not Allowed 解决办法集锦

这篇具有很好参考价值的文章主要介绍了Method *** Not Allowed 解决办法集锦。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用DRF框架进行接口测试时,出现“method \PUT\(或\\DELETE\) not allowed!”,经过多方搜索,
问题分析见:

最终发现无外乎以下操作可以尝试解决:

一、修改settings文件

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.DjangoModelPermissions',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    )

二、在View方法中添加 http_method_names

class RiskView(ModelViewSet):
    #响应器
    renderer_classes = [JSONRenderer,BrowsableAPIRenderer]
    # 分页器=自己写的分页类,不能=列表
    pagination_class = CustomPagination
    #指定查询表
    queryset = Risk.objects.all()
    # 指定序列化器
    serializer_class = RiskSerializer
    http_method_names = ['put','get','delete','post']

此时路径需要如下设置,不然会报下面四的问题:

	path(r'risks/', views.RiskView.as_view({'get':'list','post':'create'})),
    path(r'risks/detail/<int:pk>/',views.RiskView.as_view({'get': 'retrieve','delete':'destroy','put': 'update'})),

四、列表视图只支持get、详细视图支持更新或删除操作,因此DRF需要知道你想要操作的对象

/api/resource/
/api/resource/1/
	path(r'risks/', views.RiskView.as_view({'get':'list','post':'create'})),
    path(r'risks/detail/<int:pk>/',views.RiskView.as_view({'get': 'retrieve','delete':'destroy','put': 'update'})),

五、使用过程中还有可能遇到的其它问题

1.默认的viewset和默认的router,但发送put、delete请求提示不支持

官方实现update方法的时候要求传入pk,所以在put时将请求URL改成:path/pk/就可以了。

2.使用put和delete请求方式,结果返回正常,但数据修改未生效

先访问/api-auth/login/登录django,然再操作就可以修改数据了

参考链接:
https://stackoverflow.com/questions/43529555/how-to-not-allow-the-put-method-at-all-but-allow-patch-in-a-drf-viewset
https://blog.csdn.net/qq_39402334/article/details/83409691
https://www.cnblogs.com/wurijie/p/13339859.html文章来源地址https://www.toymoban.com/news/detail-576951.html

到了这里,关于Method *** Not Allowed 解决办法集锦的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决错误Whitelabel Error Page This application has no explicit mapping for /error(Method Not Allowed405)

    在提交表单数据的时候,由于控制器controller中mapper处理头映射错误,导致出现PUT405错误代码。 修复的方法有: ①修改URL映射链接和映射方式 ②如果URL没问题的话,可能是没有添加springboot的全局扫描,导致映射失败. 进入SpringbootApplication代码中查看是否添加全局扫描@MapperS

    2024年02月11日
    浏览(41)
  • Host is not allowed to connect to this MySQL server的解决办法

    首先我们在学习Java时,我们链接的MySql里面没有数据,我们也不知道有些什么数据,于是我们会有一种办法来继续进行我们代码的编写。 1.第一步是我的电脑必须要和我想使用的那个人的电脑处在同一个局域网下,例如学生在学校里面可以两台电脑同时连上学校的校园网;我

    2024年02月11日
    浏览(39)
  • Caused by: com...MySQLNonTransientConnectionException: Public Key Retrieval is not allowed 的解决办法

    关于这个是在新开子工程中遇到的,本工程使用的Mysql 8.x的,拉取项目启动时遇见问题: “  com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not allowed ” 如下图: 具体信息: 查了下官网的参数操作表,如下图:  意为: 如果用户使用了 sha256_passwor

    2024年04月16日
    浏览(27)
  • message from server: “Host is not allowed to connect to this MySQL server“问题的解决办法

    数据库安装完成后,默认是不能远程登陆的,只能在本地用localhost 或者127.0.0.1登录访问,如果需要远程登录,则需要修改mysql设置,具体修改方式: 1、本地登录mysql:  2、查看数据库中mysql表中的权限设置: 3、修改root用户权限: 4、此时,root用户的权限已经允许非localhos

    2024年02月16日
    浏览(30)
  • HbuilderX运行打包项目时报node.exe: --openssl-legacy-provider is not allowed in NODE_OPTIONS的解决办法

    这两天在用HbuilderX 打包项目时一直报 一直以为是版本的问题,把hbuilderx更换到 最新的正式版v3.6.4 此问题照常存在 更新到v3.6.7 ALPHA版本也照常存在此错误 最后把hbuilderx换成历史的版本同样存在此问题 后来记得原来在系统环境变量配置中经加过,系统环境变量 但现在已经删除

    2024年02月07日
    浏览(26)
  • 微信小程序(web)和django(后端) 异常报错:405 (Method Not Allowed)(env: Windows,mp,1.06.2206020; lib: 2.19.4)

    项目解析: 利用django框架创建一个api接口让小程序可以访问   微信小程序报错 :   GET http://127.0.0.1:8003/api/login/?phone=%E4%BA%8C%E5%A4%A7%E7%88%B7code=%E8%AF%B7%E6%8B%A8%E6%89%93110 405 (Method Not Allowed)(env: Windows,mp,1.06.2206020; lib: 2.19.4) django 报错:\\\"GET /api/login/?phone=YYQQcode=11Q HTTP/1.1\\\" 405 40 Meth

    2024年02月03日
    浏览(27)
  • Fabric错误集锦及解决办法

    [DiscoveryService]: send[xxxchannel] - Channel:xxxchannel received discovery error:access denied 状态 :之前启动成功过区块链浏览器容器,后来容器总是莫名其妙的挂掉 原因 :第一次通过docker-compose.yaml启动区块链浏览器时候,会为持久化数据(Postgres数据和用户钱包)分配了两个命名卷 block-explo

    2024年02月12日
    浏览(22)
  • python报错:argument 1 must be pygame.surface.Surface, not builtin_function_or_method解决方法

    1、报错分析 : 根据报错信息,提示我们出错的原因在与第一个参数类型必须是pygame类型,但是我们的参数类型不匹配。 2、源码分析 这里的方法blit()中的第一个参数是STATICSURF,一个全局常量。根据报错我们知道是它出了问题。我们找到这个参数的赋值代码。 3、STATICSURF参数

    2024年02月12日
    浏览(42)
  • Nginx的405 not allowed错误解决

    1、问题情况 首先看到的页面是nginx返回的页面,得知错误要从nginx上来解决 2、问题原因 因为这里请求的静态文件采用的是post方法,nginx是不允许post访问静态资源。题话外,试着post访问了下www.baidu.com发现页面也是报错,可以试着用get方式访问 3、问题解决 现贴出三种解决方

    2024年02月11日
    浏览(27)
  • 【nginx】405 not allowed问题解决方法

    一、问题描述 首先看到的页面是nginx返回的页面,得知错误要从nginx上来解决 二、问题原因 因为这里请求的静态文件采用的是post方法,nginx是不允许post访问静态资源。题话外,试着post访问了下www.baidu.com发现页面也是报错,可以试着用get方式访问 三、解决办法(三种) (

    2024年02月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包