【问题标题】:How should a django app handle a post request from a reactjs formdjango 应用程序应该如何处理来自 reactjs 表单的发布请求
【发布时间】:2019-07-06 05:43:00
【问题描述】:

我在我的django应用中写了一个views函数用于用户注册,代码如下:

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')

reactjs 代码为:

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");
        }
      };

网站的前端是用 reactjs 制作的,当我尝试从 react 应用发送 POST 请求进行注册时,它没有注册用户。

此外,当我从邮递员向其发送发布请求以进行用户注册时,它可以正常工作并创建用户。但是,当我尝试从邮递员那里发送一个 json 对象时,像这样

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

它显示以下错误:

KeyError at /accounts/register
'userName'

我应该如何解决这个问题?我可以通过哪些方式在 Django 中处理来自 react 应用程序的 POST 请求?

后端 django 应用也上传到 heroku 服务器,前端 react 应用使用上传到 heroku 的应用的 url。

【问题讨论】:

  • 使用 django rest 进行 json 操作很容易
  • 能否在您的 React 应用中包含创建 POST 请求的 js 代码?
  • 添加了 reactjs 代码。

标签: python django reactjs django-views


【解决方案1】:

这两行都是废话:

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

将表单数据字典转换为 JSON 然后直接返回 Python 是没有任何意义的。

但是,您的问题是您不是首先发送表单数据,而是发送 JSON。将这些行替换为:

    data = json.loads(request.body)

【讨论】:

    【解决方案2】:

    如果 POST 请求与邮递员一起工作正常,那么您从 reactjs 发送的 JSON 格式可能有问题。 控制台 this.state 并检查它是否是正确的 JSON 格式。

    【讨论】:

    • 表单中的json格式如下:{'userName':'abcdef','phoneNumber':'123456789',email='abc@xyz.com','password':'1234','confirmpassword':'1234','agencyName':'abbb'}
    • 电子邮件应该在引号内
    猜你喜欢
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 2020-12-19
    • 2018-04-30
    • 1970-01-01
    • 2018-03-03
    • 2012-11-28
    • 1970-01-01
    相关资源
    最近更新 更多