在我的函数中,我从 session 中读取用户数据并将它们存储在字典中。接下来,我将它从 registration.backend 发送到“register”函数,但该函数以某种方式将其清空并抛出 KeyError。我的数据去哪儿了?来自函数调用“register”函数的代码:
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 my@email.com
2010-07-09 19:24:35,020 DEBUG {'password1': u'a', 'email': u'my@email.com'}
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 {}
为什么数据会丢失?我做错了什么吗?
@为 Silent-Ghost 编辑
register() takes exactly 2 arguments (3 given)
112. backend = request.session['backend']
113. logging.debug(backend)
114. user = backend.register(request, userdata)
最佳答案
无需在 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']
关于python - 参数在传递给函数时从字典中消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3215135/