温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样用django实现redirect

发布时间:2021-02-10 16:44:29 来源:亿速云 阅读:623 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关怎样用django实现redirect,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

用django开发web应用, 经常会遇到从一个旧的url转向一个新的url。这种隐射也许有规则,也许没有。但都是为了实现业务的需要。总体说来,有如下几种方法实现 django的 redirect。

1. 在url 中配置 redirect_to 或者 RedirectView(django 1.3 版本以上)
2. 在view 中 通过 HttpResponseRedirect 实现 redirect
3. 利用 django 的 redirects app实现

1 在url 中配置 redirect_to 或者 RedirectView(django 1.3 版本以上)

from django.views.generic.simple import redirect_to urlpatterns = patterns('',   (r'^one/$', redirect_to, {'url': '/another/'}), ) from django.views.generic import RedirectView urlpatterns = patterns('',   (r'^one/$', RedirectView.as_view(url='/another/')), )

2. 在view 中 通过 HttpResponseRedirect 实现 redirect

from django.http import HttpResponseRedirect   def myview(request):   ...   return HttpResponseRedirect("/path/")

3. 利用 django 的 redirects app实现

1. 在settings.py 中  增加 'django.contrib.redirects' 到你的 INSTALLED_APPS 设置.
2. 增加 'django.contrib.redirects.middleware.RedirectFallbackMiddleware' 到你的MIDDLEWARE_CLASSES 设置中.
3. 运行 manage.py syncdb. 创建 django_redirect 这个表,包含了 site_id, old_path and new_path 字段.

主要工作是 RedirectFallbackMiddleware  完成的,如果 django  发现了404 错误,这时候,就会进django_redirect 去查找,有没有匹配的URL 。如果有匹配且新的RUL不为空则自动转向新的URL,如果新的URL为空,则返回410. 如果没有匹配,仍然按原来的错误返回。

注意,这种仅仅处理 404 相关错误,而不是 500 错误的。

增加删除 django_redirect 表呢?

from django.db import models from django.contrib.sites.models import Site from django.utils.translation import ugettext_lazy as _ from django.utils.encoding import python_2_unicode_compatible   @python_2_unicode_compatible class Redirect(models.Model):   site = models.ForeignKey(Site)   old_path = models.CharField(_('redirect from'), max_length=200, db_index=True,     help_text=_("This should be an absolute path, excluding the domain name. Example: '/events/search/'."))   new_path = models.CharField(_('redirect to'), max_length=200, blank=True,     help_text=_("This can be either an absolute path (as above) or a full URL starting with 'http://'."))     class Meta:     verbose_name = _('redirect')     verbose_name_plural = _('redirects')     db_table = 'django_redirect'     unique_together=(('site', 'old_path'),)     ordering = ('old_path',)     def __str__(self):     return "%s ---> %s" % (self.old_path, self.new_path)

采用类似如上的MODEL ,另外用DJANGO相关ORM 就可以实现save,delete了。

关于“怎样用django实现redirect”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI