2013-05-31 40 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