Python中国社区  »  Django

django web界面上传下载文件

Leebor • 5 月前 • 1036 次点击  

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

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

@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站长    2 月前

@宇辰君

 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 楼
宇辰君    3 月前

@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站长    4 月前

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

Py站长
Reply   •   5 楼
Py站长    4 月前

前端模板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    4 月前

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

Rambo
Reply   •   7 楼
Rambo    4 月前

前端模板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!")

分享
社区所有版块导航
Python
python开源   DjangoApp   pycharm   Django   Python  
DATA
docker   Elasticsearch  
WEB开发
linux   MQ   Bootstrap   NGINX   js   其他Web框架   Jquery   peewee   web工具   Git   zookeeper   MongoDB   bottle   tornado   Redis   NoSql   IE   DATABASE  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广