我正在使用一个简单的HTML表单将数据传递到我的Django应用程序的后端。
我没有使用Django表单,因为我不需要更新数据库。
但是,我无法从表单中提取数据。
HTML code:
<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教程。
答案 0 :(得分:1)
您可能需要更改视图,稍微改变一下,
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')
答案 1 :(得分:1)
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))
答案 2 :(得分:0)
似乎我只是忘了添加&#34;#&#34;签到输出div。所以它应该是:
$('#output').html(json.message);
而不是:
$('output').html(json.message);