class ApiLoginView(TemplateView):
template_name = 'index.html'
def post(self,request):
email = request.POST.get('Email')
password = request.POST.get('Password')
print(email)
print(password)
API_KEY = GetAPIkey().api_key_token()
API_URL = GetAPIurl().api_url_token()
parameter = {
'authToken':API_KEY,
'email':email,
'password':password,
}
url = '{}{}'.format(API_URL,'/rest/storeLogin')
r = requests.post(url = url, params=parameter)
print(r.url)
print(request.user)
return HttpResponse(r)
我正在尝试从request.POST方法获取数据,但是每次我打印电子邮件和密码时,它都向我发送NONE值。我在哪里错?我在做ajax电话错误吗?当我使用表单submi进行ajax调用时,它工作正常,但现在我使用按钮单击进行ajax调用。
<form class="my-login-form" id="sanjh_login_form" method="post" url="/login">
{% csrf_token %}
<div id="login-data"></div>
<div class="field-wrap">
<input id='id_login-email' type="email" name="Email" required autocomplete="off" placeholder="Email Id">
</div>
<div class="field-wrap">
<input id='id_login-password' type="password" name="Password" required autocomplete="off" placeholder="Password">
</div>
<button id="login-btn" type="button" class="button button-block" >Login</button>
<div class="forgot"><a class="user-form-toggle" href="#forgot">Forgot Password?</a></div>
</form>
ajax通话
<script>
$(document).ready(function(){
$('#login-btn').click(function(event){
console.log('hi-login')
$.ajax({
method: "POST",
url: '/login',
data: {
email : $('#id-login-email').val(),
password : $('#id-login-password').val(),
csrfmiddlewaretoken:'{{ csrf_token }}'
},
success: function(res) {
var response = $.parseJSON(res)
console.log(response.msg)
$('#login-data').html(response.msg);
},
})
})
})
</script>
答案 0 :(得分:5)
我不会告诉您代码的答案,而是告诉您如何调试此类问题:
由于值为None
,因此可以得出结论,您的ajax调用未传递键“ Email”和“ Password”。确实,当我查看您的代码时,您的ajax数据设置为“电子邮件”和“密码”。那是你的第一个错误。
接下来,您打印了request.POST
,发现甚至没有通过“电子邮件”和“密码”。查看如何从表单中获取值,我发现您正在寻找id的“ id-login-email”和“ id-login-password”,它们在您的HTML中不存在(您有“ id_login-email” ”和“ id_login-password”)。所以这是您的第二个错误。
如果还有其他问题,请尝试在javascript中设置断点(例如,在$.ajax
行上),然后使用控制台检查要分配的值,例如在控制台中输入$(#id_login-email).val()
来检查它是否正确。
最后,始终在您的post()
方法中打印或添加断点以查看request.POST
的内容,这是了解客户实际提交内容的最佳方法。
答案 1 :(得分:1)
在我的情况下,request.POST.get('value')
不起作用。
但是request.data.get('value')
起作用了。
试试这个。
答案 2 :(得分:-1)
我在使用输入搜索时遇到了这个问题
search = request.POST.get('search')
这给了我一个“无”
<input type='text'/>
request.POST.get('search') |您应该在输入中添加“名称”属性以使用此 POST.get() 方法
<input type='text' name = 'search' />
太简单了...