django 實現圖片上傳和顯示操作
阿新 • • 發佈:2019-01-09
版本:
- 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>