我是Django的新手,这是我到目前为止所做的。
我想接收CharField数据并将其验证为URL。我做了以下事情。
models.py
from django.db import models
class Small(models.Model):
url_new = models.CharField(max_length=500, default='abc', unique=True)
def __str__(self):
return self.url_new
views.py
from django.shortcuts import render, HttpResponseRedirect, Http404
from django.core.validators import URLValidator
from django.core.exceptions import ValidationError
from .forms import SmallForm, URLForm
from .models import Small
def home(request):
form = SmallForm(request.POST or None)
if form.is_valid():
url_validate = URLValidator()
url_new = form.cleaned_data['url_new']
try:
url_validate(url_new)
except ValidationError:
raise form.fields['url_new'].error_messages['Invalid URL']
context = {"form": form}
template = "home.html"
return render(request, template, context)
forms.py
from django import forms
from .models import Small
class URLForm(forms.Form):
url_new = forms.CharField()
class SmallForm(forms.ModelForm):
class Meta:
model = Small
fields = ["url_new", ]
所以,我可以在html页面上验证表单,但只有当表单为空时我点击提交按钮。
但是当我在表单字段中输入非url内容后点击提交时,它会转到新页面并显示error_messages
Invalid URL
(当调试为真时)。< / p>
有什么方法可以验证它并在html页面上显示错误消息而不是向我显示调试页面?
提前致谢。
答案 0 :(得分:1)
在检查表单is_valid()
<强> forms.py 强>
class SmallForm(forms.ModelForm):
def clean_url_new(self):
data = self.cleaned_data['url_new']
try:
url_validate(data)
except ValidationError:
raise self.fields['url_new'].error_messages['Invalid URL']
return data
class Meta:
model = Small
fields = ('url_new', )
<强> views.py 强>
def home(request):
if request.method == 'POST':
form = SmallForm(request.POST)
if form.is_valid():
# form success logic
return HttpResponseRedirect('/thanks/')
else:
form = SmallForm()
return render(request, 'home.html', {'form': form})
文档:https://docs.djangoproject.com/en/1.7/ref/forms/validation/#cleaning-a-specific-field-attribute