【发布时间】:2015-03-24 10:55:46
【问题描述】:
我正在使用 Django 和 apache 开发一个 Web 应用程序。
我可以访问主页,但是当我登录时,我得到403 Forbidden。
我在哪里可以获得错误的回溯以便解决问题?
我在本地开发,所以我设置了DEBUG=True。
这是我在 apache 日志中看到的内容:
[Tue Mar 24 14:12:13.230364 2015] [mpm_event:notice] [pid 3738:tid 139683667068800] AH00493: SIGUSR1 received. Doing graceful restart
[Tue Mar 24 14:12:13.338989 2015] [mpm_event:notice] [pid 3738:tid 139683667068800] AH00489: Apache/2.4.7 (Ubuntu) OpenSSL/1.0.1f mod_wsgi/3.4 Python/2.7.6 configured -- resuming normal operations
[Tue Mar 24 14:12:13.339010 2015] [core:notice] [pid 3738:tid 139683667068800] AH00094: Command line: '/usr/sbin/apache2'
没有错误的痕迹!
编辑: 好像不是 apache 的错误,我用 django 本地服务器也有同样的问题:
24/Mar/2015 15:51:28] "POST /accounts/participant_login/?next=/participants/ HTTP/1.1" 200 6286
[24/Mar/2015 15:51:41] "POST /accounts/participant_login/?next=/participants/ HTTP/1.1" 302 0
[24/Mar/2015 15:51:41] "GET /participants/ HTTP/1.1" 403 22
【问题讨论】:
-
您应该使用 try/except 并记录异常以捕获未报告的错误。无论如何,如果您在尝试登录时遇到该错误,在我看来,您的表单没有 csrf 令牌并且您有一个禁止的请求。
-
我在视图中使用了一个日志,但它没有被调用。我认为它与 csrf 令牌无关,它在生产服务器上运行良好,我没有更改代码,只是更新了 settings.py 和 apache 配置文件。
-
您是否在本地使用 sqlite 数据库和在生产环境中使用 MySql/Postgres?如果是这样,您想授予“www-data”权限以写入数据库。如果以上都不是,我建议您使用 Pycharm 编辑器(或任何带有调试器的编辑器)并在本地运行时使用其惊人的调试工具,在本地 Apache 上对其进行测试并将其传递到生产环境。否则你最终会遇到很多这样的问题。
标签: django apache http-status-code-403 traceback