安迪_963

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

  RedirectView作用是重定向一个指定,给定的Url.这个给定的Url可能包含有字典风格的字符串,因为关键字(词)会被改变,所以从这个Url中捕获的参数可能也会被修改,例如,Url中的“%”应该写成“%%”这样python才会将其修改成“%”。

  如果指定的Url是None,那么会触发:HttpResponseGone (410)

处理流程:
1.dispatch()
2.http_method_not_allowed()
3.get_redirect_url()

官例:

 

#views.py
from django.shortcuts import get_object_or_404
from django.views.generic.base import RedirectView
from articles.models import Article
class ArticleCounterRedirectView(RedirectView):
permanent = False
query_string = True
pattern_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.py
from django.conf.urls import url
from django.views.generic.base import RedirectView
from article.views import ArticleCounterRedirectView, ArticleDetail
urlpatterns = [
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中。

  有些概念还没理解,估计得等以后学得深入些了才行,到时再来修改吧。

posted on 2016-09-10 03:30  Andy_963  阅读(2129)  评论(0编辑  收藏  举报