1. 程式人生 > >Django 圖片上傳到數據庫 並調用顯示

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

data enc blog 模型 super 圖片路徑 需要 clas .com

環境:Django2.0 Python3.6.4

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

直接上代碼:

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

PS: 使用ImageField首先需要裝Pillow。

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

建立好模型,需要進行遷移操作,

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就是在這個目錄下進行操作。


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

  為了能夠方便錄入數據,我們使用django後臺管理,創建管理頁面。

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進行設定。

技術分享圖片

    直接參考官方文檔即可。這樣圖片的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字典的方式去獲取文件,然後創建新的數據,並保存到數據庫中。

    


  

   

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