Django中未引发表单验证错误

时间:2018-10-24 16:02:19

标签: python django

当我尝试创建自定义字段验证时,无法获得Django表格来引发ValidationError。我可以看到新的隐藏输入字段,但是当我尝试输入一个值时,它似乎没有检测到错误。

我还尝试了def clean(self)而不是clean_honeypot(),但这也不起作用。

我在做什么错了?

forms.py:

from django import forms

class SuggestionForm(forms.Form):
    name = forms.CharField()
    email = forms.EmailField()
    suggestion = forms.CharField(widget=forms.Textarea)
    honeypot = forms.CharField(required=False, widget=forms.HiddenInput, label="Leave Empty")

    def clean_honeypot(self):
        honeypot = self.cleaned_data['honeypot']
        if len(honeypot) > 0:
            raise forms.ValidationError(
                'Honeypot should be left empty. Bad bot!'
            )
        return cleaned_data

views.py:

from django.contrib import messages
from django.core.mail import send_mail
from django.urls import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import render
from . import forms

def hello_world(request):
    return render(request, 'home.html')

def suggestion_view(request):
    form = forms.SuggestionForm()
    if request.method == 'POST':
        form = forms.SuggestionForm(request.POST)
        if form.is_valid():
            send_mail(
                'Suggestion from {}'.format(form.cleaned_data['name']),
                form.cleaned_data['suggestion'],
                '{name} <{email}>'.format(**form.cleaned_data),
                ['leigh.christopher2@gmail.com'])
            messages.add_message(request, messages.SUCCESS,
                                "Thanks for your suggestion")
            return HttpResponseRedirect(reverse('suggestion'))
    return render(request, 'suggestion_form.html', {'form': form})

模板:

{% extends "layout.html" %}
{% load static %}

{% block title %}Suggest an idea!{% endblock %}

{% block content %}
<div class="container">
      <div class="row">
        <form action="" method="POST">
            {{ form.as_p }}
            {% csrf_token %}
            <input type="submit" class="button">
        </form>
    </div>
    </div>
{% endblock %}

0 个答案:

没有答案