美文网首页python之路
django笔记(九)-imagefeild\FileFeild

django笔记(九)-imagefeild\FileFeild

作者: 非鱼2018 | 来源:发表于2021-03-08 21:39 被阅读0次

    1.使用imagefile
    models.py

    class UploadFile(models.Model):
        filename=models.CharField(max_length=50)
        filepath=models.ImageField(upload_to="%Y/%m/%d/")```
    

    settings.py

    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    STATIC_URL = '/static/'
    
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    MEDIA_URL = '/media/'
    

    forms.py

    from .models import UploadFile
    class UploadFileForm(forms.ModelForm):
        class Meta:
            model = UploadFile
            fields = ["filepath"]
    

    views.py

    from .forms import UploadFileForm
    def uploadfile(request):
        if request.method=='GET':
            form=UploadFileForm()
        else:
            form =UploadFileForm(request.POST,request.FILES)
            print(request.POST)
            print(request.FILES)
            if form.is_valid():
                file=form.save(commit=False)
                file.filename=request.FILES['filepath']  #取原始的filename,filepath有时候相同文件,文件名经过处理后会不同
                file.save()
                return HttpResponse('上传成功')
            else:
                print("表单无效")
        content = {'form': form}
        return render(request,'myapp/uploadfile.html',content)
    

    模板文件:

    <form action="{% url 'myapp:upload' %}" method="post" enctype="multipart/form-data">
           {% csrf_token %}
    <!--        #<input type="file" class="form-file-input" id="customFile">-->
            <input type="file" name="file">
            <input type="submit">
        </form>
    

    url.py,增加

    from django.conf import settings
    from django.conf.urls.static import static
    urlpatterns+=static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    2.文件下载
    views.py

    def downfile(request,fileid):
        from .models import UploadFile
        from django.http import FileResponse
        files=UploadFile.objects.get(id=fileid)
        file_path=str(files.filepath)
        file = open('media/{}'.format(file_path), 'rb')
        response = FileResponse(file)
        response['Content-Type'] = 'application/octet-stream'
        response['Content-Disposition'] = 'attachment;filename={}'.format(files.filename)
        return response
    

    *linux服务器上有时可能出现文件名为中文时,下载后文件名乱码的问题,可以对文件名先编码后解码
    模板文件

       {% for file in files %}
    <p>{{file.filename}}</p>
    <a href="{% url 'myapp:downfile' file.id %}">下载</a>
    
    {% endfor %} </ul>
    

    路由:

     path('uploadfile',views.uploadfile,name='uploadfile'),
       path('downfile/<int:fileid>',views.downfile,name='downfile') 
    
    1. 解决debug=false时,静态文件css失效解决办法:
    • url.py

    settings.py,增加

    from django.conf import settings
    from django.views.static import serve

     re_path(r'^static/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT}),
    re_path(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),
    

    相关文章

      网友评论

        本文标题:django笔记(九)-imagefeild\FileFeild

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