Django,ajax用于按钮onclick



我在flask中有这个代码,它向html发送两个列表,一个只是数字,如[1,2,3],另一个是一些名称,如[file1,file2,…]

这是一个html,它制作了一个表,一列用于第一个列表,另一列用于第二个列表,以及一个相应的按钮,onclick将向flask发送一个删除相应文件的函数:

<div class="row">
<div>
<table id="mytables" class="table table-striped" style="float: inherit;">
<thead>
<tr>
<th>id</th>
<th>Name</th>
<th>file_size</th>
</tr>
</thead>
<tbody>
{% for id in ids %}
<tr href="#">
<td>{{id+1}}</td>
<td>{{file_name[id]}}</td>
<td>
<button onclick="delete_f('{{file_name[id]}}')" id="d{{id}}" type="button"
class="btn btn-xs btn-primary">Delete
</button>

</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>

这是javascript:

<script>
function delete_f(name) {
$.ajax({
url: '/delete_f',
data: name,
contentType: 'application/json;charset=UTF-8',
type: "POST",
async: false,
success: function (response) {
document.location.reload(true);
}
});
}
</script>
and this is the flask:
@app.route('/delete_f', methods=['POST'])
def delete_f():
name = request.data
os.remove('E:/Office/DLP/sourceCode/Flask/newwork/static/files/' + name)
return "das"

这很好,我想在django中实现,我的第一个问题是django不支持这一行:{{file_name[id]}}第二个问题是,无论我做什么,django都不会接受ajax函数的POST变量,这是views.py:中的django代码

@csrf_exempt
def DeleteJobFile(request):
if request.method == 'POST':
fs = FileSystemStorage()
name = request.POST('FileName')
print(name)
fs.remove('E:/Office/DLP/sourceCode/Flask/newwork/static/files/' + name)
else:
print('no')
return render(request, 'JobApp/JobApp.html', {'FileList': FileList})

好吧,我开始工作了,根据hansTheFranz的说法,我尝试了打印请求。body,所以我首先将其字符串化为{"name":"SomeOne"}格式,然后在我的视图函数中对其进行解码,这是我的代码:这是html:

function DeleteJobFile(name) {
var obj = {'FileName':name};
var myJSON = JSON.stringify(obj);
$.ajax({
type: 'POST',
url: 'DeleteJobFile/',
{#                data: name#}
data:myJSON,
contentType: 'application/json;charset=UTF-8',
async: false,
dataType: 'json',
success: function (response) {
document.location.reload(true);
alert("The text has been changed." + name);
}
});
}

这是观点:

def DeleteJobFile(request):
if request.is_ajax():
body_unicode = request.body.decode('utf-8')
body = json.loads(body_unicode)
name = body['FileName']    
print(name)
else:
print('no')
return render(request, 'JobApp/JobApp.html', {'FileList': FileList})

如果有更简单的方法,请通知我。还有一件事是处理CSRF的事情,我必须在我的def函数之前添加@CSRF_exempt。。。在views.py,django不接受我在数据中添加csrfmiddlewaretoken:"{{csrf_token}}",我该如何使用它?此外,我仍然有调用file_name.id的问题,实际上我想访问myfile列表中的第n个元素,其中n也是view.py中html的输入。

最新更新