Python 创建和遍历“的列表”的替代方法;“坏的”;每次在django中调用clean时的值?
假设我有一组单词,我不想让我的用户在他们要提交的标题中包含这些单词。除了将列表硬编码到clean函数中之外,还有哪些方法可以存储这些值Python 创建和遍历“的列表”的替代方法;“坏的”;每次在django中调用clean时的值?,python,sql,database,django,web,Python,Sql,Database,Django,Web,假设我有一组单词,我不想让我的用户在他们要提交的标题中包含这些单词。除了将列表硬编码到clean函数中之外,还有哪些方法可以存储这些值 我曾考虑创建一个新模型,其中包含所有这些不允许使用的单词,但我不确定每次为该函数调用clean时查询数据库是否会比仅为名称创建一个单独的列表更慢/更快或更安全/更不安全。我确实认为,如果列表太长,可读性会更好。硬编码到clean函数中,向用户显示是最好的方法。测试禁止单词列表中是否有任何单词,并向用户显示为错误: 对不起,下面的单词是不允许的:foo,bar,f
我曾考虑创建一个新模型,其中包含所有这些不允许使用的单词,但我不确定每次为该函数调用clean时查询数据库是否会比仅为名称创建一个单独的列表更慢/更快或更安全/更不安全。我确实认为,如果列表太长,可读性会更好。硬编码到clean函数中,向用户显示是最好的方法。测试禁止单词列表中是否有任何单词,并向用户显示为错误:
对不起,下面的单词是不允许的:foo,bar,foobar
我建议在那里创建一个并使用clean方法,然后从中继承您的模型:
from django.core.exceptions import ValidationError
from django.db import models
BAD_WORDS = ['abc', 'def']
class TitleMixin(models.Model):
title = models.CharField(max_length=256)
class Meta:
abstract = True
def clean(self, *args, **kwargs):
super(TitleMixin, self).clean(*args, **kwargs)
if any(w in self.title for w in BAD_WORDS):
raise ValidationError('Bad Title')
现在,使用上述抽象模型创建新模型,所有模型都具有相同的功能来检查标题中的脏话:
class MyNewModel(TitleMixin):
pass
好的,很酷。在clean函数中没有定义BAD_单词列表有什么特殊原因吗?没有原因。坏单词可能会在其他一些抽象模型或其他地方使用,因此如果在全局范围级别声明,则很容易导入它们。你可以在任何你想要的地方定义它们。