django 實現圖片上傳和顯示操作

風穆-Famer發表於2018-03-30

版本:

  • django 2.0.1
  • python 3.6.2

準備工作:

  • pip install pillow 安裝python圖片處理庫 pillow
  • pip install mysqlclient 安裝mysql驅動包
  • django工程的建立和app的建立
  • 在settings.py檔案中載入app

上傳操作的實現:

  • 在所建app中修改models.py檔案:
class Img(models.Model):
    img_url = models.ImageField(upload_to='img') # upload_to指定圖片上傳的途徑,如果不存在則自動建立
  • 執行以下命令,建立專案與資料庫之間的關係
python manage.py makemigrations
python manage.py migrate
  • 修該專案的settings.py檔案

    • 載入mysql驅動並連線mysql,並新增圖片上傳的根目錄
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',   # 載入驅動
        'NAME': 'imgs',# 資料庫名
        'USER': 'root',# mysql的使用者名稱
        'PASSWORD': '',# mysql的密碼
        'HOST': 'localhost', # 連線地址(本地的話使用localhost或者127.0.0.1)
        'PORT': 3306   # 資料庫服務的埠號
    }
}
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/') # media即為圖片上傳的根路徑
MEDIA_URL = '/media/'
  • 編寫views.py檔案
 def uploadImg(request): # 圖片上傳函式
    if request.method == 'POST':
        img = Img(img_url=request.FILES.get('img'))
        img.save()
    return render(request, 'imgupload.html')
  • 在urls.py檔案中新增url對映路徑
from imgTest.views import uploadImg # 新增
urlpatterns = [
    path('admin/', admin.site.urls),
    path('uploadImg/', uploadImg), # 新增
] 
  • 建立模板檔案
    • 在所建app的目錄新建資料夾templates,並建立imgUpload.html新增以下內容
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>圖片上傳</title>
</head>
<body>
    <form action="" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <input type="file" name="img">
        <input type="submit" value="上傳">
    </form>
</body>
</html>

圖片的顯示操作

  • 修改views.py檔案新增圖片顯示函式
def showImg(request):
    imgs = Img.objects.all() # 從資料庫中取出所有的圖片路徑
    context = {
        'imgs' : imgs
    }
    return render(request, 'showImg.html', context)
  • 修改urls.py新增對映並載入圖片靜態路徑
from django.contrib import admin
from django.urls import path
from imgTest.views import uploadImg, showImg
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
    path('admin/', admin.site.urls),
    path('uploadImg/', uploadImg),
    path('showImg/', showImg)
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  • 新建圖片顯示模板檔案showImg.html,並新增以下內容
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>圖片展示</title>
</head>
<body>
    {% for item in imgs %}
        <img src="{{ item.img_url.url }}"><br/>
    {% endfor %}
</body>
</html>

相關文章