Объект типа UserForm не JSON сериализуемый - PullRequest
0 голосов
/ 23 января 2020

Я запускаю приложение 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 голосов
/ 23 января 2020

Формы используются для «пользовательских интерфейсов» (пользователь, который установил за его / ее P C и заполнил форму). Для мобильных приложений (или веб-приложений) в вашем бэкэнде должен быть «интерфейс прикладного программирования (API)», который может взаимодействовать с этими системами (например, мобильными приложениями).

Этот API-интерфейс просто получает данные (например, информацию о пользователе) из тела запроса (может быть, как JSON), например:

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

Таким образом, запрос на получение конечной точки регистрации может иметь вид:

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

При отделении бэкэнда от веб-интерфейса бэкэнд больше не участвует в процессе получения информации, пока она находится в правильный формат (например, JSON), поэтому данные могут быть результатом того, что пользователь заполнил форму, или результатом AJAX вызова или через POSTMAN ... et c.

Таким образом, вам, возможно, придется переписать функцию в нечто подобное:

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.

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