json
  • django
  • 2015-07-02 2 views -1 likes 
    -1

    У меня есть приложение Django. В представлении я вызываю другую функцию (в stats.py), которая затем делает HTTP POST.<django.utils.functional.SimpleLazyObject объект в 0x2b4d1fe47650> не JSON serializable

    views.py

    from stats import Stat 
        a = Stat(example="12345") 
        a.use(id='query') 
    

    stats.py

    self.data = { example : "12345" } 
    
        req = urllib2.Request(api_url) 
        req.add_header('Content-Type', 'application/json') 
        response = urllib2.urlopen(req, json.dumps(self.data)) 
    

    Проблема, которая возникает в том, что я получаю ошибку,

    <django.utils.functional.SimpleLazyObject object at 0x2b4d1fe47650> is not JSON serializable 
    

    Джанго трассировки назад

    Глядя на Django TraceBack я получаю следующее,

    /prod/tools/lx/views.py in update_input 
    
          a.use(id='query') 
    
        ... 
    
    /prod/tools/main/stats.py in log_use 
    
          response = urllib2.urlopen(req, json.dumps(self.data)) 
    
        ... 
    
    /usr/local/lib/python2.7/json/__init__.py in dumps 
    
          return _default_encoder.encode(obj) 
    
        ... 
    
    /usr/local/lib/python2.7/json/encoder.py in encode 
    
          chunks = self.iterencode(o, _one_shot=True) 
    
        ... 
    
    /usr/local/lib/python2.7/json/encoder.py in iterencode 
    
          return _iterencode(o, 0) 
    
        ... 
    
    /usr/local/lib/python2.7/json/encoder.py in default 
    
          raise TypeError(repr(o) + " is not JSON serializable") 
    
        ... 
    

    Есть идеи?

    Спасибо,

    +0

    Почему это отмеченный вниз, и голосовавшего за близкие? – felix001

    +1

    Что такое 'self.data'? –

    +0

    вопрос обновлен. – felix001

    ответ

    0

    Попробуйте это с помощью urllib

    import urllib 
    ... 
        self.data = { example : "12345", 'Content-type':'application/json' }  
        self.data = urllib.urlencode(self.data) 
        req = urllib2.Request(api_url, self.data) 
        response = urllib2.urlopen(req) 
    
    +0

    тест в оболочке OP-код из stats.py (например, с api_url 'http://127.0.0.1:8000/') он работает ..., поэтому кажется, что проблемы нет – madzohan

    +0

    Это возвращает HTTP-ошибку 400: BAD REQUEST – felix001

    +0

    Эта ошибка возникает, когда поток данных, отправленный на сервер, неверен или недействителен, попробуйте сейчас –

    Смежные вопросы