【问题标题】:Can't pull text field value into Backend. Django无法将文本字段值拉入后端。姜戈
【发布时间】:2017-12-28 09:16:01
【问题描述】:

我正在使用一个简单的 HTML 表单将数据传递到我的 Django 应用程序的后端。

我没有使用 Django 表单,因为我不需要更新数据库。

但是,我无法从表单中提取数据。

HTML 代码:

<form onsubmit="return false;">
    {% csrf_token %}
    <div class="col-md-6">
        <div class="input-group input-group-lg wow fadeInUp" data-wow-delay='0.8s'>
            <input type="text" id="fullname" required>
        </div>      
        <button onclick="SendMessage()">Send Your Message</button>
    </div>
    <div id="output"></div>
</form>

JQuery 代码:

<script type="text/javascript">
    function SendMessage() {
        // $('.ajaxProgress').show();
        $.ajax({
            type: 'POST',
            url: ' {% url "payligent:send_message" %} ',
            dataType: 'json',
            async: true,
            data: {
                csrfmiddlewaretoken: '{{csrf_token}}',
                fullname: $('#fullname').val()
            },
            success: function (json) {
                $('output').html(json.message);
                $('ajaxProgress').hide();
            }
        });
    }
</script>

查看:

def send_message(request):
    test = request.POST.get('fullname')
    response_data = {}
    try:
        response_data['message'] = test
    except:
        response_data['message'] = 'Oh Snap! message was not sent correctly'
    return HttpResponse(json.dumps(response_data), content_type='text/html')

当我浏览到:http://127.0.0.1:8000/sendmessage/ 时,我得到的是null,而不是我在表格中填写的姓名:

{"message": null}

我正在关注this 教程。

【问题讨论】:

    标签: jquery python ajax django forms


    【解决方案1】:

    似乎我只是忘记在输出 div 中添加“#”号。所以应该是:

    $('#output').html(json.message);
    

    代替:

    $('output').html(json.message);
    

    【讨论】:

      【解决方案2】:

      request.POST 仅在请求帖子下有效,但如果您浏览到http://127.0.0.1:8000/sendmessage/,您当然会得到空值,因为您在request.GET 下而不是request.POST。

      又一次,你错过了name="fullname"。

      希望对你有用;

      <form id="form-message" method="post">
        {% csrf_token %}
        <div class="col-md-6">
          <div class="input-group input-group-lg wow fadeInUp" data-wow-delay='0.8s'>
            <input type="text" id="fullname" name="fullname" required>
          </div>
      
          <button type="submit">Send Your Message</button>
        </div>
        <div id="output"></div>
      </form>
      
      <script type="text/javascript">
        var form = $('#form-message');
        var output = $('#output');
      
        form.submit(function () {
            $.ajax({
                type: "POST",
                url: "{% url 'payligent:send_message' %}",
                data: form.serialize(),
                success: function(message) {
                  output.html(message);
                },
                error: function(message) {
                  output.html(message);
                }
            });
            return false;
        });
      </script>
      

      在你的views.py:

      def send_message(request):
          response_data = {}
          if request.method == 'POST':
              fullname = request.POST.get('fullname', None)
              if fullname is not None:
                  response_data['message'] = fullname
              else:
                  response_data['message'] = 'Oh Snap! message was not sent correctly'
          else:
              response_data['message'] = 'Request POST only!'
          return return HttpResponse(json.dumps(response_data))
      

      【讨论】:

        【解决方案3】:

        你可能需要改变你的观点,一点点,换行,

        test = request.POST['fullname']
        

        dict.get() 方法返回默认值'',如果dict 不包含指定的键。所以,try-except 无法捕捉到异常。 但是,通过像这样访问键值,如果不存在,则会引发 KeyError 异常。

        试试你的观点,也许是这样的,

        def send_message(request):
        response_data = {}
        try:
            response_data['message'] = request.POST['fullname']
        except:
            response_data['message'] = 'Oh Snap! message was not sent correctly'
        return HttpResponse(json.dumps(response_data), content_type='text/html')
        

        【讨论】:

          猜你喜欢
          • 2014-09-20
          • 2011-12-09
          • 2022-12-11
          • 2015-12-15
          • 1970-01-01
          • 1970-01-01
          • 2020-08-17
          • 2017-02-08
          • 1970-01-01
          相关资源
          最近更新 更多