django笔记(九)-imagefeild\FileFeild
2021-03-08 本文已影响0人
非鱼2018
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')
- 解决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}),