首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django -注册失败,将原因显示给用户

Django -注册失败,将原因显示给用户
EN

Stack Overflow用户
提问于 2020-09-16 04:46:57
回答 1查看 53关注 0票数 0

我使用的是内置的django用户模型,但是很难向用户反馈他们的注册详细信息失败的原因。

例如,不符合模型密码要求,现有用户等。

我有。

代码语言:javascript
运行
复制
# forms.py - so they supply their email address for verification
class CustomUserCreationForm(UserCreationForm):
    class Meta(UserCreationForm.Meta):
        fields = UserCreationForm.Meta.fields + ("email",)

# views.py

def register(request):
    if request.method == "GET":
        return render(
            request, "users/register.html",
            {"form": CustomUserCreationForm}
        )

    elif request.method == "POST":

        form = CustomUserCreationForm(request.POST)

        if form.is_valid():
            user = form.save(commit=False)

            user.is_valid = False
            user.save()

        else:
            messages.info(request, 'invalid registration details')
            return render(request, "users/register.html", {"form": CustomUserCreationForm})

如何找出forms.if_valid()失败的原因,并将其返回给用户?目前,它只是返回一个通用的消息,没有用户反馈为什么它不工作。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-16 05:29:26

一旦调用form.is_valid(),如果出现错误,表单的实例就会变得非常重要,因为这些错误都存在于该实例上。因此,您需要将其传递回用户,以便显示错误。

因此,要在您的示例中执行此操作,您需要更改视图,如下所示

代码语言:javascript
运行
复制
    def register(request):
        if request.method == "GET":
            return render(
                request, "users/register.html",
                {"form": CustomUserCreationForm}
            )
    
        elif request.method == "POST":
    
            form = CustomUserCreationForm(request.POST)
    
            if form.is_valid():
                user = form.save(commit=False)
    
                user.is_valid = False
                user.save()

            else:
                messages.info(request, 'invalid registration details')
                return render(
                    request,
                    "users/register.html",
                    {"form": form}  # This still includes the errors instead of creating a new form
                )

这样,您就可以遍历模板中的错误。

代码语言:javascript
运行
复制
    <form method="post" action="{{ request.get_full_path }}">
        {% csrf_token %}

        {% if form.non_field_errors %}
            {% for error in form.non_field_errors %}
                {{ error }}
            {% endfor %}
        {% endif %}

        {% for hidden in form.hidden_fields %}
            {{ hidden }}
        {% endfor %}

        {% for field in form %}
            {{ field }}
            {{ field.errors.as_ul }}
        {% endfor %}

        <button class="btn btn-primary" type="submit">Submit</button>
    </form>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63909645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档