UserForm类型的对象不可JSON序列化

时间:2020-01-23 06:35:45

标签: python json django

我正在运行django应用程序。我有一个错误:

TypeError: Object of type UserForm is not JSON serializable

下面是代码:

forms.py:

from django import forms
from .models import Profile
from django.contrib.auth.models import User

class UserForm(forms.Form):
username=forms.CharField(widget=forms.PasswordInput)
password=forms.CharField(widget=forms.PasswordInput)
    class Meta():
         model=User
         fields=('username','password')

views.py:

def signup(request):
    registered=False
    failed_ref=False
    wrong_ref=False
    if request.method=='POST':
       user_form = UserForm(data=request.POST)
       if user_form.is_valid():
          user = user_form.save()
          user.set_password(user.password)
          user.save()
    user_form=UserForm()
    return JsonResponse({'user_form':user_form,'registered':registered,
                                                    'failed_ref':failed_ref,'wrong_ref':wrong_ref})

如何使此表格JSON可序列化?

1 个答案:

答案 0 :(得分:0)

表格用于“用户界面”(设置在PC后面并填写表格的用户)。对于移动应用程序(或网络应用程序),您应该在后端具有一个可以与这些系统进行通信的“应用程序编程接口(API)”(例如,移动应用程序)。

此API只是从请求正文(可能为JSON)接收数据(例如用户信息),例如:

{"email": "an emai", "pass": "secret"}

因此,您注册端点的请求可以采用以下形式:

POST: your_host:your_port/users or 
{"email": "an emai", "pass": "secret"...}

在将后端与前端分开时,只要信息采用正确格式(例如JSON),后端就不会更多地涉及信息的接收方式,因此数据可能是用户填写表格或AJAX调用或通过POSTMAN等的结果。

因此您的功能可能需要重写为类似的内容:

def signup(request):
    registered=False
    failed_ref=False
    wrong_ref=False
    if request.method=='POST':
       user_form = UserForm(data=request.POST)
       if user_form.is_valid():
          user = user_form.save()
          user.set_password(user.password)
          user.save()
          return HttpResponse(status=200)
       eles:
           return HttpResponse(status=400)

注意:此代码仅是示例性代码,最好使用类似django rest framework的代码。