43. Django 2.1.7 自定义form表单中上传图片、显示图片

43. Django 2.1.7 自定义form表单中上传图片、显示图片

自定义form表单中上传图片

上一篇章Django 2.1.7 上传图片 – Admin后台管理说明了使用admin后台上传图片,本篇继续来看看如何自定义上传图片。

1)打开assetinfo/views.py文件,创建视图pic_upload。

def pic_upload(request):
return render(request,'assetinfo/pic_upload.html')

2)打开assetinfo/urls.py文件,配置url。

urlpatterns = [
# ex:/assetinfo/pic_upload
path('pic_upload', views.pic_upload, name='pic_upload'),
]

3)在templates/assetinfo/目录下创建模板pic_upload.html。

在模板中定义上传表单,要求如下:

  • form的属性enctype=”multipart/form-data”
  • form的method为post
  • input的类型为file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自定义上传图片</title>
</head>
<body>
<form method="post" action="/assetinfo/pic_handle/" enctype="multipart/form-data">
{%csrf_token%}
<input type="file" name="pic"/><br>
<input type="submit" value="上传">
</form>
</body>
</html>

4)打开assetinfo/views.py文件,创建视图pic_handle,用于接收表单保存图片。

request对象的FILES属性用于接收请求的文件,包括图片。

from django.conf import settings

def pic_handle(request):
f1=request.FILES.get('pic')
fname='%s/assetinfo/%s'%(settings.MEDIA_ROOT,f1.name)
with open(fname,'wb') as pic:
for c in f1.chunks():
pic.write(c)
return HttpResponse('OK')

5)打开assetinfo/urls.py文件,配置url。

urlpatterns = [
# ex:/assetinfo/pic_handle/
path('pic_handle/', views.pic_handle, name='pic_handle'),
]

6)运行服务器,在浏览器中输入如下网址:http://127.0.0.1:8000/assetinfo/pic_upload

43. Django 2.1.7 自定义form表单中上传图片、显示图片

选择文件后点击按钮上传图片。

43. Django 2.1.7 自定义form表单中上传图片、显示图片

7)图片上传目录如下图:

43. Django 2.1.7 自定义form表单中上传图片、显示图片

这里只是完成图片上传的代码,如果需要保存数据到表中需要创建PicTest对象完成保存。

8)打开assetinfo/views.py文件,修改视图pic_handle,将图片路径数据写入数据库。

from django.conf import settings
from assetinfo.models import PicTest

def pic_handle(request):
# 接收图片数据
f1=request.FILES.get('pic')
# 设置图片保存路径
fname='%s/assetinfo/%s'%(settings.MEDIA_ROOT,f1.name)
# 将图片写入保存路径
with open(fname,'wb') as pic:
for c in f1.chunks():
pic.write(c)
# 将图片数据写入数据库
file = PicTest()
file.pic = 'assetinfo/%s' % f1.name
file.save()
return HttpResponse('OK')

9)进入mysql查询表数据如下:

mysql> select * from assetinfo_pictest;
+----+-----------------+
| id | pic |
+----+-----------------+
| 3 | assetinfo/2.png |
+----+-----------------+
1 row in set (0.00 sec)

mysql>

显示图片

1)打开assetinfo/views.py文件,创建视图pic_show。

def pic_show(request):
pic=PicTest.objects.get(pk=3)
context={'pic':pic}
return render(request,'assetinfo/pic_show.html',context)

2)打开assetinfo/urls.py文件,配置url。

urlpatterns = [
# ex:/assetinfo/pic_show
path('pic_show/', views.pic_show, name='pic_show'),
]

3)在templates/assetinfo/目录下创建模板pic_show.html。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>显示图片</title>
</head>
<body>
<img src="/static/media/{{pic.pic}}"/>
</body>
</html>

4)运行服务器,在浏览器中输入如下网址:http://127.0.0.1:8000/assetinfo/pic_show/

43. Django 2.1.7 自定义form表单中上传图片、显示图片


原文始发于微信公众号(海洋的渔夫):43. Django 2.1.7 自定义form表单中上传图片、显示图片

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/31435.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!