【问题标题】:Problems with Django when trying to show error message when form insn't valid当表单无效时尝试显示错误消息时 Django 出现问题
【发布时间】:2021-09-13 18:22:38
【问题描述】:

说明

在我的应用程序中,我有一个用户注册表单,但是,当模拟不遵循表单验证的建议时,我收到一个 httpresponse 错误。但是,我想做的是使用来自 django 的消息框架显示错误消息

代码

我的模板

{% block body %}
    {% if messages %}
        {% for message in messages %}
            <div class="text-center alert alert-{{ message.tags }}">
                {{ message|safe }}
             </div>
        {% endfor %}
    {% endif %}

    {% load crispy_forms_tags %}

    <form class = "" method="post" action="{% url 'registro' %}">
            {% csrf_token %}
            {{registro_form|crispy}}
            <button class = "btn btn-primary" type="submit">Registrar</button>
    </form>

   
{% endblock body %}

我的表格

class NovoUsuarioForm(UserCreationForm):
    class Meta:
        model = User
        fields = ['first_name', 'last_name', 'email']

    def save(self, commit = True):
        user = super(NovoUsuarioForm, self).save(commit=False)
        user.username = self.cleaned_data['first_name']
        user.email = self.cleaned_data['email']
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name'] 

        if commit:
            user.save()
        return user 

我的看法

class RegistroView(generic.View):
    def get(self,request, *args, **kwargs):
        return render(request, 'main/registro.html', {'registro_form': NovoUsuarioForm()})

    def post(self,request, *args, **kwargs):
        form = NovoUsuarioForm(request.POST)
        if form.is_valid():
            user = form.save()
            login(request,user)
            messages.success(request, "Registration successful." )
            return HttpResponseRedirect(reverse('pesquisa'))
        messages.error(request, "Unsuccessful registration. Invalid information.")

其他信息

当我从 post 方法后的错误页面返回表单页面时,我收到错误消息

【问题讨论】:

    标签: django django-views django-forms django-templates


    【解决方案1】:

    如果表单无效,您的视图不会返回 HTTP 响应;对于这种情况,视图没有return,因此它返回None

    这是您的代码概述:

    class RegistroView(generic.View):
        ...
    
        def post(self,request, *args, **kwargs):
            ...
            if form.is_valid():
                ...
                return HttpResponseRedirect(reverse('pesquisa'))
    
            ...
    

    我建议在表单无效的情况下添加类似return HttpResponse(...) 的内容。您返回的确切想法取决于您的用例。

    【讨论】:

      猜你喜欢
      • 2021-03-10
      • 2021-02-05
      • 2020-04-16
      • 2021-09-15
      • 2018-05-16
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多