美文网首页
Django 实现简单文件上传

Django 实现简单文件上传

作者: Leebor | 来源:发表于2017-12-21 15:50 被阅读0次
1. 功能
  1. 文件上传;
    2)页面展示上传时间;
    3)上传描述
  2. 多项目上传
2.前端代码
<! -- 定义表单,以及上传请求url,上传方式,类型-->
<form action="/FileUpload/" method="post" enctype="multipart/form-data">
<!-- 选择文件 -->
            <input type="file" name="file">
            </br>
<!-- 输入描述 -->
            备注:<input type="text" name="content">
            <br>
            </br>
<!-- 项目选择框 -->
            <select class="form-control select1" name="proname" style="width: 40%">
                {% for m in prolist %}
                    <option class="project-name" value="{{ m.Name }}" name="name">{{ m.Name }}</option>
                {% endfor %}
            </select>
            </br>

<!-- 上传按钮 -->
            <input type="submit" value="上传">
        </form>
3.后台代码

app目录下新建form.py

from django import forms

class UploadFileForm(forms.Form):
    # title = forms.CharField(max_length=50)
    file = forms.FileField()

views.py :

def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        print form
        if form.is_valid():
            print "valid"
            if FileInfo.objects.filter(FileName=request.FILES['file'].name):
                return HttpResponse("<p color='red'>文件已存在... <a href='/upload/'>返回</a></p>")
            else:
                file_model = FileInfo()
                file_model.FileName = request.FILES['file'].name
                file_model.FileField = form.cleaned_data['file']
                file_model.Content = request.POST['content']
                file_model.project_id = Project.objects.get(Name=request.POST['proname']).id
                file_model.UpdateTime = int(time.mktime(time.strptime(time.strftime('%Y-%m-%d %H:%M:%S'),"%Y-%m-%d %H:%M:%S")))
                file_model.save()
                return HttpResponse("<p >success...<a href='/upload'>返回</a></p>")
        else:
            return HttpResponse("<p>上传失败...<a href='/upload/'>返回</a></p> ")
    else:
        form = UploadFileForm()
    return render(request, 'upload.html', {'form': form})



def handle_uploaded_file(f):
    with open(f.name, 'wb+') as destination:
        for chunk in f.chunks():
            destination.write(chunk)

models.py:
这里重新定义了upload_to函数,使其可以针对不同项目,放到不同目录下:

from django.conf import settings

def upload_to(instance, filename):
    return '/'.join([settings.MEDIA_ROOT, time.strftime('%Y'),time.strftime('%m'), time.strftime('%d'),str(instance.project_id), filename])
4. 上传结果
image.png image.png

相关文章

网友评论

      本文标题:Django 实现简单文件上传

      本文链接:https://www.haomeiwen.com/subject/kflawxtx.html