request.POST.get()没有给出

时间:2018-09-14 10:15:15

标签: 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)

我正在尝试从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>

3 个答案:

答案 0 :(得分:5)

我不会告诉您代码的答案,而是告诉您如何调试此类问题:

  1. 由于值为None,因此可以得出结论,您的ajax调用未传递键“ Email”和“ Password”。确实,当我查看您的代码时,您的ajax数据设置为“电子邮件”和“密码”。那是你的第一个错误。

  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的内容,这是了解客户实际提交内容的最佳方法。

答案 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' /> 

太简单了...