2017-08-01 61 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用戶標識作爲表單隱藏輸入,我嘗試編寫示例。 –

相關問題