一个小程序,用于跟踪数据库表中URL的变化,在请求时提供HTTP 301和410。
项目描述
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变化。
提供 HttpResponsePremanentRedirect 或 HttpResponseGone 的 HTTP 响应类似于 flatpages 中间件,拦截 404 异常并检查所有现有的 URLChangeRecords 中是否包含请求的 URL。根据记录的数据,返回相应的 HTTP 响应,或者在找不到匹配请求的 URL 时抛出 404。
安装
安装非常简单
pip install django-url-tracker-fork
完成!
配置
要开始在项目中使用 url_tracker,只需将以下两行添加到您的 settings.py
将中间件 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', )
将 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 迁移。