我正在通过ajax将一些数据从html模板发送到views.py。从发送到views.py的id中我正在创建sql记录。但是我想知道是否有任何方法可以将views.py中的数据发送到模板,以通知该数据已添加到sql。
代码-
$('#tn1').click(function(){
var msg='';
alert('inside alert');
if ($('textarea#message') != "") {
var message = $('#notesarea').val();
alert(message);
msg=message;
}
$.ajax({
url: 'post_note',
data: {
'note': msg
},
success: function (data) {
alert(data)
}
});
views.py
def post_note(request,id):
post_id = request.GET['note']
print(post_id)
//sql insertion code,once its done i want to notify to the front end..print some alert message.
return render(request, './profile.html')
答案 0 :(得分:0)
您应该在视图中使用类似JSONResponse的内容,这样您的数据就会显示在成功函数中
success: function (data) {alert(data)}
答案 1 :(得分:0)
您可以在模板中使用JQuery Ajax并通过在views.py中创建一个“ API视图”来执行此操作,该视图基本上是一个常规视图,在检查以确认请求为Ajax后返回一个JSONResponse
。作为“ API”选项的示例,使用JQuery:
在views.py文件中(使用GET方法,仅在注释简短的情况下才应使用该方法,该方法将适合URL栏,并且如果您没有重大安全问题,否则请参阅底部的POST示例):
from django.http import JsonResponse
def post_note_api(request):
data = {}
if request.GET.get('post_note', None) is not None:
post_note = request.GET.get('post_note')
# save the note and indicate success
data['result'] = True
data['message'] = "Note posted successfully"
...
if request.is_ajax():
return JsonResponse(data)
else:
return HttpResponseBadRequest()
在您的urls.py中:
...
path('/api/post_note/', post_note_api, name="post_note_api"),
...
在模板中(如果您使用的是GET方法):
<script type="text/javascript">
$("#tn1").click(function(){
var message = $("#myTextArea").val();
$.ajax({ url: '{% url 'post_note_api' %}?post_note=' + message,
type: "GET",
dataType: "json",
cache: false
}).done(function(data) {
if (data.result === true){
alert(data.message);
}
});
});
});
</script>
如果您使用的是POST方法而不是GET(这里可能是更好的选择):
<script type="text/javascript">
$("#tn1").click(function(){
var csrfToken = $( "input[name='csrfmiddlewaretoken']");
var message = $("#myTextArea").val();
$.ajax({ url: '{% url 'post_note_api' %}',
type: "POST",
dataType: "json",
data: {'post_note':message, 'csrfmiddlewaretoken':csrfToken.val()},
cache: false
}).done(function(data) {
if (data.result === true){
alert(data.message);
}
});
});
});
</script>
对于POST方法,您只需将request.GET.get('post_note') ...
更改为request.POST.get('post_note') ...
即可,
from django.http import JsonResponse
def post_note_api(request):
data = {}
if request.POST.get('post_note', None) is not None:
post_note = request.POST.get('post_note')
# save the note and indicate success
data['result'] = True
data['message'] = "Note saved successfully"
...
if request.is_ajax():
return JsonResponse(data)
else:
return HttpResponseBadRequest()
通过POST发送数据时,请不要忘记像上面的示例一样传递CSRF令牌。假定您在页面上有一个表单可以从中获取,否则您可以使用类似的方法获取它:
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
var csrftoken = getCookie('csrftoken');
如果您不想使用CSRF令牌,则可以使用@csrf_exempt
装饰器标记视图,并从模板中的Ajax调用中删除“ csrfmiddlewaretoken
”数据元素,但是它可能不是理想的,也不是最安全的。一个例子:
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
@csrf_exempt()
def post_note_api(request):
...
现在,在不了解更多信息的情况下,这基本上只是伪代码(加上我只是在脑海中写下了这个代码,因此可能会有错误)。如果您发布更多详细信息,我可以更新我的答案,但是我认为这应该可以帮助您入门。
答案 2 :(得分:0)
我在下面使用过从HTML将数据发送到views.py,然后将成功响应返回给HTML。希望对您有所帮助:)
HTML代码:
<a href="{% url 'save' %}"><button class="button primary fit small" onclick="saveContent()">Save</button></a>
JavaScript代码:
<script>
function saveContent(){
var code =editor.getSession().getValue();
var URL = "{% url 'save' %}";
var data = {'code': code};
$.post(URL, data, function(response){ // This is the main function that will help you
if(response === 'success'){ window.location.reload(); }
else{ alert('Error! :('); }
});
}
</script>
View.py:
def save_content(request):
if request.method == 'POST':
if 'code' in request.POST:
file_data = request.POST['code']
return HttpResponse('success')