Django最佳实践:如何清理和呈现表单

时间:2012-04-10 21:02:33

标签: python django

情况:我有一个用于搜索的表单,我在结果页面上返回相同的表单,供用户过滤他们的结果。为了摆脱垃圾输入,我实现了一个clean_xxx方法。

不幸的是,即使已经清理了表单,也会在结果页面上返回带有垃圾输入的表单。如何才能显示干净的数据?

以下是一些想法:

  1. 在clean_xxx方法中,设置self.data.xxx = cleaning_xxx值
  2. 使用cleaning_data重新初始化新表单。
  3. forms.py:

        SearchForm:
        def clean_q(self):
        q = self.cleaned_data.get('q').strip()
        # Remove Garbage Input
        sanitized_keywords = re.split('[^a-zA-Z0-9_ ]', q)
        q = "".join(sanitized_keywords).strip()
    
        #TODO: Fix
        self.data['q'] = q
    
        return q
    

    views.py

        search_form = SearchForm(params, user=request.user)
        if  search_form.is_valid():
            # Build the Query from the form
            # Retrieve The Results
    
        else:
            # For errors, no results will be displayed
            _log.error('Search: Form is not valid. Error = %s' %search_form.errors)
    
        response = {
                    'search_form': search_form...
        }
    

    感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

无论您从clean_xxx方法返回什么,都将显示。所以,例如:

forms.py:

class SearchForm(forms.Form):
    def clean_q(self):
        return "spam and eggs"

在上面的示例中,该字段将显示“垃圾邮件和鸡蛋”。

如果不这样做,那么问题就在于你方法的验证逻辑。