Django之處理用戶上傳的文件

上傳的靜態文件的處理(2)

用戶上傳的文件, 比如用戶上傳的頭像照片, 那麼上傳到哪裏, 另外,我們又是如何可以在瀏覽器上可以訪問到這些資源呢,這裏, 就需要django對用戶上傳的靜態文件的處理方法了

1.設置MEDIA_UR和MEDIA_ROOT

先不管這兩個變量是什麼, 先設置了再解釋
在settings.py裏面
# settings.py

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'my_media')
好了,現在來解釋這兩個變量到底有什麼用,
首先, MEDIA_ROOT是用來存儲上傳的文件的絕對路徑,比如,我的一個modle裏面有一個文件類型的字端
# myapp.models
class myModel(models.Model):
    img = models.ImageField(upload_to = '/myImage')
那麼我創建一個對象時,裏面的img字段存儲的照片文件, 就在MEDIA_ROOT/myImage/ 文件夾下, 所以MEDIA_ROOT是設置上傳的文件的目錄的, 而具體安放的位置就是MEDIA_ROOT/upload_to設置的變量/ 文件夾下


那麼media_url是幹什麼的呢,和static_root一樣, 是與瀏覽器有關的,比如,我要在瀏覽器上訪問用戶上傳的照片, 如個人界面上要顯示個人 頭像, 那麼瀏覽器是怎麼訪問到這個資源的呢, 首先,肯定不是在<img>標籤裏面的src寫上照片所在的本地地址, 那麼在url上面設置成什麼,才能對應在服務器端拿到相應的靜態文件呢
那就需要MEDIA_URL來做映射了
如果我在瀏覽器上輸入字http://127.0.0.1:8000/media/文件的相對路徑,
那麼實際在服務器端尋找資源的位置就是MEDIA_ROOT/文件的相對路徑, 也就是  BASE_DIR/my_media/...

2.怎麼才能讓訪問成功

如果按上面的設置配置好後,
比如我的項目文件下, 有文件 my_media/myimage.png
那麼在瀏覽器上輸入:
http://127.0.0.1:8000/media/myimage.png
結果是無法加載,page不存在
爲什麼呢,

因爲沒有設置url函數
也就是我們要在urls.py設置這麼一句纔可以對瀏覽器輸入的url進行匹配
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # other url()
] + static(static(settings.MEDIA_URL,
             document_root=settings.MEDIA_ROOT))

這樣, 就可以訪問 http://127.0.0.1:8000/media/myimage.png

注意: 這種方法, 只能在settings.py

DEBUG = True

時纔有效,也就是說,僅適用開發過程中, 線上環境是不能這麼幹的

可以看一篇文章博客鏈接

發佈了31 篇原創文章 · 獲贊 23 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章