我編寫了一個python腳本來更改AD中的密碼,該命令行可以很好地工作。現在我將該腳本轉移到Django以創建更改密碼頁面。除了一件事之外,一切似乎都奏效:出於某種原因,我一直在Django中得到一個TypeError,它表明一個字符串而不是一個unicode對象應該傳遞給AD。當然,當我這樣做時,AD會抗議,因爲密碼不再是unicode。我在猜測,我忽略了一些簡單的事情,但我無法弄清楚什麼。Django中的LDAP:需要將字符串密碼作爲字符串傳遞
下面是views.py代碼,我認爲應該工作(並且在命令行版本中工作)。我在密碼中添加了unicode(),只是爲了表明它們實際上是unicode,儘管它們在這些行之前肯定是unicode。
import ldap
def changePassword(request):
t = ldap.initialize(server)
. . .
t.simple_bind_s('**********', '****')
. . .
mod_attrs = [(ldap.MOD_DELETE, 'unicodePwd', [unicode(oldPassword)]),
(ldap.MOD_ADD, 'unicodePwd', [unicode(newPassword)])]
t.modify_s(dn, mod_attrs)
錯誤:
('expected a string in the list', u'pass!word')
Request Method: POST
Request URL: http://127.0.0.1:8000/index/
Django Version: 1.4.2
Exception Type: TypeError
Exception Value:
('expected a string in the list', u'pass!word')
Exception Location: /usr/lib/python2.7/dist-packages/ldap/ldapobject.py
in _ldap_call, line 96
Python Executable: /usr/bin/python
Python Version: 2.7.3
修改後的版本不會引發異常,但也沒有更改密碼(因爲密碼不統一通過):
mod_attrs = [(ldap.MOD_DELETE, 'unicodePwd', [str(oldPassword)]),
(ldap.MOD_ADD, 'unicodePwd', [str(newPassword)])]
t.modify_s(dn, mod_attrs)
有誰知道什麼可能導致這個unicode問題?如果我可以阻止Django中的異常並保留unicode,我認爲這個代碼可以工作。
在此先感謝您提供的任何見解。
感謝您的迴應!將所有unicode轉換爲字符串(包括來自Django表單的輸入)完成這項工作。 –