1.models.py加入FILEFIELD文件表字段
class TestData(models.Model): name = models.CharField(max_length=200) data = models.FileField(upload_to=‘testdata/file‘, null=True, blank=True) img = models.ImageField(upload_to=‘testdata/image‘, null=True, blank=True) def __str__(self): return self.name
2.settings.py设置FILEFIELD的默认保存目录MEDIA_ROOT和默认链接目录MEDIA_URL
MEDIA_URL = ‘data/‘ MEDIA_ROOT = ‘data/‘
以上表示TestData的data上传后默认保存在项目根目录/data/testdata/file中,读取链接为域名/data/testdata/file/xxx.xxx
3.views.py加入文件试图:
def myfile(request, file_id): f = TestData.objects.get(id=file_id) # 建立TestData的表单对象 FileForm = modelform_factory(TestData,fields=[‘name‘,‘data‘,‘img‘]) if request.method == ‘POST‘: # 提交的文件保存到f对象 form = FileForm(request.POST,request.FILES,instance=f) if form.is_valid(): form.save() return HttpResponseRedirect(reverse(‘polls:myfile‘,args=(file_id,))) form = FileForm({‘id‘:f.id,‘name‘:f.name}) return render(request, ‘polls/file.html‘, {‘form‘: form, ‘file‘: f})
4.url.py加入此视图映射
app_name = ‘polls‘ urlpatterns = [ path(‘myfile/<int:file_id>/‘,views.myfile,name= ‘myfile‘), ]
5.创建polls/file.html模板文件
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>上传文件</title> </head> <body> <h1>{{ file.name }}</h1> <form enctype="multipart/form-data" method="post" id="testfile_form" novalidate="true"> {% csrf_token %} {{ form }} <input type="submit" value="保存" class="default" name="_save"> </form> {% if file.data %} <p>{{ file.data.read }}</p> {% endif %} {% if file.img %} <img src="{{ file.img.url }}"> {% endif %} </body> </html>
完成后打开http://127.0.0.1:8000/polls/myfile/1/
可以上传文件和图片了,并且读取url和内容,以及大小