跳转到主要内容

一个Django应用,可以分析并报告您向其注册的任何模型中的链接。

项目描述

GitHub Actions PyPI version

一个相当灵活的应用程序,可以分析并报告您向其注册的任何模型中的链接。

https://github.com/DjangoAdminHackers/django-linkcheck/raw/master/linkcheck.jpg

链接可以是裸露的(url或图像和文件字段)或嵌入在HTML中(linkcheck处理解析)。如果您需要做更复杂的事情(如从slug字段生成URL等),可以轻松覆盖Linkcheck对象的函数。

您应该通过cron或类似工具运行其管理命令,定期检查外部链接的状态是否发生变化。当对象保存时,所有链接都会自动进行检查。这是通过信号处理的。

最低要求

django-linkcheck 需要 Python 3.8 和 Django 3.2。

基本用法

  1. 将应用安装到您的 Python 路径上的某个位置(例如,使用 pip install django-linkcheck)。

  2. 'linkcheck' 添加到您的 settings.INSTALLED_APPS 中。

  3. 为每个应用添加一个名为 linklists.py 的文件(请参考 examples/linklists.py 中的示例),该文件满足以下条件:

    1. 包含内容的模型(例如,url/image 字段、标记片段或任何在显示时转换为 IMG 或 HREF 的内容)

    2. 可以作为链接的目标 - 也就是说,由 URL 指向 - 在这种情况下,请确保它有一个名为 ‘get_absolute_url’ 的实例方法

    提示:您可以使用以下命令为您的模型创建一个示例配置

    manage.py linkcheck_suggest_config --model sampleapp.SampleModel > sampleapp/linklists.py
  4. 运行 ./manage.py migrate

  5. 将以下内容添加到您的根 URL 配置中

    path('admin/linkcheck/', include('linkcheck.urls'))
  6. 使用浏览器查看 /admin/linkcheck/

我们意识到这份文档内容相对简略,因此欢迎任何关于完善或澄清的建议。

管理命令

linkcheck_suggest_config

此命令遍历所有模型,并检查它们是否包含由linkcheck可检查的字段。如果尚未注册,则会建议一个示例配置。

您还可以传递--model选项为指定的模型生成一个示例配置。

设置

LINKCHECK_DISABLE_LISTENERS

这是一个完全禁用linkcheck的设置,通常在运行测试时使用。也请参阅下面的上下文管理器。

LINKCHECK_EXTERNAL_RECHECK_INTERVAL

默认值:10080(1周,以分钟为单位)

不会重新检查最近检查过的任何外部链接。

LINKCHECK_EXTERNAL_REGEX_STRING

默认值:r’^https?://’

一个字符串,作为正则表达式应用于URL,以确定它是内部还是外部。

LINKCHECK_MEDIA_PREFIX

默认值:‘/media/’

当前linkcheck通过将URL转换为本地文件系统路径来检查指向内部静态媒体的链接是否正确。

它从内部链接中移除MEDIA_PREFIX,并将结果连接到settings.MEDIA_ROOT,然后使用os.path.exists进行测试。

这“对我有效”,但可能会破坏其他人的设置。欢迎提交补丁。

LINKCHECK_RESULTS_PER_PAGE

控制分页。

由于链接是按对象分组的,所以目前分页有些奇怪。

LINKCHECK_MAX_URL_LENGTH

默认值:255

URL字段的长度。默认为255,以兼容MySQL(见https://docs.django.ac.cn/en/dev/ref/databases/#notes-on-specific-fields

LINKCHECK_CONNECTION_ATTEMPT_TIMEOUT

默认值:10

每个连接尝试的超时时间(秒)。有时限制每个连接的检查时间可以减少总检查时间。

SITE_DOMAIN和LINKCHECK_SITE_DOMAINS

Linkcheck使用不同的方式测试外部和内部链接。内部链接使用Django测试客户端,而外部链接则使用urllib2进行测试。

将内部链接测试为外部链接可能导致某些情况下出现错误,因此Linkcheck需要知道哪些外部URL应被视为内部。

Linkcheck寻找上述任何一个设置。如果不存在LINKCHECK_SITE_DOMAINS,则仅使用SITE_DOMAIN。

SITE_DOMAIN = “mysite.com”

将指示linkchecker将以下链接视为内部链接:

mysite.com www.mysite.com test.mysite.com

如果您将LINKCHECK_SITE_DOMAINS设置为一个列表或元组,则可以显式列出应被视为内部的域名。

LINKCHECK_TOLERATE_BROKEN_ANCHOR

默认值:True

是否将带有损坏的hash锚点的链接标记为有效。如果您想要将锚点不包含在链接目标的HTML源中的链接标记为无效,则禁用此选项。

django-filebrowser集成

如果您的路径上存在django-filebrowser,则linkcheck将监听post-upload、delete和rename信号,并根据需要进行更新。

贡献

您可以使用额外的dev安装所有开发设置的要求。

$ python3 -m venv .venv
$ source .venv/bin/activate
$ pip install -e .[dev]
$ django-admin compilemessages --ignore=.venv  # Optionally compile translation file

如果您想使用flake8和isort的pre-commit钩子,请使用以下命令启用它们:

$ pre-commit install

运行测试

可以使用linkcheck根目录中的runtests.py脚本来独立运行测试。

$ python runtests.py

如果您想在项目上下文中运行linkcheck测试,应在您的INSTALLED_APPS设置中包含'linkcheck.tests.sampleapp'

Linkcheck为您提供了两个上下文管理器来启用或禁用您自己的测试中的监听器。例如

def test_something_without_listeners(self):
    with listeners.disable_listeners():
        # Create/update here without linkcheck intervening.

如果您定义了LINKCHECK_DISABLE_LISTENERS设置,则可以通过以下方式临时启用它:

def test_something_with_listeners(self):
    with listeners.enable_listeners():
        # Create/update here and see linkcheck activated.

翻译

目前此应用支持英语、德语和法语。如果您想为LOCALE贡献翻译,请运行

django-admin makemessages --locale LOCALE

并编辑linkcheck/locale/LOCALE/LC_MESSAGES/django.po中的相应文件。

创建新版本

  1. pyproject.toml中增加版本号

  2. 更新CHANGELOG

  3. 创建发布提交:git commit --message "发布 vX.Y.Z"

  4. 创建git标签:git tag -a "X.Y.Z" -m "发布 vX.Y.Z"

  5. 将提交和标签推送到仓库:git push && git push --tags

  6. 构建源代码发行版:python -m build

  7. 将软件包发布到PyPI:twine upload dist/django-linkcheck-X.Y.Z*

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码发行版

django-linkcheck-2.3.0.tar.gz (45.0 kB 查看哈希)

上传时间: 源代码

构建发行版

django_linkcheck-2.3.0-py3-none-any.whl (53.2 kB 查看哈希)

上传时间: Python 3

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面