哟!检查你的html!
django-html-validator的Python项目详细描述
django html验证器
一个工具来验证从django应用程序生成的html。 与Python3兼容。
许可证: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路径
默认情况下,所有验证都是通过将带有http post的html发送到 html5.validator.nu。
这不仅给他们的服务器带来了很大的压力。尤其是如果你有 很多测试。它也很慢,因为它取决于网络延迟。很多 更好的方法是从他们的 latest release打开 GitHub page。
您可以这样设置:
HTMLVALIDATOR_VNU_JAR='~/downloads/vnu.jar'
这也需要安装Java,因为.jar
文件就是这样
在命令行上执行。
请注意,调用这个vnu.jar
文件非常慢。超过2秒
不稀奇。另一种更快的方法是使用vnu.jar
运行本地web
验证程序的实例,并通过not设置指向要使用该验证的验证
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
为例:
ifHTMLVALIDATOR_ENABLED:MIDDLEWARE_CLASSES+=("htmlvalidator.middleware.HTMLValidator",)
也可以直接无条件地添加到MIDDLEWARE_CLASSES
除非启用,否则它不会执行任何操作(加载除外),请参见
上面关于HTMLVALIDATOR_ENABLED
的说明,了解更多信息。
另外,如果启用HTMLVALIDATOR_FAILFAST
,则在运行
htmlvalidator
中间件一旦出现异常
看到一些无效的html。
在测试中验证html
假设你有一个做测试的类。默认情况下,它已经有一个
self.client
用于发出请求的。你要做的就是
替换为htmlvalidator.client.ValidatingClient
上课。例如:
fromdjango.testimportTestCasefromhtmlvalidator.clientimportValidatingClientclassMyAppTests(TestCase):defsetUp(self):super(MyAppTests,self).setUp()self.client=ValidatingClient()deftest_homepage(self):response=self.client.get('/')self.assertEqual(response.status_code,200)