Django - вызывает класс как функцию просмотра - PullRequest
0 голосов
/ 19 августа 2010

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'),

URL для вызова

ajax_profile /? Action = check_username & username = testtest

ОШИБКА: экземпляр не имеет атрибута 'status_code'

Почему?

Ответы [ 2 ]

2 голосов
/ 19 августа 2010

Я не рекомендую делать вещи таким образом. Ваши представления должны возвращать объекты HttpResponse, в то время как метод init ajax_profile должен инициализировать экземпляр ajax_profile.

Если необходимо, вы можете попробовать использовать подкласс ajax_profile HttpResponse и использовать super для инициализации HttpResponse в конце __init__:

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

Также стоит отметить, что способ options настроен, каждый метод в словаре (check_username, check_email и т. Д.) Будет запускаться каждый раз, независимо от действия. Наверное, не то, что вы хотите.

0 голосов
/ 19 августа 2010

ваша последняя строка в init () должна быть return options[action]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...