【问题标题】:Extend a view in django-inspectional-registration在 django-inspectional-registration 中扩展视图
【发布时间】:2013-10-11 19:47:37
【问题描述】:

我正在使用 django-inspectional-registration,我想扩展 RegistrationView

class RegistrationView(FormMixin, TemplateResponseMixin, ProcessFormView):
"""A complex view for registration

GET:
    Display an RegistrationForm which has ``username``, ``email1`` and ``email2``
    for registration.
    ``email1`` and ``email2`` should be equal to prepend typo.

    ``form`` and ``supplement_form`` is in context to display these form.

POST:
    Register the user with passed ``username`` and ``email1``
"""
template_name = r'registration/registration_form.html'

def __init__(self, *args, **kwargs):
    self.backend = get_backend()
    super(RegistrationView, self).__init__(*args, **kwargs)

我在views.py 中做了以下操作:

def extended_registration(request, *args, **kwargs):
    k = 1+1

    return RegistrationView(request, *args, **kwargs)

RegistrationView = extended_registration(RegistrationView)

似乎创建的decorator 正在工作,但我明白了:

Traceback:
File "/Users/my_environment/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  92.                     response = middleware_method(request)
File "/Users/my_environment/lib/python2.7/site-packages/django/utils/importlib.py" in import_module
  35.     __import__(name)
File "/Users/myProject/urls.py" in <module>
  5. from myProject.views import *
File "/Users/myProject/views.py" in <module>
  92. RegistrationView = extended_registration(RegistrationView)
File "/Users/myProject/views.py" in extended_registration
  90.     return RegistrationView(request, *args, **kwargs)
File "/Users/myProject/registration/views.py" in __init__
  157.         super(RegistrationView, self).__init__(*args, **kwargs)

Exception Type: TypeError at /accounts/register/complete/
Exception Value: __init__() takes exactly 1 argument (2 given)

【问题讨论】:

    标签: python django python-2.7 django-registration


    【解决方案1】:

    供他人参考:

    我在寻找扩展django-inspectional-registration的用户模型时遇到了这个,然后我发现有一个suggested method for doing this in their docs

    要使用RegistrationView 扩展视图,您首先需要导入它:

    from registration.views import RegistrationView
    

    【讨论】:

      【解决方案2】:

      您可以使用继承来扩展基于类的视图:

      class MyRegistrationView(RegistrationView):
          def __init__(self, *args, **kwargs):
              k = 1 + 1
              super(MyRegistrationView, self).__init__(*args, **kwargs)
      

      然后定义自定义路由:

      url(r'^registration/register/$', MyRegistrationView.as_view(),
          name='registration_register'),
      url('^registration/', include('registration.urls')),
      

      顺序很重要!我们的自定义路由需要在注册应用路由之前定义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-23
        • 1970-01-01
        • 2023-04-01
        • 2011-06-23
        • 2018-10-22
        • 2011-11-01
        • 1970-01-01
        • 2011-12-12
        相关资源
        最近更新 更多