2011-10-05 92 views
0

我嘗試基於BaseDeleteView實現一個視圖,該視圖充當前端到REST後端的網站。雙方通過HTTP請求進行通信。我想實現的是,我發送一個GET請求到激活URI(註冊後通過每封電子郵件發送)。在這個視圖中,我首先發送一個HTTP請求到後端,然後從前端的數據庫中刪除激活對象。我不想要確認頁面,所以​​是不可能的。BaseDeleteView拋出AttributeError(render_to_response missing)

class ActivationView(BaseDeleteView): 
    success_url = "/activation/success/" 

    def get_object(self, queryset=None): 
     uuid = self.kwargs['uuid'] 
     try: 
      obj = AccountRegistration.objects.get(uuid=uuid) 
     except ObjectDoesNotExist: 
      raise Http404('Registration not found.') 

     return obj 

    def delete(self, request, *args, **kwargs): 
     obj = self.get_obj() 

     if obj.expire_date < datetime.now(): 
      obj.delete() 
      raise Http404('Registration expired.') 

     # send a http request to the backend 
     t = Transaction('/activate/%s/' % obj.account_name) 
     t.emit() 

     # delete the object 
     obj.delete() 

     # and redirect the request 
     return HttpResponseRedirect(self.get_success_url()) 

urls.py看起來像這樣:

url(r'^activate/(?P<uuid>\w+)/$', 
    ActivationView.as_view(), name="account-activate"), 

,但我得到了以下錯誤:

Traceback (most recent call last): 
    File "/home/crito/.pythonbrew/venvs/Python-2.7.2/thirty-web/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", line 68, in __call__ 
    return self.application(environ, start_response) 
    File "/home/crito/.pythonbrew/venvs/Python-2.7.2/thirty-web/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 272, in __call__ 
response = self.get_response(request) 
    File "/home/crito/.pythonbrew/venvs/Python-2.7.2/thirty-web/lib/python2.7/site-packages/django/core/handlers/base.py", line 169, in get_response 
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info()) 
    File "/home/crito/.pythonbrew/venvs/Python-2.7.2/thirty-web/lib/python2.7/site-packages/django/core/handlers/base.py", line 203, in handle_uncaught_exception 
    return debug.technical_500_response(request, *exc_info) 
    File "/home/crito/.pythonbrew/venvs/Python-2.7.2/thirty-web/lib/python2.7/site-packages/django/core/handlers/base.py", line 111, in get_response 
    response = callback(request, *callback_args, **callback_kwargs) 
    File "/home/crito/.pythonbrew/venvs/Python-2.7.2/thirty-web/lib/python2.7/site-packages/django/views/generic/base.py", line 47, in view 
    return self.dispatch(request, *args, **kwargs) 
    File "/home/crito/.pythonbrew/venvs/Python-2.7.2/thirty-web/lib/python2.7/site-packages/django/views/generic/base.py", line 68, in dispatch 
    return handler(request, *args, **kwargs) 
    File "/home/crito/.pythonbrew/venvs/Python-2.7.2/thirty-web/lib/python2.7/site-packages/django/views/generic/detail.py", line 100, in get 
    return self.render_to_response(context) 
AttributeError: 'ActivationView' object has no attribute 'render_to_response' 

在我眼裏它不應該叫連選擇render_to_response。有任何想法嗎?

回答

0

您從BaseDeleteView繼承而來,其中the documentation指出,不包括TemplateResponseMixin - 即所有與呈現響應有關的位。

改爲從​​繼承。

+0

但是,如果我從''DeleteView''繼承,我必須在一個單獨的頁面中確認刪除。我真的不想這樣。我想要的是向URI發送一個GET請求,並執行刪除操作。然後我重定向到一個不同的URI。 –

1

如果你想省略確認頁面,只需用POST直接調用你的DeleteView即可。這是最理想的,因爲刪除對象應該由csrf保護。

相關問題