2010-07-09 57 views
3

在我的函數中,我從會話中讀取用戶數據並將它們存儲在字典中。接下來,我將它從registration.backend發送到'register'函數,但函數以某種方式將其清空並引發KeyError。我的數據在哪裏去了?從函數調用 '註冊' 功能的代碼:傳遞給函數時,參數從字典中消失

data = request.session['temp_data'] 
email = data['email'] 

logging.debug(email) 

password1 = data['password1'] 
userdata = {'email': email, 'password1': password1} 

logging.debug(userdata) 

backend = request.session['backend'] 

logging.debug(backend) 

user = backend.register(userdata) 

和寄存器功能(:http://bitbucket.org/ubernostrum/django-registration/src/tip/registration/backends/default/init.py整個源在這裏):

class DefaultBackend(object): 
    def register(self, request, **kwargs): 
     logging.debug("backend.register") 
     logging.debug(kwargs) 

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

調試調用它們之後:

2010-07-09 19:24:35,020 DEBUG [email protected] 
2010-07-09 19:24:35,020 DEBUG {'password1': u'a', 'email': u'[email protected]'} 
2010-07-09 19:24:35,020 DEBUG <registration.backends.default.DefaultBackend object at 0x15c6090> 
2010-07-09 19:24:35,021 DEBUG backend.register 
2010-07-09 19:24:35,021 DEBUG {} 

爲什麼數據可能會丟失?難道我做錯了什麼 ?

@edit爲靜音鬼

register() takes exactly 2 arguments (3 given) 

112. backend = request.session['backend'] 
113. logging.debug(backend) 
114. user = backend.register(request, userdata) 

回答

3

無需在register方法中使用**。你想要做的是簡單地傳遞詞典register方法:

user = backend.register(request, userdata) # you need to pass request as definition says 

def register(self, request, userdata): # note lack of ** 
    logging.debug("backend.register") 
    logging.debug(userdata) # should work as expected 

    username, email, password = userdata['email'], userdata['email'], userdata['password1'] 
+0

這只是一個猜測,而是'後端'一個對象或類?嘗試編寫'backend()。register(request,userdata)'也許吧? – cji 2010-07-09 18:47:52

+0

太棒了,現在它的作品! – muntu 2010-07-09 18:50:04

3

由該方法的簽名來看:

  1. 你需要解壓你的字典
  2. 你需要通過相關request變量

類似這樣的:

backend.register(request, **userdata) 

假設registerbackend實例的方法。

+0

但後來我收到提示「功能寄存器()接受2個參數,3給出」:/ – muntu 2010-07-09 17:44:52

+0

@muntu:那麼它是一些其他的功能'註冊',而不是你給我們的那個 – SilentGhost 2010-07-09 17:47:47

0

這很好地工作

class Logging(): 
    def debug(self,f): 
     print f 
class DefaultBackend(object): 
    def register(self, request, **kwargs): 
     logging.debug("backend.register") 
     logging.debug(kwargs) 

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

class Request: 
    def __init__(self): 
     self.session = {} 
request = Request() 
logging=Logging() 
request.session['temp_data']={'password1': u'a', 'email': u'[email protected]'} 
request.session['backend']=DefaultBackend() 



data = request.session['temp_data'] 
email = data['email'] 

logging.debug(email) 

password1 = data['password1'] 
userdata = {'email': email, 'password1': password1} 

logging.debug(userdata) 

backend = request.session['backend'] 

logging.debug(backend) 

user = backend.register(request,**userdata) 
相關問題