【问题标题】:How to resolve Forbidden 403 error when making a urllib request with POST data in Django using Docker?使用 Docker 在 Django 中使用 POST 数据发出 urllib 请求时,如何解决 Forbidden 403 错误?
【发布时间】:2016-10-25 23:23:43
【问题描述】:

我有一个使用 Docker 的三层 Django 项目。第一个容器是前端,负责所有的渲染,第二层处理前端显示内容的逻辑,并通过请求 JSON 与数据库层(第三层)交互,第三个容器/层直接与数据库。

我在前端有一个用户尝试注册的表单。但是,当我使用 POST 对我的第二层进行 API 调用并传递表单值时,我不断收到 403 Forbidden 错误。我在我的表单中使用了 CSRF 令牌。如何去除 403 Forbidden Error?

前端级别的views.py中的一些代码:

def signup(request):
      #more code
      username = form.cleaned_data["username"] 
      #and some more fields
      data = {"username": username, "password":password, ... "location": location}
      postData = urllib.parse.urlencode(data).encode('utf-8')
      try:
         req = urllib.request.Request("url to API in 2nd layer", postData)
      #more code

Django 尝试执行 try 语句,但我收到 403 Forbidden Error。

【问题讨论】:

  • 您的“第二层 API 的 URL”是什么样的?他们在同一个 docker 主机上?
  • 它们使用 docker compose 链接。当我使用 GET 请求访问该链接时没有问题。但是我在 POST 请求中收到 403 Forbidden 错误。

标签: python django docker urllib


【解决方案1】:

您需要在您的第二个 Django 项目中允许 CORS 调用

pip install django-cors-headers

.....

INSTALLED_APPS = (
    ...
    'corsheaders',
    ...
)

.....

MIDDLEWARE_CLASSES = [
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

这里是引用的库。 Django-CORS-Headers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 2021-12-09
    • 2018-11-02
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多