当前位置: 首页 > 知识库问答 >
问题:

PUT方法在django REST中不起作用?

常英毅
2023-03-14

PUT方法在django rest框架中不起作用。

模型。派克

class Profile(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30,blank=True)

对应视图

class ProfileDetailsView(APIView):
    """
    Get, udpate,  a user's profile
    """

    template_name = 'users/profile.html'
    form_class = UserProfileForm
    authentication_classes = (SessionAuthentication,)


    def get_object(self, pk):
        try:
            return Profile.objects.get(pk=pk)
        except Profile.DoesNotExist:
            raise Http404

    def get(self, request, pk, format=None):
        print "111111111111111111"
        profile = self.get_object(pk)
        serializer = UserProfileSerializer(profile)
        return render(request, self.template_name, context=serializer.data)


    def put(self, request, pk):
        print "2222222222222222222"

当我请求页面(GET)时,它显示相应的细节(配置文件细节)。但是当我提交页面(PUT)时,它仍然转到get部分,而不是put。当我使用REST视图时,它工作得很好。问题出在网页视图(html)上。我错过了什么?感谢任何帮助

HTML页面

<form class="form-profile" >{% csrf_token %}
 <div class="form-horizontal">
  <div class="form-group"> 
   <label class="col-sm-2 control-label">First name</label>
   <div class="col-sm-10">
    <input value="{{first_name}}" class="form-control" id="first_name" maxlength="255" name="first_name" placeholder="First name" required="required" type="text" />
   </div>
  </div> 
  <div class="form-group"> 
   <label class="col-sm-2 control-label">Last name</label>
    <div class="col-sm-10">
     <input value="{{last_name}}" class="form-control" id="last_name" maxlength="255" name="last_name" placeholder="First name" type="text" />
    </div>
  </div>
 </div>
</form>

共有1个答案

终睿
2023-03-14

但是当我提交页面(PUT)时,它仍然会转到get部分而不是PUT部分

我认为标准HTML表单不能使用PUT,它要么是GET(默认值),要么是POST。这里引用了HTML5规范:

method和formmethod内容属性是具有以下关键字和状态的枚举属性:

关键字get,映射到状态GET,指示HTTP GET方法。

关键字post,映射到状态post,指示HTTP post方法。

这些属性缺少的默认值是GET状态。

除此之外,如果要使用POST,请在表格中指定它

<form class="form-profile" method="post">

我发现这篇文章,你可能喜欢读它:为什么HTML表单上没有PUT和DELETE方法?

当然,您可以使用JavaScript从表单收集数据并启动PUT请求,但这并不是您想要的标准HTML表单。

以下是一些可以向DRF发送PUT请求的方法

  • 如何使用curl执行PUT请求
  • JavaScript REST客户端库

 类似资料:
  • 我正在使用演示APi(http://dummy.restapiexample.com/update) 我有一个响应类UpdateResponse 我有一个Api类和一个APIInterface 和对话框而不是主活动 在APIInterface中使用PUT方法有一个@path(id)和三个@fields(name、salary、age) 下面是UpdateResponse类代码 Api接口代码如下

  • 所以我需要邮递员的文件。问题是我的API需要身份验证,所以我不能使用Swagger来测试它们。当我从控制器中删除授权并使用Swagger时,它会工作,但使用Postman时,它会返回以下错误。 请求的邮递员标题:

  • 我试图将所有对Rails后端进行api调用的服务整合为一个。它看起来是这样的: POST和GET工作正常,但PUT给了我

  • 我让troulbe通过jsp页面上的ajax函数将path参数输出到servlets doput方法。 我的使用Ajax的jsp页面: 我有get和post方法,因为它们在form action和method属性中以常规方式发送到servelt。 就我所知,Put和delete只能通过ajax或JQuery来完成,我似乎无法理解。 我已经在邮递员身上测试了这个方法,它非常有效。 我真的被困在这个问

  • 这是我的模块信息: 这是我的父gradle构建文件: 这是我的客户端模块构建文件: 我正在尝试获取FXMLLoader的资源,但我根本无法让它工作。我已经挣扎了两个小时,现在我真的很绝望。我尝试了所有可能的文件名组合,每个可能的位置,但仍然返回null。 我还尝试了,但它也不工作。 有人能帮我吗?我将非常感激。

  • 我尝试使用post方法生成表单,我想检查字段是否用isset()填充。但即使字段为空,isset也会返回true。 下面是一个简化的代码:(页面名称:test.php,post方法指向自身) 当您提交时,它总是响应“字段集”,即使您没有在“测试”输入中输入任何内容。 谢谢你的回答!