django - 通过 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”,我会非常高兴...
我现在的主要问题是...
settings.py 需要什么才能使后端在 heroku 上的工作与在 localhost 上一样好?
我真的需要在每次部署后使用 heroku pg:psql postgresql-shape-60432 --app 手动启动 heroku postgres 数据库吗?- 因为如果我不这样做,herocu 日志会显示:
2020-09-09T11:11:15.028985+00:00 app[web.1]: connection = Database.connect(**conn_params) 2020-09-09T11:11:15.028985+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/psycopg2/__init__.py", line 126, in connect 2020-09-09T11:11:15.028986+00:00 app[web.1]: conn = _connect(dsn, connection_factory=connection_factory, **kwasync) 2020-09-09T11:11:15.028986+00:00 app[web.1]: django.db.utils.OperationalError: could not connect to server: Connection refused 2020-09-09T11:11:15.028987+00:00 app[web.1]: Is the server running on host "localhost" (127.0.0.1) and accepting 2020-09-09T11:11:15.028987+00:00 app[web.1]: TCP/IP connections on port 5432?
例如,使用此错误 + 访问 /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
提前致谢并致以最诚挚的问候!
解决方案
推荐阅读
- php - PHP 缺少“未定义”类型的解决方法
- jmeter - JMeter BackendListenerClient 发送 SampleResults 太慢
- java - Camera 如何在 Libgdx 和 Viewport 中工作
- javascript - 自动调整 Kendo-Grid 高度
- python - 多变量函数的优化
- blockchain - Corda Quickstart 的 Notary 节点中是否有任何功能?
- ruby-on-rails - 启动 rails 应用程序时会生成不必要的文件
- url-rewriting - 如何为 ASP 站点设置重写规则?
- c# - 将字符串解析为 IPV6 问题
- terraform - 如何在terraform中实现动态匹配?