您的位置:

为什么RejectRequest(REASON_INSECURE_REFERER),怎么解决

  发布时间:2023-03-06 18:57:02
在 Django 中中间件用于保护应用免受跨站请求伪造 攻击。如果请求中没有包含令牌或者 `Referer` 头不安全,则会引发这个错误。- 在提交表单的请求中手动提供 `Referer` 头。希望这些建议能帮助你解决问题。例如,你可以在表单中包含标签来自动包含令牌在这个例子中,我们在抽象基类中定义了一个名为 `process_data` 的方法,并在子类中使用了 `@abstractmethod` 装饰器来声明这个方法。这样,在子类中调用 `process_data` 方法就不会再引发错误了。如果你还有任何疑问,请随时联系我。

报错的原因

这个错误通常是由于你的 Django 项目使用了 `django.middleware.csrf.CsrfViewMiddleware` 中间件,并且在提交表单时发现请求的 `Referer` 头不安全(或者没有提供 `Referer` 头)。

在 Django 中,`CsrfViewMiddleware` 中间件用于保护应用免受跨站请求伪造 (CSRF) 攻击。它通过在表单中生成一个唯一的令牌,并在提交表单时检查请求中是否包含这个令牌来实现保护。如果请求中没有包含令牌或者 `Referer` 头不安全,则会引发这个错误。

要解决这个错误,你可以尝试以下方法之一:

- 在表单中包含 `{% csrf_token %}` 模板标签,以在提交表单时自动包含令牌。

- 在提交表单的请求中手动提供 `Referer` 头。

- 在 Django 设置中关闭 `CsrfViewMiddleware` 中间件。

例如,你可以在表单中包含 `{% csrf_token %}` 标签来自动包含令牌:


{% csrf_token %}



在这个例子中,`{% csrf_token %}` 标签会自动生成一个唯一的令牌,并在表单提交时包含在请求中。这样,`CsrfViewMiddleware` 中间件就可以检查请求中是否包含令牌,并防止跨站请求伪造 (CSRF) 攻击。

希望这些建议能帮助你解决问题。如果你还有任何疑问,请随时联系我。

如何解决

要解决这个错误,你可以尝试以下方法之一:

- 在表单中包含 `{% csrf_token %}` 模板标签,以在提交表单时自动包含令牌。

- 在提交表单的请求中手动提供 `Referer` 头。

- 在 Django 设置中关闭 `CsrfViewMiddleware` 中间件。

例如,你可以在表单中包含 `{% csrf_token %}` 标签来自动包含令牌:


{% csrf_token %}

SubClass(MyBaseClass):

def process_data(self):

# implementation goes here

pass



在这个例子中,我们在抽象基类中定义了一个名为 `process_data` 的方法,并在子类中使用了 `@abstractmethod` 装饰器来声明这个方法。这样,在子类中调用 `process_data` 方法就不会再引发错误了。

希望这个例子能帮助你理解如何在 Django 中使用抽象基类。如果你还有任何疑问,请随时联系我。

使用例子

是的,这里是一个例子,展示了如何在子类中实现抽象基类中的未实现方法:

抽象基类:


from abc import ABC, abstractmethod

class MyBaseClass(ABC):
    @abstractmethod
    def process_data(self):
        raise NotImplementedError("This method was not expected to be called.")

子类:


class MySubClass(MyBaseClass):
    def process_data(self):
        # implementation goes here
        pass

在这个例子中,我们在抽象基类中定义了一个名为 `process_data` 的方法,并在子类中使用了 `@abstractmethod` 装饰器来声明这个方法。这样,在子类中调用 `process_data` 方法就不会再引发错误了。