如何解决允许在 Django Rest Framework 序列化程序中使用 HTML 字符
我从 Django Rest Framework 返回 HTML 文本,但特殊字符被重写为“HTML 安全”文本。
如何防止这种行为?我知道 Django 中有一个 mark_safe()
函数,但这需要我重写序列化程序。 DRF 是否提供了一种简单的方法来执行此操作?
这是我的序列化程序:
class MySerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
fields = ("html_text",)
请注意,文本是安全的,只能由管理员输入,而不是由最终用户输入。
解决方法
DRF 并非开箱即用。
您的前端或其他一些代码正在为您执行此操作。对于我所知道的所有现代 UI 框架,这种转义都是自动的。我不是前端开发人员,所以可能我错过了一个。
为了证明这一点,我只花了几分钟用一个模型创建了一个空项目,并使用了默认路由器、sqlite 等。这是相当简单的。
Package Version
--------------------- -------
Django 3.2.4
djangorestframework 3.12.4
~/htm ❯ http post :8000/page/ \
html_string="<script>window.alert()</script>" \
html_text="<script>console.log('hi')</script>"
{
"html_string": "<script>window.alert()</script>","html_text": "<script>console.log('hi')</script>","id": 1
}
~/htm ❯ http :8000/page/1/
{
"html_string": "<script>window.alert()</script>","id": 1
}
以及视图、路由器和模型
class Page(models.Model):
html_string = models.CharField(max_length=1024)
html_text = models.TextField()
class PageSerializer(ModelSerializer):
class Meta:
model = Page
fields = "__all__"
class PageViewSet(ModelViewSet):
queryset = Page.objects.all()
serializer_class = PageSerializer
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。