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

it2023-12-04  74

自定义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

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

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

这里只是完成图片上传的代码,如果需要保存数据到表中需要创建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/

最新回复(0)