我正在尝试发送帖子请求并根据该信息对用户进行身份验证。然而,即使我已经检查了$('#sign_in').serialize()
的结果并返回username=test&password=test
之类的内容,但当我在views.py中运行<QueryDict: {}>
时,它仍会返回print(request.POST)
。我做错了什么,为什么不传递参数?
ajax功能
function logIn() {
var username = $('#id_username').val();
var password = $('#id_password').val();
console.log($('#sign_in').serialize())
$('#sign_in_btn').text('Logger ind...');
$.ajax({
url: "/account/login/",
type: "POST",
dataType: 'json',
contentType: 'application/json',
data: $('#sign_in').serialize(),
success: function (data) {
console.log(data)
}, error: function (error) {
}
});
}
views.py
def login(request):
print(request.POST)
if request.method == "POST":
form = SignInForm(data=request.POST)
response_data = {}
if form.is_valid():
username = request.POST.get("username", False)
password = request.POST.get("password", False)
user = authenticate(username=username, password=password)
auth_login(request, user)
if user:
response_data['success'] = True
response_data['message'] = 'Brugeren er blevet oprettet!'
else: #invalid case
response_data['success'] = False
response_data['message'] = 'Forkert brugernavn/kodeord. Prøv venligst en anden kombination eller tryk på glemt kodeord!'
print(form.errors)
return HttpResponse(json.dumps(response_data), content_type='application/json')
else:
form = SignInForm()
return render(request, 'login.html', {'form': form})
答案 0 :(得分:1)
您需要将contentType
更改为 application / x-www-form-urlencoded ,或将其留空,因为其默认值为 应用程序/ x-WWW窗体-urlencoded;字符集= UTF-8 即可。
事情是
.serialize()
返回表单的内容 URL编码不是JSON。
答案 1 :(得分:0)
lcastillov已经回答了你的问题,但如果你想将json数据发送到服务器,这里有几件你应该注意的事情。
您将在request.data
中获取数据,因为您已将contentType设置为 application / json
$ .ajax()函数的data
属性也应该是 json 格式
data: {
"username": "test",
"password": "test"
}
现在您可以轻松地在视图中获取数据
request.data["username"]
request.data["password"]
request.POST
用于具有contentType的表单编码数据 的 应用程序/ x-WWW窗体-urlencoded 强>