gpt4 book ai didi

python - Django Rest 框架中的 POST 方法在 EC2 实例上返回服务器错误 500

转载 作者:太空宇宙 更新时间:2023-11-03 20:23:39 25 4
gpt4 key购买 nike

我正在尝试使用 Django Rest 框架构建一个 Web 应用程序。

当我在本地主机 127.0.0.0/8000 上运行应用程序时,它工作正常。但是当我将其部署在 EC2 服务器上时,POST 方法返回 500 服务器错误。

这是views.py中的post方法之一-

class customer_location(APIView):
def post(self, request, *args, **kwargs):
customer_id = json.loads(request.body).get('customer_id')
queryset = customers.objects.filter(cid= customer_id)
serialize = customer_details(queryset, many=True)
return Response(serialize.data, status=status.HTTP_200_OK)

urls.py 是这样的 -

from django.conf.urls import include, url
from django.urls import path
from rest_framework import routers

from . import views

urlpatterns = [
url(r'^customer_location/$', views.customer_location.as_view(), name='customer_location'),
]

DEBUG 模式设置为 False,并将 EC2 实例 IP 地址添加到 ALLOWED_HOSTS 中。

GET 方法工作正常,但 POST 方法出错。

根据哨兵错误日志,问题是 -

raise JSONDecodeError("Expecting value", s, err.value) from None

这是 view.py 中的这一行 -

customer_id = json.loads(request.body).get('customer_id')

EC2实例的入站规则允许访问HTTP、HTTPS、SSH、PostgreSQL以及端口8000的自定义TCP规则。

当我从终端运行curl命令时,我可以获得POST方法的值-


curl --header "Content-Type: application/json" --request POST --data '{"customer_id":"1"}' http://ec2_ip/customer_location/


output -

[{"cid":"1","name":"Rachel". "location":"NYC"}]

curl 命令返回同一 EC2 服务器的 POST 方法的值,而 EC2 服务器上的 api 端点返回 500 服务器错误。

我该如何解决这个问题?

最佳答案

要解决 cors 问题,您应该在应用中安装 django-cors-headers

  1. 首先通过pip install django-cors-headers安装它
  2. 在 settings.py 的 INSTALLED_APPS 中添加 corsheaders
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

'corsheaders',
.....
]
  • 在 settings.py 中的 MIDDLEWARE 顶部添加 corsheaders.middleware.CorsMiddleware
  • MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ....
    ]
  • 在 settings.py 内的任意位置添加以下行
  • CORS_ORIGIN_ALLOW_ALL = True

  • 最后在settings.py中添加这一行
  • ALLOWED_HOSTS = ['*']

    如果您的项目使用此配置正常运行,请将“*”替换为您的 IP 地址。就是这样!

    关于python - Django Rest 框架中的 POST 方法在 EC2 实例上返回服务器错误 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57986307/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com