如何解决Django rest-framed中的错误请求

时间:2020-08-15 03:58:49

标签: python html django django-rest-framework

我创建了一个api,它接受用户电子邮件和密码登录。每当我尝试访问api时,都会收到错误的请求。我一直在寻找需求,看着我的代码。但是我仍然无法弄清楚自己在做什么。请帮忙

在我的html表单下面

 <form id="loginform"action="userlogin/" method="post" enctype="multipart/form-data">
 <div class="errors-field">
 </div>
 <div class="input-field">
 <label >
 Email
 </label>
 <input placeholder="Email"type="email" name="email" value=""required>
 </div>
 <div class="input-field">
 <label>
 Password
</label>
<input placeholder="Password"type="password" name="password" value=""required>
</div>
<button type="submit">Login</button>
</form>

下面的我的Java脚本

const lgform  = document.querySelector('#loginform')
lgform.addEventListener('submit',loginForm)
function loginForm(event){
    event.preventDefault()
    const myform      = event.target
    const myFormData  = new FormData(myform)
    const url         = myform.getAttribute("action")
    const method      = myform.getAttribute("method")
    const csrftoken = getCookie('csrftoken')
    const xhr         = new XMLHttpRequest()
    xhr.open(method,url)
    xhr.setRequestHeader("Content-Type","application/json")
    xhr.setRequestHeader("HTTP_X_REQUEST_WITH","XMLHttpRequest")
    xhr.setRequestHeader("X-Requested-with","XMLHttpRequest")
    xhr.setRequestHeader("X-CSRFToken",csrftoken)
    xhr.onload=function(){
    const serverResponse = xhr.response
    const serverData     = JSON.parse(serverResponse)
    console.log(serverData.email)
    if(xhr.status==200){
    if(serverData.token){
        cname  = "user" 
        cvalue = serverData.token
        exdays = 1
        setCookie(cname, cvalue, exdays)
        }
    }

}
xhr.onerror=function(){
  console.log('error')
}

xhr.send(myFormData)

}

我的ser虫症

class loginUserSerializer(serializers.Serializer):
    password = serializers.CharField(style={'input_type':'password'},write_only=True,required=True)
    email    = serializers.EmailField(required=True)
    def validate_email(self,value):
    
        data = self.get_initial()
        pw   = data.get('password')
        email= value 
        user=authenticate(email=email,password=pw)
        if not user or not user.is_active:
            raise serializers.ValidationError('email or password not correct')
        
       return value

我的api视图

class loginUser(ObtainAuthToken):

    def post(self,request,*args,**kwargs):
        data ={}
        serializer  = loginUserSerializer(data=request.data)
    
        if serializer.is_valid(raise_exception=True):
            email    = serializer.validated_data['email']
            password = serializer.validated_data['password']
            user     = authenticate(email=email,password=password)
            if user is not None and user.is_active:
                try:
                    usertoken = Token.objects.get(user=user)
                    data ={'token':usertoken.key}
                   print(usertoken)
              except:
                pass
             else:
                 data =serializer.errors
        return Response(data,status=200)

提交表单时,我收到api错误请求。请我需要弄清楚我在做什么错。预先感谢。

在控制台日志中,当我打印出服务器响应数据时,您可以在下面看到

Object { detail: "JSON parse error - Expecting value: line 1 column 1 (char 0)" }

1 个答案:

答案 0 :(得分:-1)

我不应该包括在内

xhr.setRequestHeader(“ Content-Type”,“ application / json”)

在我的标题中

相关问题