在发送表单时没有Django POST数据?



我在开发服务器上(没有CSRF保护),通过web表单(Django: 127.0.0.1:8000)发送登录数据给Django。HTML:

<!DOCTYPE html>
<html>
<head>
<title>Log In</title>
<meta charset="utf-8">
</head>
<body>
<script src="https://code.jquery.com/jquery-3.6.0.js" integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk=" crossorigin="anonymous"></script>
<header>
</header>
<script> 
$("document").ready(function () {
$("header").load("static/header.html");
})
</script>
<div id="loginbox">
<h3>Log In</h3>
<form action="http://127.0.0.1:8000" method="post">
<input type="text" id="uname"><br>
<input type="password" id="pass"><br>
<button id="login" type="submit">Log In</button></br>
</form>
<a href="signup.html">Sign Up</a><br>
<a href="forgotCredentials.html">Forgot Username/Password?</a>
</div>
</body>
</html>

Django:

from django.shortcuts import render
# Create your views here.

from django.contrib.auth import authenticate, login
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
@csrf_exempt
def index(request):
uname = request.POST.get("uname")
passwd = request.POST.get("pass")
print(uname + " pass " + passwd)
user = authenticate(username=uname, password=passwd)
if user is not None:
login(request, user)
return render(request, "taxnow/index.html")
return render(request, "taxnow/Login.html")

我很确定POST数据在打印语句中没有被传输(TypeError:不支持的操作数类型(s) +: 'NoneType'和'str'),但我不知道为什么。(如上所述,HTML在本地主机上,django在127.0.0.1:8000上。)这有什么原因吗?

request.POST中,您没有来自id属性的键,但来自name。将它添加到输入中,就可以了。

<input type="text" id="uname" name="uname"><br>
<input type="password" id="pass" name="pass"><br>

最新更新