我在烧瓶中有此代码,它向html发送2个列表,一个只是[1,2,3]之类的数字,另一个是[file1,file2,...]等一些名称
这是创建表格的html,第一个列表的列,第二个列表的列,以及onclick的相应按钮,将向烧瓶发送一个函数,以删除相应的文件:
<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})
答案 0 :(得分:0)
好吧,按照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,我必须在views.py的def func之前添加@csrf_exempt ...,当我在数据中添加csrfmiddlewaretoken时,django将不接受:'{{csrf_token}}' ,我该如何使用? 除了我仍然无法调用file_name.id之外,实际上我想访问myfile列表中的第n个元素,其中n也是view.py对html的输入。