2013-05-31 41 views
0

所以我想写我自己的注册后端,因为我必须和我遇到一些麻烦。 我得到一个HttpResponse对象没有属性get_absolute_url

HttpResponse对象有没有属性get_absolute_url

,而且不知道如何解决这个问题。这里是我的代码:

class MyRegistrationBackend(object): 

    def register(self, request, **kwargs): 

     username, email, password = kwargs['username'], kwargs['email'], kwargs['password1']  

     encode_drupal = DrupalPasswordHasher() 
     password = encode_drupal.create(str(password),"E","LOhihi6WNUA.") #drupal style hasher 
     print "sha512 pass: ", password 
     #ask if user is already registered 
     req = urllib2.Request(settings.DJANGO_SERVER+"/api/stats/customuser/"+username+"/?format=json", 
      headers = {"Authorization": basic_authorization(settings.DJANGO_OAUTH_USERNAME, settings.DJANGO_OAUTH_PASSWORD),"Content-Type": "application/json"} 
     ) 
     resp = json.loads(urllib2.urlopen(req).read()) 
     print resp 
     if resp['username']!='': 
      #do something 

     else: 
       if resp['password'] != password: #password does not match received pass 
        print "wrong credentials" 
        return render_to_response('registration/error.html') 

回溯:

Environment: 


Request Method: POST 
Request URL: http://192.168.1.77:8000/accounts/register/ 

Django Version: 1.4.2 
Python Version: 2.7.3 
Installed Applications: 
('django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'registration', 
'administration', 
'tastypie', 
'south', 
'social_auth', 
'django_extensions', 
'djcelery', 
'braces', 
'django.contrib.admin', 
'django.contrib.admindocs') 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.middleware.gzip.GZipMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'youbeqadmin.middleware.crossdomainxhr.XsSharing') 


Traceback: 
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response 
    111.       response = callback(request, *callback_args, **callback_kwargs) 
File "/usr/local/lib/python2.7/dist-packages/registration/views.py" in register 
    189.     to, args, kwargs = backend.post_registration_redirect(request, new_user) 
File "/home/psychok7/git/mysite/mysite/backends.py" in post_registration_redirect 
    126.   return (user.get_absolute_url(),(), {}) 

Exception Type: AttributeError at /accounts/register/ 
Exception Value: 'HttpResponse' object has no attribute 'get_absolute_url' 

任何想法?我相信它有事情做与

选择render_to_response

,但我不知道如何解决这个问题。

UPDATE:

如果我回到无,我得到一个

'NoneType' 对象有没有属性 'get_absolute_url'

+0

显示完整的stacktrace。这里没有算命的人。 – kirelagin

+1

添加了追踪 – psychok7

+1

那么,你的'HttpResponse'对象被称为'user'是怎么发生的?我希望你能清楚地看到你没有发布实际上不工作的那部分代码。 – kirelagin

回答

1

Django的后端需要或者返回一个User对象(或相当于get_absolute_url),或者需要返回None(here's an example)。您的认证库不应该重新定向,这是您的工作。

+0

如果我返回None,我得到一个'NoneType'对象没有属性'get_absolute_url'也 – psychok7

+1

重定向和返回None不是一回事。后端应该返回None或有效的用户。该视图应该*测试返回的值*并返回相应的HttpResponse(作为HttpResponse的“重定向”)。 –

+0

我没有为这个我相信的任何看法。我想我使用的是Django的注册默认视图..哪一个是我可以控制这种行为的视图,或者我怎样才能以某种方式重写它的行为? – psychok7