1
短的反向註冊這樣RedirectView的URL和可選ARGS
url('^authorize/?$',login_required(Capture.as_view()), name='capture'),
我已經導入這個URL配置在命名空間=「的oauth2」 在我看來,這工作得很好:
class RedirectToCapture(RedirectView):
pattern_name = 'oauth2:capture'
def get_redirect_url(self, *args, **kwargs):
return super(RedirectToCapture,self).get_redirect_url(*args,**kwargs)
這將失敗反向()的URL,因爲有上述
class RedirectToCapture(RedirectView):
pattern_name = 'oauth2:capture'
def get_redirect_url(self, *args, **kwargs):
kwargs['response_type'] = 'code'
return super(RedirectToCapture,self).get_redirect_url(*args,**kwargs)
在URLPATTERN中沒有定義的可選參數本hack工作
class RedirectToCapture(RedirectView):
pattern_name = 'oauth2:capture'
query_string = True
def get_redirect_url(self, *args, **kwargs):
self.request.META['QUERY_STRING'] = urlencode({'response_type' :'code')
return super(RedirectToCapture,self).get_redirect_url(*args,**kwargs)
這是超級難看。另一種方法,做reverse()我自己並省略pattern_name
class RedirectToCapture(RedirectView):
def get_redirect_url(self, *args, **kwargs):
self.url = reverse('oauth2:capture') + '?' + urlencode({'response_type' :'code' })
return super(RedirectToCapture,self).get_redirect_url(*args,**kwargs)
這是最乾淨的方式嗎? 以任何方式觸摸args或kwargs導致reverse()停止匹配
PS:是的,我想在這裏使用基於類的視圖派生自RedirectView爲多個不相關的原因。我知道我可以簡單地做http.HttpResponseRedirect(URL)
對,看着RedirectView代碼,它確實沒有做很多其他的事情,所以這個調用是毫無意義的。 它確實使用 URL =「%s嗎?%的」%(URL,參數) 這似乎是更好的首選風格所以我想我會做到這一點 – kert