Django - 调用类作为视图函数

时间:2010-08-19 18:12:58

标签: django

views.py:

class ajax_profile():

def __init__(self, request):

    username = request.REQUEST.get('username','')
    email = request.REQUEST.get('email','')
    password = request.REQUEST.get('password','')
    action = request.REQUEST.get('action','')

    options = { 
               'check_username'    : self.check_username(username), 
               'check_email'       : self.check_email(email),
               'forgot_password'   : self.forgot_password(email),
               'login'             : self.login(username, password),
               }
    options[action]

def check_username(self, username):
    return HttpResponse('Test %s' % username)

def check_email(self, email):
    pass

def forgot_password(self, email):
    pass

def login(self, username, password):
    pass

urls.py

(r'^ ajax_profile / $','apps.profiles.views.ajax_profile'),

要拨打的网址

ajax_profile /动作= check_username&安培;用户名= TESTTEST

错误:实例没有属性'status_code'

为什么?

2 个答案:

答案 0 :(得分:2)

我不建议这样做。您的视图应该返回HttpResponse对象,而ajax_profile的init方法应该初始化ajax_profile的实例。

如果必须,您可以尝试使用ajax_profile子类HttpResponse,并使用super在ajax_profile __init__的末尾初始化HttpResponse:

class ajax_profile(HttpResponse):
    def __init__(self, request):
        # ...
        response_text = options[action]()
        super(ajax_profile, self).__init__(response_text)

另外值得注意的是,每次都会运行options的设置方式,字典中的每个方法check_usernamecheck_email等)无论行动如何。可能不是你想要的。

答案 1 :(得分:-1)

init()中的最后一行应为return options[action]