【问题标题】:Class based Views not recognizing PUT and DELETE methods基于类的视图不识别 PUT 和 DELETE 方法
【发布时间】:2016-03-07 09:45:57
【问题描述】:

我正在使用基于类的视图并调用 PUT ,通过 ajax 删除方法,但 Django 无法识别这些方法并给出 403 错误。但是根据this应该支持这些方法

我的代码:

class MynDetail(TokenRequiredMixin, View):
    def post(self, request, *args, **kwargs):
             ''my code here''  

    def put(self, request, *args, **kwargs):
        ''my code here''

    def delete(self, request, *args, **kwargs):
        ''my code here''

Django 无法识别上面视图中的 put 和 delete

编辑:

我在这里使用了两个 mixin;

class TokenRequiredMixin(object):
    """
    check if user token cookie exist or not
    """
    def dispatch(self, request, *args, **kwargs):
        if 'user_token' not in request.COOKIES.keys():
            return redirect(reverse('login-view'))
        else:
            url = get_base_url(request, 'v1')
            valid_token = check_token_validity(url, request.COOKIES.get('user_token'))
            if valid_token.get('token') is None:
                response = redirect(reverse('login-view'))
                response.delete_cookie('user_token')
                response.delete_cookie('user_uid')
                return response
        return super(TokenRequiredMixin, self).dispatch(request, *args, **kwargs)


class OrgValidateMixin(object):
    """
    check if user have created an organisation or not
    If not, then redirect him to create org page
    if yes, then he must not able to create another organisation
    so he can't access create organisation page.
    """

    def get_token(self):
        return self.request.COOKIES.get('user_token')


    def get_organisation(self):
        token = self.get_token()
        url = get_base_url(self.request, 'v1')
        return check_user_org(url, token)

    def dispatch(self, request, *args, **kwargs):
        user_org_exists = self.get_organisation()
        current_path = request.get_full_path()
        create_org_path = reverse('create-org-view')

        if (current_path != create_org_path) and not user_org_exists :


Edit : 

 return redirect(reverse('create-org-view'))
    elif (current_path == create_org_path) and user_org_exists :
        return redirect(reverse('portal-dashboard'))

    return super(OrgValidateMixin, self).dispatch(request, *args, **kwargs)

【问题讨论】:

  • HTTP-403 表示禁止访问。 TokenRequiredMixin 中是否运行了某种访问机制?
  • 同意@AKS,"method is not allowed" 应该是 405,而不是 403。
  • @AKS 是的,它会检查令牌
  • 你能添加TokenRequiredMixin的实现以及你的ajax调用吗?

标签: python django django-class-based-views


【解决方案1】:

确保您拥有 CSRF 令牌,就像使用 POST 一样。

我也遇到了同样的问题,提出了 DELETE 请求,得到了 403,然后在 chrome 控制台中检查,得到了这个:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2015-02-08
    • 2012-01-25
    • 2017-07-17
    • 1970-01-01
    • 2013-08-26
    相关资源
    最近更新 更多