參考博客:http://www.cognize.me/2016/05/09/djangopic
開始之前要先安裝python圖像處理庫:
pip install --use-wheel Pillow
一、數據庫設置
1. 先創建一個app,比如叫img_db。
命令行:python manage.py startapp img_db
2. 將其加入到settings.py文件中的INSTALLED_APPS中
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'img_db', 'corsheaders', ]
3. 在models.py中創建表,圖片存儲使用的是 models.ImageField
例如:
class IMG(models.Model): img = models.ImageField(upload_to='img') name = models.CharField(max_length=20)
這里的upload_to是指定圖片存儲的文件夾名稱,上傳文件之后會自動創建
4. 更新數據庫
python manage.py makemigrations
python manage.py migrate
二、修改配置文件setting.py
只需要在最后的靜態文件區加上下面兩行代碼:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/') #設置靜態文件路徑為主目錄下的media文件夾 MEDIA_URL = '/media/' #url映射
三、創建模板
1. 在APP目錄下創建文件夾templates
注意:這是django默認的形式,如果想把模板放在其他路徑,得自己重新配置。
2. 在templates文件夾下創建文件夾,比如叫img_tem
3. 在img_tem下創建模板
uploadimg.html
<form method="POST" enctype="multipart/form-data"> {% csrf_token %} <input type="file" name="img"> <button type="submit">上傳</button> </form>
showimg.html
{% for img in imgs %} <img src="{{ img.img.url }}" /> {% endfor %}
這里img是Django的Model里的一個實例對象,使用img.img.url可以獲取他的url,而且在settings.py中已經對其做了靜態映射
四、創建視圖函數 view.py
@csrf_exempt def uploadImg(request): if request.method == 'POST': new_img = IMG( img=request.FILES.get('img'), name = request.FILES.get('img').name ) new_img.save() return render(request, 'img_tem/uploadimg.html')
首先用get方式訪問uploadImg(),然后會跳轉到uploadimg.html頁面,上傳文件時會使用post再次訪問uploadImg(),這時就會將圖片存儲在數據庫與media/img_tem中。
@csrf_exempt def showImg(request): imgs = IMG.objects.all() content = { 'imgs':imgs, } for i in imgs: print i.img.url return render(request, 'img_tem/showimg.html', content
五、url.py配置
from django.conf.urls import url from django.contrib import admin import view from django.conf.urls.static import static from django.conf import settings urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^upload', view.uploadImg), url(r'^show', view.showImg), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 這句話是用來指定和映射靜態文件的路徑
完成之后就可以發布了。