前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django 2.1.7 自定义form表单中上传图片、显示图片

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

作者头像
Devops海洋的渔夫
发布2019-07-08 10:07:08
2.6K0
发布2019-07-08 10:07:08
举报
文章被收录于专栏:Devops专栏

Django 2.1.7 Admin管理后台文章

Django 2.1.7 Admin管理后台 - 注册模型、自定义显示列表字段

Django 2.1.7 Admin - 列表页选项

Django 2.1.7 Admin - 编辑页选项

Django 2.1.7 Admin - 重写模板,自定义后台

Django 2.1.7 上传图片 - Admin后台管理

自定义form表单中上传图片

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

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

代码语言:javascript
复制
def pic_upload(request):
    return render(request,'assetinfo/pic_upload.html')

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

代码语言:javascript
复制
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
代码语言:javascript
复制
<!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属性用于接收请求的文件,包括图片。

代码语言:javascript
复制
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。

代码语言:javascript
复制
urlpatterns = [
    # ex:/assetinfo/pic_handle/
    path('pic_handle/', views.pic_handle, name='pic_handle'),
]

6)运行服务器,在浏览器中输入如下网址:

http://127.0.0.1:8000/assetinfo/pic_upload

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

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

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

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

代码语言:javascript
复制
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查询表数据如下:

代码语言:javascript
复制
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。

代码语言:javascript
复制
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。

代码语言:javascript
复制
urlpatterns = [
    # ex:/assetinfo/pic_show
    path('pic_show/', views.pic_show, name='pic_show'),
]

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

代码语言:javascript
复制
<!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/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.07.02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Django 2.1.7 Admin管理后台文章
  • 自定义form表单中上传图片
  • 显示图片
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档