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>
答案 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的一些方法