Django 2 1 7 自定義form表單中上傳圖片、顯示圖片

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後臺管理html

自定義form表單中上傳圖片

上一篇章Django 2.1.7 上傳圖片 - Admin後臺管理說明了使用admin後臺上傳圖片,本篇繼續來看看如何自定義上傳圖片。mysql

1)打開assetinfo/views.py文件,建立視圖pic_upload。sql

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。django

在模板中定義上傳表單,要求以下:瀏覽器

  • 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,用於接收表單保存圖片。bash

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。post

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

6)運行服務器,在瀏覽器中輸入以下網址: http://127.0.0.1:8000/assetinfo/pic_uploadui

選擇文件後點擊按鈕上傳圖片。

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/

相關文章
相關標籤/搜索