跳转到主要内容

一个小程序,用于跟踪数据库表中URL的变化,在请求时提供HTTP 301和410。

项目描述

https://travis-ci.org/elbaschid/django-url-tracker.png https://coveralls.io/repos/elbaschid/django-url-tracker/badge.png?branch=master

django-url-tracker 旨在为网站提供一个易于使用的附加功能,以增强其SEO。这看起来可能有点没有意义,因为 酷URI不会改变。我不想争论这个问题,不更改URL应该是首要目标。然而,如果由于某种原因更改了URL,这可能会对SEO产生负面影响,因为搜索引擎不希望在爬取已知URL时最终停留在404页面上。为了很好地处理这些情况,django-url-tracker 会跟踪URL的变化,当调用 URL时,为已删除的URL提供永久重定向(HTTP 301)或已删除响应(HTTP 410)。

跟踪针对的是基于模型字段的URL,例如一个 slug 字段。要开始跟踪特定模型中的URL变化,您只需将模型注册到 url_tracker 即可,每当模型被更改或删除时,都会记录URL变化。

提供 HttpResponsePremanentRedirectHttpResponseGone 的 HTTP 响应类似于 flatpages 中间件,拦截 404 异常并检查所有现有的 URLChangeRecords 中是否包含请求的 URL。根据记录的数据,返回相应的 HTTP 响应,或者在找不到匹配请求的 URL 时抛出 404

安装

安装非常简单

pip install django-url-tracker-fork

完成!

配置

要开始在项目中使用 url_tracker,只需将以下两行添加到您的 settings.py

  1. 将中间件 url_tracker.middleware.URLChangePermanentRedirectMiddleware 添加到 MIDDLEWARE_CLASSES 的末尾,之后它看起来应该类似于以下内容

    MIDDLEWARE_CLASSES = (
        'django.middleware.common.CommonMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
        'url_tracker.middleware.URLChangePermanentRedirectMiddleware',
    )
  2. url_tracker 和默认包含的 django.contrib.contenttypes 添加到您的 INSTALLED_APPS

    INSTALLED_APPS = (
        "django.contrib.contenttypes",
        "url_tracker",
    )

现在您可以在项目中使用 url_tracker。接下来要做的就是注册一个用于跟踪的模型。

跟踪模型

这是一个跟踪模型的简单示例。假设我们有一个模型 Project,它包含有关特定项目的详细信息,并在 URL http://www.example.com/project/some-project/ 上提供。项目的 URL 基于我们的模型的 SlugField。模型可能看起来像这样

class Project(models.Model):
    name = models.CharField(max_length=20)
    slug = models.SlugField(max_length=20)
    description = models.CharField(max_length=500)

我不会详细介绍如何创建短名,因为这似乎是常规做法。所以现在我们假设 slug 会自动从 name 中填充。但是,为了使跟踪器工作,还需要另一件事,那就是 get_absolute_url 方法。让我们将其添加到模型中

class Project(models.Model):
    ...

    @models.permalink
    def get_absolute_url(self):
        return ('project-detail', (), {'slug': self.slug})

现在开始跟踪 URL 变化的缺失链接。将 URLTrackingMixin 添加到您的模型中,并将以下命令添加到类定义的底部(或者如果您喜欢,可以添加到文件中)

import url_tracker

class Project(url_tracker.URLTrackingMixin, models.Model):
    ...

url_tracker.track_url_changes_for_model(Project)

要更改用于跟踪 URL 的函数,请向类添加一个 url_tracking_methods 属性,这是一个包含要跟踪的方法名称的列表。默认情况下,列表包含 get_absolute_url

您已完成。如果您访问管理界面,创建一个新项目,然后更改其短名(这会更改其 URL),您将看到一个新的 URLChangeRecord 反映更改。打开 old_url 应将您重定向到 new_url

贡献

如果您发现问题或希望看到支持的功能,请访问 问题部分:并报告它。

要以任何形式贡献代码,请将 github 仓库:进行分叉并在本地克隆。为您的功能创建一个新的分支

git commit -b feature/whatever-you-like

然后确保所有测试都通过(并为任何新功能编写新的测试)

./run_tests.py

将完成的功能推送到 github,并从分支打开拉取请求。

如果您更改了需要数据库迁移的 models.py,请使用 django-mini.py -p -a url_tracker -a south -a django.contrib.contenttypes schemamigration url_tracker --auto 创建 south 迁移。

项目详情


由以下组织支持