首页 > 解决方案 > 即使使用 recaptcha 验证失败,也保留 django 表单数据

问题描述

我正在为我的网站编写一个联系表单,并且我正在使用 reCaptcha 来验证用户之前的表单提交。我不知道如何构建我的逻辑,以便如果 reCaptcha 失败,我仍然可以将用户重定向到同一页面,而不会删除他们已经输入的字段。

在我的 views.py 中,我有以下内容。

class hdnytorv(View):
    def __init__(self, *args, **kwargs):
        self.ContextObject = ContextBuilder() #building a dict with context keywords
        

        if 'contactFrom' in kwargs: #Then this comes from a post that has failed and data needs to be saved
            self.form = kwargs['contactForm']
        else:
            self.form = contactForm()
        
        self.context = {'contactForm' : self.form}
    
    #When the page is generated first the below will be shown
    def get(self, request, *args, **kwargs):
        
        ..
        return render(request, template_name='welcome.html', context = self.context)
    
    def post(self, request, *args, **kwargs): 
        form = contactForm(request.POST)
        newsletterForm = newsLetterForm(request.POST)

        if form.is_valid():
            #check recaptcha 
            validate = Validate(request = request)
            validate.result['success'] =False
            if validate.result['success'] is False:
                messages.warning(request, 'Validation failed. Try again.', extra_tags='contactSubmitStatus')
                return redirect('/welcomePage#contactForm')

问题是每次我重定向到 `'/welcomPage#contactForm' 时,都会创建一个新的类实例,并且会调用 get 并重新呈现表单,因此所有字段都是空的,并且用户的数据输入会丢失。我应该怎么做才能获得满足以下 2 个标准的解决方案:

  1. 使用表单中的数据重定向回同一页面

  2. 重定向到页面的正确 id 标记,在我的示例中为 #contactForm

标签: djangodjango-viewsdjango-forms

解决方案


推荐阅读