Django 圖片上傳到數據庫 並調用顯示

環境:Django2.0 Python3.6.4html

創建項目,數據庫設置,就不說了。python

直接上代碼:數據庫

在models.py中,須要創建模型,這裏使用了ImageField字段,用來存儲圖片路徑,這個字段繼承了FileField字段,本質上是同樣的。這裏Image.Field的默認max_length=100,咱們能夠根據需求本身指定。upload_to用於指定上傳到哪一個路徑下。django

PS: 使用ImageField首先須要裝Pillow。app

 1 pip install Pillow 函數

 

1 class Test(models.Model):
2     name = models.CharField(max_length=50)
3     image = models.ImageField(upload_to='logo')
4     def __str__(self):
5         return self.name

創建好模型,須要進行遷移操做,post

1 python manage.py makemigrations  
2 python manage.py migrate 

在settings.py中,設置MEDIA_URL和MEDIA_ROOT編碼

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

 咱們須要告訴Django,媒體文件的位置在哪裏。這樣就和數據庫存儲的路徑相對應了,具體就是MEDIA_ROOT指定目錄,upload_to就是在這個目錄下進行操做。url


 

1. 顯示圖片(圖片調用) 

  爲了可以方便錄入數據,咱們使用django後臺管理,建立管理頁面。spa

python manage.py createsuperuser

   根據提示進行建立。在app下admin.py中將須要上面建立的模型進行添加。

admin.site.register(Test)

   開啓runserver,打開admin頁面,就能夠建立具體的數據了,將圖片進行添加。

  咱們須要調用的話,須要在view.py中將數據進行傳遞。

img = Test.objects.all()
return render(request, 'home.html', {'img':img})

   在視圖函數中加入,上面兩句。在模板中,將圖片展示出來:

{% for i in img %}
<img src="{{ MEDIA_URL }}{{ i.image }}">
{% endfor %}

   這裏{{ MEDIA_URL }}是必需要的,由於數據庫取出來的地址是/logo/img001.png這種,路徑不完整,咱們存儲的路徑上/media/logo/img001.png

   但到這裏仍是不能正常顯示圖片,會顯示404,是由於圖片的url也是須要經過django進行指派,咱們還須要在urls.py進行設定。

  爲了html模板能正確找到MEDIA_URL,TEMPLATES中導入相關的包。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'django.template.context_processors.media',#### add here
            ],
        },
    },
]

 

    直接參考官方文檔便可。這樣圖片的url纔是完整的,咱們的頁面才能夠正常顯示圖片。


 

2.  上傳圖片

  咱們可能須要用戶上傳本身的頭像,或者相冊,這裏作一個簡單的示範:

  首先須要一個form,enctype="multipart/form-data" method="post" 是必需要填寫的,表示數據不通過編碼,直接上傳。{%csrf_token%}也是post時,django強制要求的。

<form enctype="multipart/form-data" action="#" method="post">
    {% csrf_token %}
    <input type="text" name="name">
    <input type="file" name="logo">

    <input type="submit" value="upload">
</form>

   而後須要去views.py對視圖函數進行操做。

    if request.method == 'POST':
        file = request.FILES['logo']
        if file:
            new_img = Test(
                name=request.POST.get('name'),
                image=file

            )
            new_img.save()

   與普通的數據不一樣,這裏使用了request.FILES字典的方式去獲取文件,而後建立新的數據,並保存到數據庫中。

相關文章
相關標籤/搜索