在我的django powered應用程序中,只有一個明顯的情況,即「IntegrityError」可能出現。
那麼,如何捕獲該錯誤並使用模板顯示消息?Django:捕獲完整性錯誤並使用模板顯示自定義消息
回答
只要使用try和catch。
from django.db import IntegrityError
from django.shortcuts import render_to_response
try:
# code that produces error
except IntegrityError as e:
return render_to_response("template.html", {"message": e.message})
如果你希望你可以使用你的模板中的消息。
編輯
感謝Jill-Jênn Vie,你應該使用e.__cause__
,as described here。
簡單的解決方案:編寫實施process_exception
,只有抓住IntegrityError,並與您呈現模板返回HttpResponse中間件,並確保該中間件是默認的錯誤處理中間件所以它之前(CF https://docs.djangoproject.com/en/dev/topics/http/middleware/#process-exception更多)被稱爲後。
現在,如果我是你,我不會假設「只有一個明顯的情況,」IntegrityError「可能出現」,所以我強烈建議你在日誌中記錄異常(併發送電子郵件警報)你的中間件。
將它放入中間件不僅會捕獲應用程序中的錯誤,而且會捕獲項目中的所有應用程序。 –
@ChrisWesseling:完全同意,這就是爲什麼我提到「我不會承擔這樣的事情」,只有一個明顯的情況,「IntegrityError」可能出現「」 –
槍支不會在人腳下射擊,人們射擊腳下的人。 :-) –
如果您使用與CreateView的混入基於類的意見,你會想「試試」的號召,超類的form_valid,例如:
from django.db import IntegrityError
...
class KumquatCreateView(CreateView):
model = Kumquat
form_class = forms.KumquatForm
...
def form_valid(self, form):
...
try:
return super(KumquatCreateView, self).form_valid(form)
except IntegrityError:
return HttpResponse("ERROR: Kumquat already exists!")
您可以使用模板,render_to_response
等等,以使輸出更好,當然。
我會用ModelForm來驗證它。例如:
你有型號:
class Manufacturer(models.Model):
name = models.CharField(default='', max_length=40, unique=True)
而且的ModelForm:
class ManufacturerForm(forms.ModelForm):
def clean(self):
cleaned_data = super(ManufacturerForm, self).clean()
name = cleaned_data.get('name')
if Manufacturer.objects.filter(name=name).exists():
raise forms.ValidationError('Category already exists')
class Meta:
model = Manufacturer
在當您提交的名稱是唯一此情況。在IntegrityError之前您會收到驗證錯誤。 「類別已存在」消息將顯示在您的表單中的模板
- 1. 無法在Jinja2模板中顯示自定義錯誤消息
- 2. Angular formly - 如何顯示自定義模板的自定義錯誤消息
- 3. Yii2:自定義錯誤消息時完整性約束違規
- 4. 顯示自定義錯誤消息2
- 5. Django自定義500錯誤模板不顯示request.user
- 6. 在模板中顯示自定義django表單錯誤
- 7. Django-allauth完整的教程使用自定義模板
- 8. 使用<rich:beanValidator />顯示自定義轉換錯誤消息
- 9. 使用PEAR難以顯示自定義錯誤消息PHP
- 10. 如何使用rhino mocks顯示自定義錯誤消息
- 11. 錯誤消息不在drupal 6中的自定義表單模板中顯示?
- 12. 如何在AspXGrid的EditForm模板上顯示自定義錯誤消息?
- 13. Django ModelForm錯誤消息沒有在模板中顯示
- 14. 在DefaultUserCreationForm模板中顯示錯誤消息 - django
- 15. Django:顯示管理員驗證錯誤的自定義錯誤消息
- 16. 自定義django錯誤模板
- 17. Angular2 - 捕獲異常並在視圖中顯示錯誤消息
- 18. 使用simple_form自定義錯誤消息
- 19. 使用自定義authlogic錯誤消息
- 20. 捕獲PHP郵件()錯誤並顯示合理的用戶錯誤消息
- 21. 自定義錯誤消息
- 22. 解析錯誤消息給Django模板?
- 23. TCL,獲得完整的錯誤消息,在捕捉命令
- 24. 使用Rails完全自定義驗證錯誤消息
- 25. 重新顯示django窗體成功調用is_valid()後自定義錯誤消息
- 26. Laravel - 捕獲自定義中止消息
- 27. Django保存點回滾捕獲完整性錯誤導致TransactionManagementError
- 28. Django模型完整性錯誤
- 29. 自定義敲除綁定來顯示錯誤消息
- 30. 捕獲訪問數據庫錯誤(FormatException)並返回自定義消息?
謝謝,我不明白爲什麼「從MySQLdb導入IntegrityError」沒有做到這一點。調用堆棧似乎表明這是圖書館提出的錯誤,但它不知何故被轉移到django.db。格兒。 – Julian
正如[文檔v1.6](https://docs.djangoproject.com/en/1.6/ref/exceptions/#database-exceptions)中所指出的那樣,「e____ cause__」是首選,按照[PEP 3134](http://legacy.python.org/dev/peps/pep-3134/)。 –
謝謝,我已經更新了答案。 – Joe