首页 > 解决方案 > 通过 Heroku 访问 Django API 返回“详细信息”:“请求中不支持的媒体类型 \"application/x-www-form-urlencoded\"。”

问题描述

我用 gunicorn 在 Heroku 上部署了我的 Django 项目。它基本上只有 api(没有模板)。当我部署heroku并<heroku url>/api/login在浏览器中访问并以json格式发布登录数据时,它总是返回 "detail": "Unsupported media type \"application/x-www-form-urlencoded\" in request."

但是,当我在 localhost 上执行相同操作时,用户会通过身份验证,并且我会收到包含用户数据的响应...

登录后发布数据示例: { "email": "ana@test.com", "password": "ana1234567890" }

parser_classes = [JSONParser]在我没有图像或文件的每个视图上添加(我正在使用 FileUploadParser)。

我用 gunicorn 部署在 Heroku 上,因为在 localhost 上,我从后端永久收到“未经授权”(对于我的大多数观点,权限类是“isAuthenticated”)。经过一番研究,我发现可能没有发送授权标头(这里 APACHE WSGIPassAuthorization On 将是一个解决方案)但我没有运行 apache 服务器,我不希望在我的机器上运行任何网络服务器。

我想如果我用 gunicorn 将它部署在 heroku 上,我可以在没有“未授权”标头的情况下继续开发,但我会遇到其他错误,比如"detail": "Unsupported media type \"application/x-www-form-urlencoded\" in request.".. 或数据库连接被拒绝。

在我的前端,我发送以下标题

    // Headers
    const token_config = {
      headers: {
        'content-type': 'application/json',
        accept: 'application/json',
        'Authorization': 'Bearer ${token}',
        //withCredentials : true,
      },
    };

前端当然也会收到 "Wrong mediatype Error" 。

如果有人可以为 Heroku 上的 Django DRF + postgres 提供详细的“howTo”,我会非常高兴...

我现在的主要问题是...

例如,使用此错误 + 访问 /api/login 时,我的 HTTP 状态为 503 或 500...

我的要求.txt:

Django==3.1.1
django-allauth==0.42.0
django-cors-headers==3.5.0
django-environ==0.4.5
django-rest-auth==0.9.5
django-sslserver==0.20
djangorestframework==3.11.1
djangorestframework-simplejwt==4.1.3
gunicorn==20.0.4
image==1.5.27
importlib-metadata==1.7.0
oauthlib==3.1.0
Pillow==7.2.0
psycopg2-binary==2.8.2
PyJWT==1.7.1

提前致谢并致以最诚挚的问候!

标签: djangopostgresqlheroku

解决方案



推荐阅读