request.POST.get()给出None

Chi*_*yak 0 django

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)
Run Code Online (Sandbox Code Playgroud)

我正在尝试从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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

dir*_*ten 5

我会告诉你如何调试这些问题,而不是用代码给出答案:

  1. 由于这些值None可以得出结论,您的ajax调用不会传递"电子邮件"和"密码"键.实际上,当我查看您的代码时,您的ajax数据将设置为"email"和"password".这是你的第一个错误.

  2. 接下来,您打印request.POST并看到即使是"电子邮件"和"密码"也未通过.看看如何从表单中获取值,我看到你正在寻找id的"id-login-email"和"id-login-password",这些在你的HTML中不存在(你有"id_login-email" "和"id_login-password").所以这是你的第二个错误.

  3. 如果还有更多问题,请尝试在javascript中设置断点(例如在线上$.ajax)并使用控制台检查您分配的值,例如$(#id_login-email).val()在控制台中键入以检查它是否正确.

  4. 最后,始终在post()方法中打印或添加断点以查看内容request.POST,这是了解客户端实际提交内容的最佳方式.