huikejie

form表单发送文件

form表单默认传送格式contentType为urlencoded 当传送文件的时候我们需要在form表单中 enctype="multipart/form-data"

不然只会发字符串的文件名字放个post中

前端代码

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css">
</head>
<body>

<form action="" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="myfile">
    <input type="submit">
</form>

</body>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
</html>

后端代码

def index(request):
    if request.method == \'POST\':
        # form表单传送文件需要在前端content_type : enctype="multipart/form-data"
        # form表单默认是urlencoded
        file_obj = request.FILES.get(\'myfile\')
        f = open(file_obj.name, \'wb\')
        for line in file_obj:
            f.write(line)
        return HttpResponse(\'ok\')
    return render(request, \'text.html\')

ajax传送文件

前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css">
</head>
<body>
{% csrf_token %}
<input type="file" name=\'myfile\' id="myfile">
<button id="submit">提交</button>
</body>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>


<script>
    $(\'#submit\').click(function () {
        let formDate = new FormData();
        fileObj = $(\'#myfile\')[0].files[0];
        formDate.append(\'myfile\', fileObj);
        formDate.append(\'username\', \'hkk\');
        formDate.append(\'password\', \'123\');

        $.ajax({
            url: \'\',
            type: \'post\',
            {#headers:{"X-csrftoken":$("[name=\'csrfmiddlewaretoken\']").val()},#}
            data: formDate,
            contentType: false,
            processData: false,
            success: function (data) {
                alert(data)
            }
        })
    })

后端代码

def index1(request):
    if request.method == \'POST\':
        print(request.POST)
        file_obj = request.FILES.get(\'myfile\')
        f = open(file_obj.name, \'wb\')
        for line in file_obj:
            f.write(line)
        return HttpResponse(\'ok\')
    return render(request, \'text1.html\')

 

ajax发送json格式的

需要在ajax中contentTyle:application/json

前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css">
</head>
<body>
{% csrf_token %}
<button class="btn btn-success" id="my_button">点我</button>
</body>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>

<script>
    $(\'#my_button\').click(function () {
        $.ajax({
            url: \'\',
            type: \'post\',
            contentType: \'application/json\',
            {#headers:{"X-csrftoken":$("[name=\'csrfmiddlewaretoken\']").val()},#}
            data: JSON.stringify({\'username\': \'hkk\', \'password\': \'123\'}),
            success: function (data) {
                alert(data)
            }
        })
    })
</script>
</html>

后端代码

def index2(request):
    if request.method == \'POST\':
        print(request.body)
        dic = json.loads(request.body.decode(\'utf-8\'))
        print(dic)
        return HttpResponse(\'ok\')
    return render(request, \'text2.html\')

 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-01-09
  • 2021-07-09
  • 2022-12-23
  • 2022-12-23
  • 2021-11-27
  • 2021-12-01
  • 2022-12-23
猜你喜欢
  • 2021-08-14
  • 2021-12-26
  • 2022-12-23
  • 2022-12-23
  • 2022-02-10
  • 2021-12-21
  • 2021-11-27
相关资源
相似解决方案