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

时间:2016-02-15 11:20:31

标签: django templates

PUT方法在我的django休息框架工作中不起作用。

Models.py

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 个答案:

答案 0 :(得分:2)

  

但是当我提交页面(PUT)时,它仍然会获取部分而不是放入

我认为标准HTML表单不能使用PUT,而是GET(默认)或POST。以下是HTML5 spec

的引用
  

方法和formmethod内容属性是枚举属性   使用以下关键字和状态:

     

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

     

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

     

这些属性的缺失值是   GET状态。

除此之外,如果您想使用POST,请在form

中指定
<form class="form-profile" method="post">

我发现这篇文章你可能会喜欢阅读它:Why are there are no PUT and DELETE methods on HTML forms?

当然,您可以使用JavaScript从表单中收集数据并发起PUT请求,但这不是您似乎要采用的标准HTML表单。

以下是将PUT请求发送到DRF的一些方法