BaseDeleteView引发AttributeError(render_to_response丢失) [英] BaseDeleteView throws AttributeError (render_to_response missing)

查看:42
本文介绍了BaseDeleteView引发AttributeError(render_to_response丢失)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试为充当REST后端前端的网站实现基于BaseDeleteView的视图.双方通过HTTP请求进行通信.我想要实现的是将 GET 请求发送到激活URI(注册后每封电子邮件发送).在此视图中,我首先将HTTP请求发送到后端,然后从前端数据库中删除激活对象.我不想有一个确认页面,所以 DeleteView 是不可能的.

I try to implement a view based on BaseDeleteView for a website that acts as a frontend to an REST backend. Both sides communicate over HTTP requests. What I want to achieve is that I send a GET request to an activation URI (send per email after registration). Inside this view I first send a HTTP request to a backend, and then delete the activation object from the database of the frontend. I don't want to have a confirmation page, so DeleteView is not possible.

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.有什么想法吗?

In my eyes it shouldn't even call render_to_response. Any ideas?

推荐答案

如果要忽略确认页面,只需直接通过POST调用DeleteView.这是最理想的,因为删除对象应受csrf保护.

If you want to leave out the confirmation page, just call your DeleteView directly with POST. This is most desirable as the deletion of an object should be protected by csrf.

这篇关于BaseDeleteView引发AttributeError(render_to_response丢失)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆