Python中国社区  »  Django

django web界面上传下载文件

Leebor • 1 年前 • 2254 次点击  

django 实现web界面上传下载文件,通过哪种方式实现? js? 有插件或者框架没有?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/1731
 
2254 次点击  
分享到微博
文章 [ 7 ]  |  最新文章 1 年前
宇辰君
Reply   •   1 楼
宇辰君    1 年前

@Py站长

之前看到这儿了,就是参考的它,可是重写FormView的post方法,接下来怎么用到我自己的upload上传视图函数里呢?最近需要什么功能时就百度谷歌加查文档,但总是觉得解决一个问题好费劲。。。

`

class FileFieldView(FormView): form_class = UserForm template_name = 'upload.html' def post(self,request,args,*kwargs): form_class = self.get_form_class() form = self.get_form(form_class) files = request.FILES.getlist('rawFile') if form.is_valid(): for f in files: print f #do something with each file return self.form_valid(form) else: return self.form_invalid(form)

def upload(request): if request.method == "POST": uf = UserForm(request.POST,request.FILES)
if uf.is_valid():
username = uf.cleaned_data['username'] rawFile = uf.cleaned_data['rawFile'] return render_to_response('uploadDone.html',{'rawFile':rawFile}) else: uf = UserForm() return render_to_response('upload.html',{'uf':uf})

`

Py站长
Reply   •   2 楼
Py站长    1 年前

@宇辰君

 from django.views.generic.edit import FormView
from .forms import FileFieldForm

class FileFieldView(FormView):
    form_class = FileFieldForm
    template_name = 'upload.html'  # Replace with your template.
    success_url = '...'  # Replace with your URL or reverse().

    def post(self, request, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        files = request.FILES.getlist('file_field')
        if form.is_valid():
            for f in files:
                ...  # Do something with each file.
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

这里有的 https://docs.djangoproject.com/en/1.10/topics/http/file-uploads/

宇辰君
Reply   •   3 楼
宇辰君    1 年前

@Py站长 看到官方文档提到 forms.py>

     file = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple':True}))

views.py> 重写FormView的post方法

对于一次上传多个文件到本地up_load,同时保存到models(myslq数据库),具体是怎么实现的,我现在需要一次同时上传两个文件,对两个文件同时做其他处理,多谢。希望回复我邮件吧 freeknighter@sina.com

Py站长
Reply   •   4 楼
Py站长    1 年前

@Rambo 确实有风险。。。是我的问题。感谢你的建议,我已经修复了:)

Py站长
Reply   •   5 楼
Py站长    1 年前

前端模板html中加入

* <form enctype="multipart/form-data" action="/uploadFile/" method="post">  
*    <input type="file" name="myfile" />  
*    <br/>  
*    <input type="submit" value="upload"/>  
* </form>
  • 用form来上传文件

后端

def upload_file(request):  
        if request.method == "POST":    # 请求方法为POST时,进行处理  
                myFile =request.FILES.get("myfile", None)    # 获取上传的文件,如果没有文件,则默认为None  
                if not myFile:  
                        returnHttpResponse("no files for upload!")  
                destination = open(os.path.join("E:\\upload",myFile.name),'wb+')    # 打开特定的文件进行二进制的写操作  
                for chunk in myFile.chunks():      # 分块写入文件  
                        destination.write(chunk)  
                destination.close()  
                returnHttpResponse("upload over!")
Rambo
Reply   •   6 楼
Rambo    1 年前

@Py站长 这有注入的危险呀。。。。。

Rambo
Reply   •   7 楼
Rambo    1 年前

前端模板html中加入

  • <form enctype="multipart/form-data" action="/uploadFile/" method="post">
  • <input type="file" name="myfile" />
  • <br/>
  • <input type="submit" value="upload"/>
  • </form>
  • 用form来上传文件

后端

ef upload_file(request):
if request.method == "POST": # 请求方法为POST时,进行处理
myFile =request.FILES.get("myfile", None) # 获取上传的文件,如果没有文件,则默认为None
if not myFile:
returnHttpResponse("no files for upload!")
destination = open(os.path.join("E:\upload",myFile.name),'wb+') # 打开特定的文件进行二进制的写操作
for chunk in myFile.chunks(): # 分块写入文件
destination.write(chunk)
destination.close()
returnHttpResponse("upload over!")