首页 > 代码库 > Django RedirectView
Django RedirectView
RedirectView作用是重定向一个指定,给定的Url.这个给定的Url可能包含有字典风格的字符串,因为关键字(词)会被改变,所以从这个Url中捕获的参数可能也会被修改,例如,Url中的“%”应该写成“%%”这样python才会将其修改成“%”。
如果指定的Url是None,那么会触发:HttpResponseGone (410)
处理流程:
1.dispatch()
2.http_method_not_allowed()
3.get_redirect_url()
官例:
#views.pyfrom django.shortcuts import get_object_or_404from django.views.generic.base import RedirectViewfrom articles.models import Articleclass ArticleCounterRedirectView(RedirectView):permanent = Falsequery_string = Truepattern_name = ‘article-detail‘def get_redirect_url(self, *args, **kwargs):article = get_object_or_404(Article, pk=kwargs[‘pk‘])article.update_counter()return super(ArticleCounterRedirectView, self).get_redirect_url(*args, **kwargs)
#urls.pyfrom django.conf.urls import urlfrom django.views.generic.base import RedirectViewfrom article.views import ArticleCounterRedirectView, ArticleDetailurlpatterns = [url(r‘^counter/(?P<pk>[0-9]+)/$‘, ArticleCounterRedirectView.as_view(), name=‘article-counter‘),url(r‘^details/(?P<pk>[0-9]+)/$‘, ArticleDetail.as_view(), name=‘article-detail‘),url(r‘^go-to-django/$‘, RedirectView.as_view(url=‘https://djangoproject.com‘), name=‘go-to-django‘),]
属性:
1.url:将会重定向到的url,如果是None,会返回410错误。
2.pattern_name:将被重定向的模式名
3.permanent:重定向是否是永久型的,默认是Fasle.它产生的唯一区别是Http状态码的不同;当permanent=True时,状态码为301,permanent=False时,状态码为302.
4.query_string:确定是否将GET查询子句发送到新的位置。默认为False,此时这个查询串被丢弃,如果设置为True,查询串会被加到Url的尾部。
方法:
get_redirect_url(*args, **kwargs)
构造目标Url用来重定向。
它默认是把url当作开始字符串,并用%将从url中命名组中捕获来的参数扩展到url后面。如果url没有设置,get_redirect_url()会偿试用从Url中捕获的的参数来倒转pattern_name,如果是query_string发送的请求,它也会将这个query_string添加到它产生的url中。
有些概念还没理解,估计得等以后学得深入些了才行,到时再来修改吧。
Django RedirectView