Django部署到Heroku后访问/login/报DoesNotExist错误(本地运行正常)
问题根源
你看到的Does not exist at /login/报错不是路由不存在,是视图代码运行时抛出的数据库记录不存在异常:
你本地开发环境的数据库里,已经预先存在store表中username字段值为username和password的两条记录,但部署到Heroku后,你没有在生产数据库中插入这两条数据,store.objects.get()方法匹配不到数据时会直接抛出DoesNotExist异常,和路由配置无关。
修复方案
- 优先优化视图代码的鲁棒性,把
login视图中的两条查询语句替换为get_or_create(),查询不到时自动创建对应记录:
把views.py中的这两行:
替换为:ls = store.objects.get(username="username") ls1 = store.objects.get(username="password")ls, created = store.objects.get_or_create(username="username") ls1, created = store.objects.get_or_create(username="password") - 确认Heroku生产环境已经执行过数据库迁移,本地终端执行命令:
heroku run python manage.py migrate - 额外优化建议:你的视图函数名
login和Django内置的登录方法重名,存在冲突风险,建议修改为my_login之类的自定义名称,同时同步修改app目录下urls.py中的对应引用。
内容的提问来源于stack exchange,提问作者farhan jatt
相关产品推荐
相关产品推荐

