Django 圖片上傳、存儲與顯示


參考博客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)  這句話是用來指定和映射靜態文件的路徑

 

完成之后就可以發布了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM