用户自己上传
项目的setting里面配置MEDIA_ROOT = os.path.join(BASE_DIR,'static/media') #设置上传文件的保存目录
在static文件夹里新建media文件夹
写上传的html的页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="/upload_handle">
{% csrf_token %}
<input type="file" name="pic"><br/>
<input type="submit" value="上传">
</form>
</body>
</html>
注意表单一定要是post方式,还有enctype参数,以及csrf防护.
到项目的urls.py里配置upload_handle对应的视图,省略.
models.py里写上传图片的类:
class PicTest(models.Model):
'''上传图片'''
good_pic = models.ImageField(upload_to='booktest')
直接看uploa的_handle视图函数:(为了使用setting,要先导入from django.conf import settings
)
def upload_handle(request):
'''上传图片处理'''
# 1.拿到上传文件的处理对象
pic = request.FILES['pic']
# 2.创建文件
save_path = '%s/booktest/%s'%(settings.MEDIA_ROOT,pic.name)
with open(save_path,'wb') as f:
# 3.获取上传文件的内容,并写到创建的文件中
for content in pic.chunks():
f.write(content)
# 4.在数据库中保存上传记录
PicTest.objects.create(good_pic='booktest/%s'%pic.name)
# 5.返回
return HttpResponse('ok')
后台管理上传
from booktest.models import AreaInfo,PicTest
导入
admin.site.register(PicTest)
注册
127.0.0.1/admin访问就可以看了