【发布时间】:2020-12-27 22:59:59
【问题描述】:
我使用 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,
},
};
前端当然也收到“错误的媒体类型错误”。
如果有人可以为 Heroku 上的 Django DRF + postgres 提供详细的“howTo”,我会非常高兴...
我现在的主要问题是……
-
settings.py 需要什么才能使后端在 heroku 上的工作与在 localhost 上一样好?
-
我真的需要手动启动 heroku postgres 数据库吗 heroku pg:psql postgresql-shaped-60432 --app 每次部署后? - 因为如果我不这样做,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
提前致谢并致以最诚挚的问候!
【问题讨论】:
标签: django postgresql heroku