Django 上傳圖片操作
阿新 • • 發佈:2018-12-30
Django上傳圖片
- 在admin中上傳圖片
- 在admin.py檔案中註冊,PicTest
from django.contrib import admin
from booktest.models import *
admin.site.register(PicTest)
- 在admin建立管理員賬戶
# create super user
python manage.py createsuperuser
- 在settings中修改配置檔案
STATIC_URL = '/static/' MEDIA_ROOT=os.path.join(BASE_DIR,"static/upImg")
- 在models.py中建立資料模型
from django.db import models
# Create your models here.
class PicTest(models.Model):
pic = models.ImageField(upload_to='path') # 引數 upload_to 路徑重複的話會重新開啟檔案
自定義檔案上傳
-
檔案上傳時,檔案資料儲存在request.FILES屬性中
-
form表單要上傳檔案需要新增屬性 enctype=“multipart/form-data”
-
上傳檔案必須是post請求
-
settings.py部分
# 新增路徑
MEDIA_ROOT=os.path.join(BASE_DIR,"static/upfile")
- views.py部分
from django.shortcuts import render,HttpResponse # Create your views here. def upfile(request): return render(request,'upfile.html') import os from django.conf import settings def savefile(request): if request.method == 'POST': f = request.FILES['file'] # input 框name 屬性 # 檔案在伺服器客戶端的路徑 filePath = os.path.join(settings.MEDIA_ROOT,f.name) with open(filePath,'wb') as fp: for info in f.chunks(): fp.write(info) return HttpResponse('上傳成功') else: return HttpResponse('上傳失敗')
-
網頁部分
-
{% csrf_token %}作用
- django 第一次響應來自某個客戶端的請求時,會在伺服器端隨機生成一個 token,把這個 token 放在 cookie 裡。然後每次 POST 請求都會帶上這個 token,如果註釋會報錯“CSRF驗證失敗. 請求被中斷.”
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自定義上傳檔案</title>
</head>
<body>
{# method=post 新增屬性 enctype="multipart/form-data" #}
<form method="post" action="/savefile/" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="file" /> <br>
<input type="submit" value="上傳">
</form>
</body>
</html>
在admin中上傳,Django框架會自動驗證是不是圖片格式。自定義的上傳需要自己驗證上傳的檔案格式是不是圖片,驗證圖片格式會後續補充,路由部分請自行補充