Ошибка от python-oauth2: «Ошибка TypeError при рендеринге: должна быть строкой или буфером, а не None» - PullRequest
0 голосов
/ 12 мая 2011

Я пытаюсь разместить на своем сайте временную шкалу в Твиттере, которую я делаю в Джанго.Для этого я нашел хороший фрагмент кода на http://www.pixeldonor.com/blog/2010/aug/15/create-simple-twitter-app-django/, который я реализовал на своей локальной копии веб-сайта для разработчиков.Локально все работает отлично!Твиты показываются, и я не получаю никаких ошибок.

Теперь, когда я развернул свой веб-сайт в Интернете, я столкнулся с ошибкой, которую не могу устранить.

Это ошибка, которую я получаю:


TemplateSyntaxError at /
Caught TypeError while rendering: must be string or buffer, not None

Request Method: GET
Request URL:    http://marcostrijker.com/
Django Version: 1.3
Exception Type: TemplateSyntaxError
Exception Value: Caught TypeError while rendering: must be string or buffer, not None
Exception Location: /home/mstrijker/lib/python2.7/oauth2-1.5.170py2.7.egg/oauth2/__init__.py in sign_request, line 493
Python Executable:  /usr/local/bin/python  
Python Version: 2.7.1
Python Path:    
['/home/mstrijker/webapps/django/vorm4ufolio',
 '/home/mstrijker/webapps/django',
 '/home/mstrijker/webapps/django/lib/python2.7',
 '/home/mstrijker/lib/python2.7/oauth2-1.5.170-py2.7.egg',
 '/home/mstrijker/lib/python2.7/httplib2-0.6.0-py2.7.egg',
 '/home/mstrijker/lib/python2.7/pip-1.0.1-py2.7.egg',
 '/home/mstrijker/lib/python2.7',
 '/usr/local/lib/python27.zip',
 '/usr/local/lib/python2.7',
 '/usr/local/lib/python2.7/plat-linux2',
 '/usr/local/lib/python2.7/lib-tk',
 '/usr/local/lib/python2.7/lib-old',
 '/usr/local/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/site-packages',
 '/usr/local/lib/python2.7/site-packages/PIL']
Server time:    Thu, 12 May 2011 21:05:17 +0200

После этого отображается следующее:

Ошибка шаблона

В шаблоне /home/mstrijker/webapps/django/vorm4ufolio/templates/index.html ошибка в строке 85

Caught TypeError при рендеринге: должна быть строкой или буфером, а не None

<div id="twitter">
    <a href="http://twitter.com/#!/Octopixell"><img src="{{ STATIC_URL }}images/twitter_icon.png" alt="twitter_logo"></a>
    <div id="tweetcontainer">
        {% get_tweet_list 5 as tweets %}
        {% for tweet in tweets %}
            <div class="tweettop"></div>
                <div class="tweet">
                    {{ tweet.text|safe|twitterize }} <br /> {{ tweet.created_at|date:"M d, Y" }}
                </div>
            <div class="tweetbottom"></div>
        {% endfor %}
    </div>
</div>

{% get_tweet_list 5 as tweets %} - это строка 85


Также приведена трассировка ошибки:

Traceback:
File "/home/mstrijker/webapps/django/lib/python2.7/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/mstrijker/webapps/django/vorm4ufolio/portfolio/views.py" in index
  17.     return render_to_response('index.html', {'new_list': new_list,}, context_instance=RequestContext(request))
File "/home/mstrijker/webapps/django/lib/python2.7/django/shortcuts/__init__.py" in render_to_response
  20.     return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/home/mstrijker/webapps/django/lib/python2.7/django/template/loader.py" in render_to_string
  188.         return t.render(context_instance)
File "/home/mstrijker/webapps/django/lib/python2.7/django/template/base.py" in render
  123.             return self._render(context)
File "/home/mstrijker/webapps/django/lib/python2.7/django/template/base.py" in _render
  117.         return self.nodelist.render(context)
File "/home/mstrijker/webapps/django/lib/python2.7/django/template/base.py" in render
  744.                 bits.append(self.render_node(node, context))
File "/home/mstrijker/webapps/django/lib/python2.7/django/template/debug.py" in render_node
  73.             result = node.render(context)
File "/home/mstrijker/lib/python2.7/oauth2-1.5.170-py2.7.egg/oauth2/__init__.py" in request
  662.         req.sign_request(self.method, self.consumer, self.token)
File "/home/mstrijker/lib/python2.7/oauth2-1.5.170-py2.7.egg/oauth2/__init__.py" in sign_request
  493.             self['oauth_body_hash'] = base64.b64encode(sha(self.body).digest())

Exception Type: TemplateSyntaxError at /
Exception Value: Caught TypeError while rendering: must be string or buffer, not None

Я надеюсь, что это предоставит вам, ребята, необходимую информациютребуется, чтобы помочь мне решить эту проблему.Если вам, ребята, нужна дополнительная информация или код, просто спросите меня, и я предоставлю это.

Ответы [ 2 ]

1 голос
/ 13 мая 2011

Я просмотрел сообщение с кодом oauth2 и сомневаюсь, что значение по умолчанию post_body в подписи oauth_req должно быть '', а не None.

def oauth_req(url, http_method="GET", post_body=None, http_headers=None):

Попробуй.

0 голосов
/ 27 апреля 2013

Эта проблема заключается в том, что в модуле python-oauth2 имеется ошибка, из-за которой выдается ошибка TypeError, когда тело запроса (или последующего запроса) равно None. Вот функция sign_request в oauth2/\_\_init\_\_.py:

def sign_request(self, signature_method, consumer, token):
    """Set the signature parameter to the result of sign."""

    if not self.is_form_encoded:            
        # according to
        # http://oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html
        # section 4.1.1 "OAuth Consumers MUST NOT include an
        # oauth_body_hash parameter on requests with form-encoded
        # request bodies."
        self['oauth_body_hash'] = base64.b64encode(sha(self.body).digest())

    if 'oauth_consumer_key' not in self:
        self['oauth_consumer_key'] = consumer.key

    if token and 'oauth_token' not in self:
        self['oauth_token'] = token.key

    self['oauth_signature_method'] = signature_method.name
    self['oauth_signature'] = signature_method.sign(self, consumer, token) 

Строка 493:

self['oauth_body_hash'] = base64.b64encode(sha(self.body).digest())  

Так что каким-то образом тело устанавливается на None. Так как httplib2 устанавливает тело запроса на None при следующих перенаправлениях, я предполагаю, что при развертывании в Интернете где-то возникает новое перенаправление, которому следует httplib2, которое затем устанавливает тело на None и вызывает эту ошибку.

Хорошей новостью является то, что эту ошибку я исправил и выдал запрос на извлечение . До тех пор, пока он не будет принят, вы можете либо отредактировать свой собственный файл oauth2/\_\_init\_\_.py, чтобы обработать случай, когда тело None или загрузите и используйте мою версию python-oauth.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...