Django 文件上传的三种方式

方式一:

通过form表单提交到后台

前段:




    
    Title


    
                        {% csrf_token %}    

Django 后端:

class Upload(View):

    def get(self, request):
        return render(request, 'clashphone/test.html',  {
            'mould': os.path.join(BASE_DIR, 'media', 'commen'),
            'MEDIA_URL': MEDIA_URL}
                      )

    def post(self, request):
        obj = request.FILES.get('fafafa', '1')
        print(obj.name)
        f = open(os.path.join(BASE_DIR, 'media', 'image', obj.name), 'wb')
        for chunk in obj.chunks():
            f.write(chunk)
        f.close()
        # return render(request, 'clashphone/test.html')
        return HttpResponse('OK')

方式二:

通过ajax提交

前段

               

 

JS:


Django 后端:

def upload_ajax(request):
    if request.method == 'POST':
        file_obj = request.FILES.get('file')
        import os
        f = open(os.path.join(BASE_DIR, 'static', 'pic', file_obj.name), 'wb')
        print(file_obj,type(file_obj))
        for chunk in file_obj.chunks():
            f.write(chunk)
        f.close()
        print('11111')
        return HttpResponse('OK')

注意:

前台发送ajax请求时:

processData: false,  // tell jquery not to process the data
contentType: false, // tell jquery not to set contentType
必须设置

方式三:
通过iframe标签提交
前段:

 

  
       
                                                       
           

JS:


   

 function UploadFile() {
        document.getElementById('my_iframe').onload = Testt;
        document.getElementById('my_form').target = 'my_iframe';
        document.getElementById('my_form').submit();
    }
    function Testt(ths){
            var t = $("#my_iframe").contents().find("body").text();
            console.log(t);
        }

Django 后端:

def upload_iframe(request):
    if request.method == 'POST':
        print(request.POST.get('user', None))
        print(request.POST.get('password', None))
        file_obj = request.FILES.get('file')
        import os
        f = open(os.path.join(BASE_DIR, 'static', 'pic', file_obj.name), 'wb')
        print(file_obj,type(file_obj))
        for chunk in file_obj.chunks():
            f.write(chunk)
        f.close()
        print('11111')
        return HttpResponse('OK')

 

扩展:

在前段提交的时候 可以存在 checkbox 标签, 在Django中对于这种标签在后台获取值时用:

  request.POST.getlist('favor', None) checkbox

其它

request.POST.get('favor', None)  checkbox
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

你可能感兴趣的:(Django)