python - 如何解决 django rest-frame-workd 中的错误请求
问题描述
我创建了一个接受用户电子邮件和密码登录的 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)
}
我的串行器
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 bad request。请我需要弄清楚我做错了什么。提前致谢。
在我的控制台日志中,当我打印出服务器响应数据时,您可以在下面看到
Object { detail: "JSON parse error - Expecting value: line 1 column 1 (char 0)" }
解决方案
我不应该包括
xhr.setRequestHeader("内容类型","应用程序/json")
在我的标题中
推荐阅读
- python - 连接列表直到某个字符
- python - Kivy:如何在不关闭弹出窗口的情况下更新弹出标签文本
- c++ - 了解 KCachegrind/callgrind
- python - 如何通过 Tweepy 过滤位置和关键词?
- api - 访问令牌撤销在 wso2 Api 管理器中不起作用
- html - HTML表格行高问题(height="x" vs style="height:x")
- google-cloud-storage - 将 GCS 存储桶备份到存档级 GCS 存储桶
- reactjs - 无法在打包的电子应用程序中加载 svg
- c# - C# gRPC localhost - 启动 gRPC 调用时出错:不知道这样的主机
- pyspark - 如何在 PySpark 数据框中转换 yyyymmddhhmmss