2014-09-18 1 views
1

Я пытаюсь получить Колба-OpenId работает, но продолжайте нажимать эту ошибку при попытке войти вПроблемы с Колба-OpenID в Python 3

ValueError: Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration. 

Это происходит при использовании этой функции

oid.try_login(openid, ask_for=['email', 'fullname', 'nickname']) 

здесь используется функция:

@app.route('/login', methods=['GET', 'POST']) 
@oid.loginhandler 
def login(): 
    """Does the login via OpenID. Has to call into `oid.try_login` 
    to start the OpenID machinery. 
    """ 
    # if we are already logged in, go back to were we came from 
    if g.user is not None: 
     app.logger.info('logged-in: ' + oid.get_next_url()) 
     return redirect(oid.get_next_url()) 
    if request.method == 'POST': 
     openid = request.form.get('openid_identifier') 
     if openid: 
      app.logger.info(request.form) 
      app.logger.info('logging-in: ' + oid.get_next_url()) 
      return oid.try_login(openid, ask_for=['email', 'fullname', 
                'nickname']) 
    app.logger.info('not-logged-in: ' + oid.get_next_url()) 
    return render_template('login.html', next=oid.get_next_url(), 
          error=oid.fetch_error()) 

и на самом деле, как представляется, проблема с LXML, который использует Колба-OpenID:

File "C:\Python33\lib\site-packages\openid\yadis\etxrd.py", line 69, in parseXRDS 
    element = ElementTree.XML(text) 
    File "lxml.etree.pyx", line 3012, in lxml.etree.XML (src\lxml\lxml.etree.c:67876) 
    File "parser.pxi", line 1781, in lxml.etree._parseMemoryDocument (src\lxml\lxml.etree.c:102435) 

Я пробовал несколько примеров проектов на github, но все они имеют ту же проблему. Есть ли способ заставить Flask-openid работать в Python 3?

ответ

0

Я просто изучаю Флакс, поэтому я не очень помогу.

Однако взгляните на http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-v-user-logins

Автор упоминает

Обратите внимание, что из-за различий в обработке Юникода между Python 2 и 3, мы должны обеспечить две альтернативные версии этого метода.

Он использует str вместо unicode

def get_id(self): 
    try: 
     return unicode(self.id) # python 2 
    except NameError: 
     return str(self.id) # python 3 

Я мог бы быть совершенно неправильно! В этом случае я извиняюсь, стоит попробовать.

0

Его гораздо больше, чем просто строка. Он основан на более раннем пакете python-openid, который не совместим с Python3. Для Python3 существует новая версия python-openid.

https://pypi.python.org/pypi/python3-openid/3.0.1

же блоге упоминалось ранее, также подробно это: http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-v-user-logins «К сожалению, версия 1.2.1 Колба-OpenID (текущая официальная версия) не очень хорошо работает с Python 3. Проверьте, какая версия у вас есть по выполнив следующую команду: «