【问题标题】:Django : Type error at/ <User: user1> is not JSON serializableDjango:类型错误 / <User: user1> is not JSON serializable
【发布时间】:2015-01-03 16:26:57
【问题描述】:

我收到显示“不是 JSON 可序列化”的类型错误。 添加会话相关代码后,出现此错误。

views.py

def jlogin(request):
    if request.method == 'POST':
        username = request.POST['uname']
        password = request.POST['pword']
        user = authenticate(username=username, password=password)
        if user is not None:
            login(request,user)
            print(user)
            request.session['user']=user
            return redirect('/feeds/')
        else:
            return render(request,'join/login.html')
    else:
        user = request.session.get('user')
        print(user)
        if user is None:
            return render(request,'join/login.html')
        else:
            return render(request,'feeds/feeds.html')

登录.html

<!DOCTYPE html>
<html>
<head>
    <title>Login to dEEPsIGMA</title>
</head>
<body>
<form action="." method="post" enctype="multipart/form-data">
    {% csrf_token %}
    Username :
    <input type="text" name="uname"/> <br>
    Password :
    <input type="text" name ="pword"/>
    <input type="submit">

</form>
</body>
</html>

追溯:

File "C:\Python27\lib\site-packages\django-1.8-py2.7.egg\django\core\handlers\base.py" in get_response
  207.                 response = middleware_method(request, response)
File "C:\Python27\lib\site-packages\django-1.8-py2.7.egg\django\contrib\sessions\middleware.py" in process_response
  49.                         request.session.save()
File "C:\Python27\lib\site-packages\django-1.8-py2.7.egg\django\contrib\sessions\backends\db.py" in save
  58.             session_data=self.encode(self._get_session(no_load=must_create)),
File "C:\Python27\lib\site-packages\django-1.8-py2.7.egg\django\contrib\sessions\backends\base.py" in encode
  89.         serialized = self.serializer().dumps(session_dict)
File "C:\Python27\lib\site-packages\django-1.8-py2.7.egg\django\core\signing.py" in dumps
  89.         return json.dumps(obj, separators=(',', ':')).encode('latin-1')
File "C:\Python27\lib\json\__init__.py" in dumps
  250.         sort_keys=sort_keys, **kw).encode(obj)
File "C:\Python27\lib\json\encoder.py" in encode
  207.         chunks = self.iterencode(o, _one_shot=True)
File "C:\Python27\lib\json\encoder.py" in iterencode
  270.         return _iterencode(o, 0)
File "C:\Python27\lib\json\encoder.py" in default
  184.         raise TypeError(repr(o) + " is not JSON serializable")

Exception Type: TypeError at /
Exception Value: <User: user1> is not JSON serializable

请帮助解决这个错误。解释为什么会出现这个错误。

【问题讨论】:

标签: python json django serialization


【解决方案1】:

产生错误的行是:

request.session['user']=user

Django 在 1.6 版本之后一直使用 JSON 序列化会话数据。更多关于这个Django documentation。用户对象不是 JSON 可序列化的。因此,您需要确保存储在会话变量中的对象应该是 JSON 可序列化的。在 Django 1.6 之前,Django 使用的序列化程序是 PickleSerializer,您的代码可以完美运行。

要使您的代码正常工作,您可以执行以下操作之一:

  1. 存储用户 ID 而不是用户对象。
  2. Create your own serializer for User object

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2013-11-25
    • 2019-05-06
    • 2019-10-09
    • 2021-03-02
    • 2017-05-10
    相关资源
    最近更新 更多