【问题标题】:Django error http method not allowed on a POST viewPOST 视图中不允许出现 Django 错误 http 方法
【发布时间】:2017-08-01 07:57:46
【问题描述】:

我收到一条错误消息,指出不允许使用方法 (POST)。但在我看来,我有一个 Post 方法。这是我认为的唯一方法。

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> 

【问题讨论】:

    标签: django django-views


    【解决方案1】:

    您尝试发布到详细信息,类基础视图中的 POST 方法只允许在没有 pk 的情况下使用。试试 PUT 或 PATCH。

    【讨论】:

    • 请添加评论,为什么?
    • 嗨@bearBrown 我不是没有投票给你的人,但 CBV 确实接受 pk/slug 或你指定的任何其他参数。 Put/Patch 方法通常用于更新。就我而言,我想(以某种方式)创建或删除关系。我的 Django 项目也包含应用程序,主应用程序一切正常(POST)请求。我的意思是,当我将 AddOrRemoveFollower 移动到主应用程序时,它可以工作,但现在我创建了第二个应用程序,因为我想将第一个应用程序的逻辑(或目的)与第二个应用程序分开,但它给了我一个 HTTP Method不允许
    • 嗨,谢谢,在您的情况下,django 将您的回复作为详细信息发送,因此不允许您在详细信息上进行 POST。如果您想解决问题,请从 url 中删除 (?P&lt;pk&gt;\d+)/,并将 senf 用户 ID 作为表单隐藏输入,我尝试编写示例。
    • @BearBrown 这根本不是真的。 Django 没有这样的概念。
    猜你喜欢
    • 2017-10-16
    • 2012-01-23
    • 2019-07-05
    • 2019-10-22
    • 2023-04-07
    • 2012-08-26
    • 2018-01-07
    • 2016-06-27
    • 1970-01-01
    相关资源
    最近更新 更多