Django Post上传文件与传递参数

3 篇文章 0 订阅
2 篇文章 0 订阅

如果是Python客户端上传Post
可参考本博客:https://blog.csdn.net/qq_21237549/article/details/123408690

前端js上传文件

        <div class="ac-game-settings-acwing">
            <br>
            <input type="file" name="file" id="file_select">
            <input type="button" value="上传" class="file_upload">
        </div>
    add_listening_events() {
        console.log('ok');
        let outer = this;
        this.add_listening_events_login();
        this.add_listening_events_register();
    }
    add_listening_events_login() {
        let outer = this;
        console.log('123');
        this.$login_register.click(function () {
            console.log('click register');
            outer.register();
        });
        this.$login_submit.click(function () {
            outer.login_on_remote();
        });
        this.$upload_file.click(function () {
            outer.FileUpload();
        });
    }
    FileUpload() {
        var form_data = new FormData();
        var file_info = $('#file_select')[0].files[0];
        form_data.append('file', file_info);
        if (file_info == undefined) {
            alert('你没有选择任何文件');
            return false;
        }
        $.ajax({
            url: target_url + "/files/file_up/",
            type: 'POST',
            data: form_data,
            processData: false,  // tell jquery not to process the data
            contentType: false, // tell jquery not to set contentType
            success: function (callback) {
                alert('上传成功');
            }
        });
    }

后端获取ajax

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
@csrf_exempt
def upload_ajax(request):
    print(request.FILES.get('file').name)
    if request.method == 'POST':
        file_obj = request.FILES.get('file')
        import os
        # JS_PATH=/home/fjtx/ai_asian_back/demo/static/js/
        path1 = os.path.abspath(os.path.join(os.getcwd()))
        print(path1)
        #需要存储的地址
        f = open(os.path.join(path1, 'static', 'file', file_obj.name), 'wb')
        print(file_obj,type(file_obj))
        for chunk in file_obj.chunks():
            f.write(chunk)
        f.close()
        print('11111')
        return JsonResponse({
            'result': "success"
        })

js前端进行上传
在这里插入图片描述

在这里插入图片描述

Post传递参数

参考:https://blog.csdn.net/a582816317/article/details/79100754
前端js代码

    FileUpload() {
        var form_data = new FormData();
        var file_info = $('#file_select1')[0].files[0];
        console.log(file_info)
        form_data.append('file', file_info);
        form_data.append('username', this.root.settings.username);//传递参数
        if (file_info == undefined) {
            alert('你没有选择任何文件');
            return false;
        }
        $.ajax({
            url: target_url + "/files/file_up/",
            type: 'POST',
            data: form_data,
            processData: false,  // tell jquery not to process the data
            contentType: false, // tell jquery not to set contentType
            success: function (callback) {
                alert('上传成功');
            }
        });
    }

后端python代码

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
@csrf_exempt
def upload_ajax(request):
    print(request.FILES.get('file').name)#接收文件
    username=request.POST.get('username')#接收参数
    print(username)
    if request.method == 'POST':
        file_obj = request.FILES.get('file')

        import os
        # JS_PATH=/home/fjtx/ai_asian_back/demo/static/js/
        path1 = os.path.abspath(os.path.join(os.getcwd()))
        print(path1)
        #需要存储的地址
        f = open(os.path.join(path1,'demo', 'static', 'file', file_obj.name), 'wb')
        for chunk in file_obj.chunks():
            f.write(chunk)
        f.close()
        return JsonResponse({
            'result': "success"
        })

Django返回列表

在这里插入图片描述
前端
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 答:from django.http import HttpResponsedef handle_uploaded_file(f): with open('some/file/name.txt', 'wb+') as destination: for chunk in f.chunks(): destination.write(chunk)def upload_file(request): if request.method == 'POST': form = UploadFileForm(request.POST, request.FILES) if form.is_valid(): handle_uploaded_file(request.FILES['file']) return HttpResponseRedirect('/success/url/') else: form = UploadFileForm() return render(request, 'upload.html', {'form': form}) ### 回答2: 以下是一个简单的Django上传文件的代码示例: ''' from django.shortcuts import render from django.core.files.storage import FileSystemStorage def upload_file(request): if request.method == 'POST' and request.FILES['file']: # 从请求中获取上传文件 uploaded_file = request.FILES['file'] # 创建文件系统存储对象 fs = FileSystemStorage() # 将文件保存到服务器上 fs.save(uploaded_file.name, uploaded_file) # 获取保存文件的URL,并传递给模板 file_url = fs.url(uploaded_file.name) return render(request, 'upload_file.html', {'file_url': file_url}) return render(request, 'upload_file.html') ''' 这段代码定义了一个名为upload_file的视图函数,用于处理上传文件的请求。当请求方法为POST且包含名为’file’的文件时,代码会执行以下操作: 1. 获取上传文件,保存为uploaded_file对象。 2. 创建文件系统存储对象fs。 3. 使用fs.save()方法将文件保存到服务器上,其中uploaded_file.name表示保存的文件名。 4. 使用fs.url()方法获取保存文件的URL,将其传递给模板render函数,以便在前端显示。 5. 最后,使用render函数渲染upload_file.html模板,并传递保存文件的URL作为file_url的参数。 如果请求方法不是POST或者不包含文件,则直接渲染upload_file.html模板。 注意:在这个简单的示例中,上传的文件将保存在Django项目的根目录下的media文件夹中。为了使此代码工作,需要在Django项目的settings.py文件中配置MEDIA_ROOT和MEDIA_URL。 ### 回答3: 在Django中,处理文件上传需要进行多个步骤。首先,需要在settings.py文件中配置文件的上传路径和允许上传的文件类型。 ```python # settings.py # 配置文件上传路径 MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # 配置允许上传的文件类型 ALLOWED_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif'] ``` 然后,在views.py文件中编写处理文件上传的视图函数。 ```python # views.py from django.shortcuts import render def upload_file(request): if request.method == 'POST': file = request.FILES['file'] # 获取上传的文件对象 if file.name.split('.')[-1] not in settings.ALLOWED_EXTENSIONS: return render(request, 'error.html', {'message': '文件类型不允许'}) with open(os.path.join(settings.MEDIA_ROOT, file.name), 'wb') as f: for chunk in file.chunks(): f.write(chunk) return render(request, 'success.html', {'message': '文件上传成功'}) return render(request, 'upload.html') ``` 在upload.html模板文件中编写上传文件的表单。 ```html <!-- upload.html --> <form action="/upload/" method="post" enctype="multipart/form-data"> {% csrf_token %} <input type="file" name="file" accept=".jpg,.jpeg,.png,.gif" required> <input type="submit" value="上传"> </form> ``` 最后,配置urls.py文件将上传文件的URL映射到视图函数。 ```python # urls.py from django.urls import path from . import views urlpatterns = [ path('upload/', views.upload_file), ] ``` 以上就是一个简单的Django文件上传的代码示例。用户可以通过upload.html页面选择要上传的文件,然后在后台进行文件类型检查和保存操作,最后返回成功或失败的页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值