Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-注册失败,向用户显示原因_Python_Django - Fatal编程技术网

Python Django-注册失败,向用户显示原因

Python Django-注册失败,向用户显示原因,python,django,Python,Django,我使用的是内置的django用户模型,但很难向用户反馈为什么他们的注册详细信息失败 例如,不符合型号密码要求、现有用户等 我有 # forms.py - so they supply their email address for verification class CustomUserCreationForm(UserCreationForm): class Meta(UserCreationForm.Meta): fields = UserCreationForm.

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

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

我有

# 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})
如何找出
表单失败的原因,并将其返回给用户?目前,它只是给出了一个通用的消息,没有用户反馈为什么它不起作用


一旦您调用了
表单,非常感谢。

如果有错误,表单的实例将变得非常重要,因为这些错误存在于该实例上。因此,您需要将其传递回用户,以便显示错误

因此,要在您的案例中实现这一点,您需要如下更改您的视图

    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
                )

这样,您就可以迭代模板中的错误


{%csrf_令牌%}
{%if form.non_字段_错误%}
{%表示表单中的错误。非\u字段\u错误%}
{{error}}
{%endfor%}
{%endif%}
{%用于隐藏在表单中。隐藏的_字段%}
{{隐藏}}
{%endfor%}
{%形式的字段为%}
{{field}}
{{field.errors.as_ul}}
{%endfor%}
提交

您可以访问post。这将有助于你谢谢你,令人惊讶的答案,非常有帮助:-)