跳转到主要内容

嘿!检查你的HTML!

项目描述

django-html-validator

Build Status

一个用于验证从Django应用程序生成的HTML的工具。Python 3兼容。

许可:MPL 2

警告!

如果您不下载本地的vnu.jar文件(见下文),它将使用validator.nu并将您的HTML发送到那里。

如果您使用htmlvalidator来验证测试,您的HTML不太可能包含任何敏感或可识别的信息,但如果您使用中间件选项,存在潜在风险。

安装

首先,非常简单

pip install django-html-validator

注意,除非您选择如何使用它并且您还需要通过设置明确启用它,否则它不会做任何事情。

基本上,您可以选择如何使用这个

  • 作为中间件
  • 在您的单元测试中(技术上它们是Django中的集成测试)

如果您选择将其设置为中间件并相应地启用它,它将针对测试中的每个渲染的模板运行。而不仅仅是当您运行服务器时。

设置

无论您如何使用htmlvalidator,您都需要将其打开。默认情况下是关闭的。用于此的设置是

HTMLVALIDATOR_ENABLED = True

此操作的作用是打印所有验证错误到stdout。但不会阻止执行继续运行。即使有错误。

要使执行在出现任何验证错误时停止,请在您的设置中打开此选项

HTMLVALIDATOR_FAILFAST = True

现在,如果有任何验证错误通过客户端,您将触发一个htmlvalidator.exceptions.ValidationError异常。

同样,如果您将其作为中间件运行并且启用了此设置,它将在请求中引发异常。

当遇到验证错误和警告时,htmlvalidator将HTML输出到一个文件,并将错误输出到具有相同名称但扩展名为.txt的文件中。默认情况下,它将输出到系统的tmp目录下的htmlvalidator子目录中,例如/tmp/htmlvalidator/。如果您想覆盖此设置

HTMLVALIDATOR_DUMPDIR = '~/validationerrors/'  # default it /tmp

无论您设置什么,目录不需要存在,但其父目录必须存在。

默认情况下,当htmlvalidator遇到验证错误时,它将在HTMLVALIDATOR_DUMPDIR中存储相关的HTML文件,并在同一目录中存储具有.txt扩展名的文件。或者,您可以直接将验证错误和警告输出到stdout,如下所示

HTMLVALIDATOR_OUTPUT = 'stdout'  # default is 'file'

设置vnu.jar路径

默认情况下,所有验证都是通过将您的HTML以HTTP POST方式发送到html5.validator.nu来完成的。

这不仅会给他们的服务器带来很大压力。尤其是如果您有很多测试。它也因依赖于网络延迟而缓慢。一个更好的方法是下载他们的最新版本上的vnu.jar文件。

您只需这样设置即可

HTMLVALIDATOR_VNU_JAR = '~/downloads/vnu.jar'

这还需要安装java,因为这是在命令行上执行.jar文件的方式。

请注意,调用这个vnu.jar文件相当慢。超过2秒并不罕见。一个更快的替代方案是使用vnu.jar运行本地的验证器Web实例,并通过不设置HTMLVALIDATOR_VNU_JAR并将验证指向该实例来做到这一点

HTMLVALIDATOR_VNU_URL = 'http://localhost:8888/'

验证器的本地Web实例通常可以通过以下方式启动

java -cp vnu.jar nu.validator.servlet.Main 8888

在服务器运行时进行验证

一种在服务器运行时进行HTML验证的方法是在例如使用./manage.py runserver的情况下。

为此,您需要启用中间件。在您的设置模块中,将htmlvalidator.middleware.HTMLValidator追加到MIDDLEWARE_CLASSES,例如如下所示

if HTMLVALIDATOR_ENABLED:
    MIDDLEWARE_CLASSES += ("htmlvalidator.middleware.HTMLValidator",)

您也可以无条件地将它直接添加到MIDDLEWARE_CLASSES中,除非启用,否则它不会做任何事情(除了加载)。有关更多信息,请参见关于HTMLVALIDATOR_ENABLED的说明。

此外,如果您启用了HTMLVALIDATOR_FAILFAST,当运行htmlvalidator中间件时,它将一看到无效的HTML就引发异常。

在测试中进行HTML验证

假设您有一个进行测试的类。默认情况下,它已经有一个self.client,您可以使用它来发出请求。您只需要将其替换为htmlvalidator.client.ValidatingClient类。例如

from django.test import TestCase
from htmlvalidator.client import ValidatingClient


class MyAppTests(TestCase):

    def setUp(self):
        super(MyAppTests, self).setUp()
        self.client = ValidatingClient()

    def test_homepage(self):
        response = self.client.get('/')
        self.assertEqual(response.status_code, 200)

项目详情


下载文件

下载适用于您平台的自定义文件。如果您不确定该选择哪个,请学习有关安装包的更多信息。

源分发

django-html-validator-0.5.1.tar.gz (6.7 kB 查看哈希值)

上传时间

由以下支持