框架----Django之文件上传

2021-07-02 18:07

阅读:557

标签:分享   width   contain   utf-8   body   html   back   chunk   containe   

一、文件上传

1. 浏览器访问

http://127.0.0.1:8000/f1/

http://127.0.0.1:8000/f2/

2. urls

from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r^admin/, admin.site.urls),
    url(r^f1/, views.f1),
    url(r^f2/, views.f2),
]

3. views

技术分享技术分享
 1 from django.shortcuts import render,redirect,HttpResponse
 2 from app01 import models
 3 from django.forms import Form
 4 from django.forms import fields
 5 from django.forms import widgets
 6 
 7 
 8 # **************************文件上传**************************
 9 def f1(request):
10     if request.method == "GET":
11         return render(request,f1.html)
12     else:
13         import os
14         # request.POST
15         file_obj = request.FILES.get(fafafa)
16         f = open(os.path.join(static,file_obj.name),wb)
17         for chunk in file_obj.chunks():
18             f.write(chunk)
19         f.close()
20         # return render(request,‘f1.html‘)         # 上传成功后刷新当前页面
21         return HttpResponse(上传成功)          # 上传完成后显示文字
22 
23 class F2Form(Form):
24     user = fields.CharField()
25     fafafa = fields.FileField()
26 
27 def f2(request):
28     if request.method == "GET":
29         obj = F2Form()
30         return render(request,f2.html,{obj:obj})
31     else:
32         obj = F2Form(data=request.POST,files=request.FILES)
33         if obj.is_valid():
34             print(obj.cleaned_data.get(fafafa).name)
35             print(obj.cleaned_data.get(fafafa).size)
36         return render(request,f2.html,{obj:obj})
views

4. templates

技术分享技术分享
 1 DOCTYPE html>
 2 html lang="en">
 3 head>
 4     meta charset="UTF-8">
 5     title>title>
 6 head>
 7 body>
 8     form method="POST" action="/f1/" enctype="multipart/form-data">
 9         {% csrf_token %}
10         input type="text" name="user" />
11         input type="file" name="fafafa" />
12         input type="submit" value="提交" />
13     form>
14 body>
15 html>
f1.html
技术分享技术分享
 1 DOCTYPE html>
 2 html lang="en">
 3 head>
 4     meta charset="UTF-8">
 5     title>title>
 6 head>
 7 body>
 8     form method="POST" action="/f2/" enctype="multipart/form-data">         
 9         {# 不能少了这个属性:enctype="multipart/form-data" ,否则后台拿不到数据 #}
10         
11         {% csrf_token %}
12         {{ obj.user }}
13         {{ obj.fafafa }}
14         input type="submit" value="提交" />
15     form>
16 body>
17 html>
f2.html

 二、文件上传--------原生Ajax上传文件、jQuery Ajax上传文件、伪Ajax上传文件

1. 浏览器访问

http://127.0.0.1:8000/upload/

2. urls

技术分享技术分享
from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r^admin/, admin.site.urls),
    url(r^upload/, views.upload),
]
View Code

3. views

技术分享技术分享
 1 from django.shortcuts import render,HttpResponse,redirect
 2 
 3 import os
 4 def upload(request):
 5     if request.method == GET:
 6         return render(request,upload.html)
 7     else:
 8         print(request.POST,request.FILES)
 9         file_obj = request.FILES.get(fafafa)
10         file_path = os.path.join(static,file_obj.name)
11         with open(file_path,wb) as f:
12             for chunk in file_obj.chunks():
13                 f.write(chunk)
14 
15         return HttpResponse(file_path)
views

4. templates

技术分享技术分享
 1 DOCTYPE html>
 2 html lang="en">
 3 head>
 4     meta charset="UTF-8">
 5     title>title>
 6 head>
 7 body>
 8     h1>原生Ajax上传文件h1>
 9     input type="file" id="i1" />
10     a onclick="upload1();">上传a>
11     div id="container1">div>
12 
13     h1>jQuery Ajax上传文件h1>
14     input type="file" id="i2" />
15     a onclick="upload2();">上传a>
16     div id="container2">div>
17 
18     h1>伪 Ajax上传文件h1>
19     form id="f1" method="POST" action="/upload/" target="ifr" enctype="multipart/form-data">
20         iframe id="ifr" name="ifr" style="display: none">iframe>
21         input type="file" name="fafafa" />
22         a onclick="upload3();">上传a>
23     form>
24     div id="container3">div>
25 
26     script>
27     /* $$$$$$ 原生Ajax上传文件 $$$$$$ */
28         function upload1() {
29             var formData = new FormData();
30             formData.append(k1,v1);
31             formData.append(fafafa,document.getElementById(i1).files[0]);
32 
33             var xhr = new XMLHttpRequest();
34             xhr.onreadystatechange = function () {
35                 if(xhr.readyState == 4){
36                     var file_path = xhr.responseText;
37                     var tag = document.createElement(img);
38                     tag.src = /+ file_path;
39                     document.getElementById(container1).appendChild(tag);
40                 }
41             };
42             xhr.open(POST,/upload/);
43             xhr.send(formData);
44         }
45 
46 
47     /* $$$$$$ jQuery Ajax上传文件 $$$$$$ */
48         function upload2() {
49             var formData = new FormData();
50             formData.append(k1,v1);
51             //formData.append(‘fafafa‘,document.getElementById(‘i1‘).files[0]);
52             formData.append(fafafa,$(#i2)[0].files[0]);
53             //$(‘#i2‘) ->  $(‘#i2‘)[0]
54             //document.getElementsByName(‘i1‘) ->  $(document.getElementById(‘i1‘))
55 
56             $.ajax({
57                 url:/upload/,
58                 type:POST,
59                 data:formData,
60                 contentType:false,
61                 processData:false,
62                 success:function (arg) {
63                     var tag = document.createElement(img);
64                     tag.src = /+ arg;
65                     $(#container2).append(tag);
66                 }
67             })
68         }
69 
70         /* $$$$$$ 伪 Ajax上传文件 $$$$$$ */
71             function upload3() {
72                 document.getElementById(ifr).onload = loadIframe;
73                 document.getElementById(f1).submit();
74             }
75             function loadIframe() {
76                 var content = document.getElementById(ifr).contentWindow.document.body.innerText;
77                 var tag = document.createElement(img);
78                 tag.src = /+ content;
79                 $(#container3).append(tag);
80             }
81     script>
82 body>
83 html>
upload.html

5. 执行结果截图

技术分享

 

 

 

框架----Django之文件上传

标签:分享   width   contain   utf-8   body   html   back   chunk   containe   

原文地址:http://www.cnblogs.com/wangyongsong/p/7127287.html


评论


亲,登录后才可以留言!