2017-08-01 58 views
0

我有一个错误,指出方法不允许(POST)。但我认为我有Post方法。这是我对我的观点唯一的方法。在POST视图中不允许使用Django错误http方法

class AddOrRemoveFollower(LoginRequiredMixin, View): 

    def post(self, request, *args, **kwargs): 
     #import ipdb; ipdb.set_trace() 
     other_user = get_object_or_404(User, pk=kwargs['pk']) 
     current_user = request.user 
     if current_user is other_user: 
      messages.success(request, 'You cannot follow yourself') 
      return redirect(reverse('myfriendship:friends')) 
     if current_user not in Follow.objects.followers(other_user): 
      Follow.objects.add_follower(request.user, other_user) 
      messages.success(request, 'You are now following a user') 
      return redirect(reverse('myfriendship:friends')) 
     else: 
      Follow.objects.remove_follower(request.user, other_user) 
      messages.success(request, 'You decided to unfollow this user') 
      return redirect(reverse('myfriendship:friends')) 

urls.py

url(r'^AddOrRemoveFollower/(?P<pk>\d+)/$', 
    views.AddOrRemoveFollower.as_view(), 
    name='AddOrRemoveFollower'), 

WARNING:django.request:Method Not Allowed (POST): /myfriendship/AddOrRemoveFollower/1/ 
WARNING:django.server:"POST /myfriendship/AddOrRemoveFollower/1/ HTTP/1.1" 405 0 

HTML

<form class="right" method="POST" action="{% url 'myfriendship:AddOrRemoveFollower' user.id %}"> 
{% csrf_token %} 
    <input type="hidden" name="course_id" value="{{user.id}}"> 
    <input class="btn btn-primary btn-sm red darken-2" type="submit" value="{% can_follow user request.user %}"> 
</form> 

回答

-2

您尝试发布到细节,允许类基本视图POST方法只不峰。尝试PUT或PATCH。

+0

请添加评论,为什么? –

+0

嗨@bearBrown我不是那个不投票的人,但CBV确实接受pk/slug或者你指定的任何其他参数。方法Put/Patch通常用于更新。在我的情况下,我想(以某种方式)创建或删除关系。我的Django项目包含太多的应用程序主应用程序一切正常(POST)请求。我的意思是,当我将我的'AddOrRemoveFollower'移动到主应用程序时它工作,但现在我创建了第二个应用程序,因为我想将第一个应用程序的逻辑(或目的)分开到第二个应用程序,但它给了我一个HTTP方法'不允许 –

+0

嗨,谢谢你,在你的情况下,django发送你的回复作为细节,因此不允许你在细节上做POST。如果你想解决这个问题,请从url中删除'(?P \ d +)/',并将senf用户标识作为表单隐藏输入,我尝试编写示例。 –

相关问题