我有一个json文件,其中包含用于检查亵渎过滤器的术语。解析Python/json亵渎过滤器中的整个术语
["bad", "word", "plug"]
,我使用这个(从另一篇文章中找到)解析JSON和搜查任何数据对象集的话。
def word_filter(self, *field_names):
import json
from pprint import pprint
with open('/var/www/groupclique/website/swearWords.json') as data_file:
data = json.load(data_file)
for field_name in field_names:
for term in data:
if term in field_name:
self.add_validation_error(
field_name,
"%s has profanity" % field_name)
class JobListing(BaseProtectedModel):
id = db.Column(db.Integer, primary_key=True)
category = db.Column(db.String(255))
job_title = db.Column(db.String(255))
@before_flush
def clean(self):
self.word_filter('job_title')
问题是如果我使用字符串“管道工”,由于json文件中的“插件”一词,检查失败。因为“plu”是两个词。有什么办法强制使用json文件中的整个单词而不是部分?输出一次运行没有错误:
({ "validation_errors": { "job_title": " job_title has profanity" } })
HTTP PAYLOAD:
{
"job_title":"plumber",
}
您可以将'field_names'定义添加到您的代码段(或者它的一个子集,如果它非常大的话)。当你运行代码 –
时,你的输出也是我相信我添加了你所要求的。 – draxous
我认为你传递的数据可能不是你认为的那种类型。如果你在'word_filter'方法内调用'word_filter('job_title')','field_names'内容为'('job_title',)',即一个元组中包含一个字符串的元组。您的'field_name'测试中的if项相当于'test_title'中的'plug',这基本上意味着“Does'plug'作为字符串'test_title'中的子字符串存在吗?”。我不认为这就是你想要做的......或者我错了吗? –