Как приложение django должно обрабатывать пост-запрос из формы реагирования - PullRequest
0 голосов
/ 06 июля 2019

Я написал функцию views в моем приложении django для регистрации пользователей, код для которой выглядит следующим образом:

def register(request):

    if request.method == 'POST':
        data1 = json.dumps(request.POST)
        data = json.loads(data1)
        full_name = data['userName']
        company_name = data['agencyName']
        phone = data['phoneNumber']
        email_id = data['email']
        password = data['password']
        password2 = data['confirmpassword']

            #Check if passwords match
        if password == password2:
            #Check username
            if MyUser.objects.filter(email=email_id).exists():
                messages.error(request,'That email is being used')
                return redirect('register')
            else:
                #Looks good
                user = MyUser.objects.create_user(password=password,
                                                email=email_id, full_name=full_name,company_name=company_name,phone=phone)

                user.save()
                messages.success(request,'You are now registered')
                return HttpResponse(json.dumps({'success':'success'}), content_type='application/json')
        else:
            messages.error(request,'Passwords donot match')
            return HttpResponse(json.dumps({'error':'password donot match'}), content_type='application/json')

        return HttpResponse(json.dumps({'none':'none'}),content_type='application/json')

Код реагирования:

class SignupForm extends Component {
    constructor(props) {
        super(props);

        this.state = {
          userName: null,
          agencyName: null,
          email: null,
          password: null,
          confirmpassword: null,
          phoneNumber: null,
          formErrors: {
            userName: "",
            agencyName: "",
            email: "",
            password: "",
            confirmpassword:"",
            phoneNumber :""
          }
        };
      }

      handleSubmit = e => {
        e.preventDefault();

        if (formValid(this.state)) {
          fetch('https://localhost:8000/accounts/register', {
            method: 'POST',
            body: this.state,
            headers:{
            // 'Access-Control-Allow-Origin':'*',
            'Content-Type':'application/json',
          }
            });
        } else {
          console.error("FORM INVALID - DISPLAY ERROR MESSAGE");
        }
      };

Front-Конец веб-сайта сделан в activjs, и когда я пытаюсь отправить POST-запрос из приложения реакции для регистрации, он не регистрирует пользователя.

Также, когда я отправляю ему почтовый запрос отрегистрация пользователей работает нормально и создает пользователя.Однако, когда я пытаюсь отправить объект json из почтальона, например,

{'userName':'abcdef','phoneNumber':'123456789',email='abc@xyz.com','password':'1234','confirmpassword':'1234','agencyName':'abbb'}

, появляется следующая ошибка:

KeyError at /accounts/register
'userName'

Как мне решить эту проблему?Каким образом я могу обработать POST-запрос в Django из приложения реагирования?

Кроме того, внутреннее приложение django загружается на сервер heroku, а интерфейсное приложение реакции использует URL-адресаприложение загружено на героку.

Ответы [ 2 ]

1 голос
/ 06 июля 2019

Эти две строки бессмысленны:

    data1 = json.dumps(request.POST)
    data = json.loads(data1)

Никогда не будет смысла преобразовывать данные формы в JSON и затем обратно в Python.

Однако ваша проблема заключается в том, что вывы не отправляете данные формы в первую очередь, а вы отправляете JSON.Замените эти строки на:

    data = json.loads(request.body)
0 голосов
/ 06 июля 2019

Если POST-запрос работает нормально с почтальоном, возможно, что-то не так с форматом JSON, который вы отправляете с реагировать. Консоль this.state и проверьте, что он в правильном формате JSON.

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