Django-调用类作为视图函数

Django-调用类作为视图函数,django,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','

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
url.py

(r“^ajax\u profile/$”、“apps.profiles.views.ajax\u profile”)

要调用的URL

ajax\u profile/?action=check\u username&username=testtest

错误:实例没有属性“status\u code”


为什么?

您在init()中的最后一行应该是
返回选项[操作]
我不建议这样做。视图应该返回HttpResponse对象,而ajax_profile的init方法应该初始化ajax_profile的实例

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

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

同样值得注意的是,设置
选项
的方式,字典中的每个方法(
检查用户名
检查电子邮件
,等等)每次都将运行,而不管操作如何。可能不是您想要的。

当我这样做时,我得到了这个错误-异常值:\uuuu init\uuuu()应该返回None