python - 长标题崩溃 django 站点 error500
问题描述
我已经用 gunicorn 和 nginx 在数字海洋上建立了一个 django 网站。一切都很好,但是当用户在帖子上键入长标题,然后提交表单时,整个站点崩溃并出现错误 500。管理站点仍然可以访问,我可以删除该帖子,然后站点再次运行。
看起来 slug 无法与标题太大的帖子一起创建和保存,因为 slug 本身变得太大,这会导致错误,并使我的页面中引用该帖子的任何部分在访问时崩溃。
这是我的标题和蛞蝓模型
title = models.CharField(max_length=120, unique=True)
slug = models.SlugField(unique=True, default='', editable=True)
我仍然希望限制为 120 个字符,但我如何在不使网站崩溃的情况下强制执行它?我可以制作一个阻止用户写长标题的表格,还是在保存帖子和创建 slug 之前剪掉一个太长的标题?
我的观点部分
form = PostForm(request.POST, request.FILES)
if form.is_valid() and 'form' in request.POST:
post = form.save(commit=False)
post.author = request.user
post.published_date = timezone.now()
post.typeof = "Article"
post.save()
return redirect(home)
我的 forms.py 非常简单,没有添加,只是列出了所有字段
在开发服务器中测试并且工作正常,但不是在生产服务器中 另外,我注意到我只允许在标题中使用大约 50 个字符,否则它会再次崩溃。但仅在生产中,而不是在开发中
我收到一个错误:类型字符变化的值太长(50)我找到了解决方案,我现在正在测试。完成后我会发布答案。
解决方案
问题是 slug 没有指定 max_length 属性,因此 django 创建的数据库需要一个较小的值。我不是这方面的专家,但是在 slugfield 上添加 max_value=255 并且没有更改任何其他内容之后它起作用了。我需要运行一次 makemigrations 然后进行一次迁移。我重新启动了 gunicorn 和 nginx,现在一切都很好。
推荐阅读
- javascript - TypeError:无法读取 JSONPlaceholder 未定义的属性“url”
- python - 在 PyMongo 中创建列表
- electron - Electron nsis-web,如何更改工件名称
- java - Spring Framework 中的原型 bean 范围实现
- python - Anaconda 导航器和 Python 卸载
- python-3.x - super() 的多重继承问题
- python - 如何解决 Python while 循环问题?
- flutter - 如何排除包:堆栈中的结果
- css - WordPress登录表单居中
- java - 如何使用扫描仪输入读取带有斜杠“/”的txt文件并将它们放入数组/字符串中