使 Django 模型表单安全
Make a Django model form safe
我正在构建高性能 API。我使用 Tastypie 已经很久了,有时我只是需要更简单。为此 API 我决定使用 Django Simple Rest (https://github.com/croach/django-simple-rest)。它提供了所需的基础,我可以使用表单和 ORM 来验证和保存数据,而没有通用的 API 库开销。
我想验证传入的数据。我正在使用模型表单来执行此操作。它既好又简单,它根据模型验证数据,但我需要更多。
我想确保没有脚本或 HTML 被发布。对于某些字段,我可能允许 HTML。我知道我可以使用 html5lib 进行各种验证,我可能会这样做,但我看到的唯一示例是您指定每个字段的地方。我正在尝试找出一种默认情况下阻止 javascript 或 HTML 被输入字段并能够适当覆盖的方法。我不想用表格来描述每个模型,我想要一些通用的东西。
这是我最简单的 put 函数。
def put(self, request, *args, **kwargs):
data = json.loads(request.body)
try:
todo = Item.objects.get(id=kwargs.get('id'))
except Item.DoesNotExist:
return HttpNotFound()
form = TodoForm( instance=todo, data=data )
if not form.is_valid():
return JsonFormErrors( form )
form.save()
return JsonStatus(True, message="saved successfully")
这是我的表格。
from django import forms
from .models import *
class TodoForm(forms.ModelForm):
class Meta:
model = Item
fields = ('id', 'text')
为我所有的 put 方法和表单提供通用保护的最佳方式是什么,如果我想接受 HTML,并且能够覆盖行为。
感谢您的帮助!
富有
您可以创建一个新的 class 继承自 ModelForm
以立即清除每个值。
我在想这样的事情:
from django import forms
from lxml.html.clean import clean_html
class SanitizedModelForm(ModelForm):
def __init__(self, data=None, *args, **kwargs):
if data is None:
data = {}
sanitized_data = {}
for key, value in data:
sanitized_data[key] = clean_html(value)
super(SanitizedModelForm, self).__init__(sanitized_data, *args, **kwargs)
我不确定 clean_html
是否适合您的情况。
我正在构建高性能 API。我使用 Tastypie 已经很久了,有时我只是需要更简单。为此 API 我决定使用 Django Simple Rest (https://github.com/croach/django-simple-rest)。它提供了所需的基础,我可以使用表单和 ORM 来验证和保存数据,而没有通用的 API 库开销。
我想验证传入的数据。我正在使用模型表单来执行此操作。它既好又简单,它根据模型验证数据,但我需要更多。
我想确保没有脚本或 HTML 被发布。对于某些字段,我可能允许 HTML。我知道我可以使用 html5lib 进行各种验证,我可能会这样做,但我看到的唯一示例是您指定每个字段的地方。我正在尝试找出一种默认情况下阻止 javascript 或 HTML 被输入字段并能够适当覆盖的方法。我不想用表格来描述每个模型,我想要一些通用的东西。
这是我最简单的 put 函数。
def put(self, request, *args, **kwargs):
data = json.loads(request.body)
try:
todo = Item.objects.get(id=kwargs.get('id'))
except Item.DoesNotExist:
return HttpNotFound()
form = TodoForm( instance=todo, data=data )
if not form.is_valid():
return JsonFormErrors( form )
form.save()
return JsonStatus(True, message="saved successfully")
这是我的表格。
from django import forms
from .models import *
class TodoForm(forms.ModelForm):
class Meta:
model = Item
fields = ('id', 'text')
为我所有的 put 方法和表单提供通用保护的最佳方式是什么,如果我想接受 HTML,并且能够覆盖行为。
感谢您的帮助!
富有
您可以创建一个新的 class 继承自 ModelForm
以立即清除每个值。
我在想这样的事情:
from django import forms
from lxml.html.clean import clean_html
class SanitizedModelForm(ModelForm):
def __init__(self, data=None, *args, **kwargs):
if data is None:
data = {}
sanitized_data = {}
for key, value in data:
sanitized_data[key] = clean_html(value)
super(SanitizedModelForm, self).__init__(sanitized_data, *args, **kwargs)
我不确定 clean_html
是否适合您的情况。