Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
如何在Django中编写良好的表单验证?_Django_Security_Django Forms_Validation_Django Views - Fatal编程技术网

如何在Django中编写良好的表单验证?

如何在Django中编写良好的表单验证?,django,security,django-forms,validation,django-views,Django,Security,Django Forms,Validation,Django Views,我看过Django的示例,我可以看到它们具有良好的错误处理能力。不过,我想看看是否还有更好的方法,一种处理Django中表单验证错误的通用模式。这是我找到的样本: 我特别想知道: “/Thank/”中的视图如何确保表单已验证?有没有常见的方法可以将表单的成功验证传递给下一个视图?或者我是否需要手动执行某些操作,例如在请求的会话中设置标志 当表单无效且页面在提交时显示错误时,如果用户刷新浏览器,它将不会询问用户是否要再次发布数据,如何编写此代码 编辑:关于#1,我指的是用户手动输入“/Thank/

我看过Django的示例,我可以看到它们具有良好的错误处理能力。不过,我想看看是否还有更好的方法,一种处理Django中表单验证错误的通用模式。这是我找到的样本:

我特别想知道:

  • “/Thank/”中的视图如何确保表单已验证?有没有常见的方法可以将表单的成功验证传递给下一个视图?或者我是否需要手动执行某些操作,例如在请求的会话中设置标志

  • 当表单无效且页面在提交时显示错误时,如果用户刷新浏览器,它将不会询问用户是否要再次发布数据,如何编写此代码

  • 编辑:关于#1,我指的是用户手动输入“/Thank/”url或在历史页面中来回浏览,并在未验证任何表单的情况下意外打开它。(我们是否仍然显示“感谢”页面?或者我们需要以某种方式重新验证为什么我们在“感谢”视图中)

  • 视图可以确保表单已验证,因为只有表单有效时才会调用它

  • 如果页面是通过post请求生成的,浏览器在点击刷新时总是会询问您。。。我想避免这种情况的唯一方法就是重定向到另一个页面

  • “/Thank/”中的视图如何确保表单已验证

    form.is\u valid()
    应该彻底检查任何字段,或者——如果必要的话——任何组合、cornercase等。基本上就是这样。视图知道,如果表单呈现,则该表单是有效的。会话中不需要包含冗余信息

    当表单无效且页面在提交时显示错误时,如果用户刷新浏览器,它将不会询问用户是否要再次发布数据,如何编写此代码


    我不知道重点是什么。表单包含错误,用户可以更正或离开。要呈现不会要求表单重新提交的页面,可以使用重定向,就像在有效情况下一样。在这种情况下,必须手动完成错误标记

    一,。我在询问一些情况,比如用户手动输入“/Thank/”url,或者来回浏览历史页面,并在未验证任何表单的情况下意外打开它。(我们是否仍然显示“感谢”页面?或者我们需要以某种方式重新验证为什么我们在“感谢”视图中)2。我想知道是否有办法重定向到相同的视图,但仍然有post请求?也许我需要使用请求会话?如果您正在重定向,您将丢失存储在
    请求中的数据,因此您必须使用该会话。也许您不需要创建另一个视图,您也可以在表单视图中呈现一个模板并将其返回那里。。。尽管我认为您试图比必要时更加小心,但只要您避免表单数据在数据库中存储两次以及类似的事情,用户就不能真正“销毁”任何东西……至于#1,请参见我的问题编辑。关于从原始视图的重定向,我是否需要在会话中保存POST请求值才能进行错误标记?是否有任何常规方法可以用HttpResponseRedirect模拟POST请求?
    
    def contact(request):
        if request.method == 'POST': # If the form has been submitted...
            form = ContactForm(request.POST) # A form bound to the POST data
            if form.is_valid(): # All validation rules pass
                # Process the data in form.cleaned_data
                # ...
                return HttpResponseRedirect('/thanks/') # Redirect after POST
        else:
            form = ContactForm() # An unbound form
    
        return render_to_response('contact.html', {
            'form': form,
        })