Django中media資源配置的問題
阿新 • • 發佈:2021-11-19
序列化與反序列化
序列化: 將物件序列化成字串使用者傳輸
反序列化: 將字串反序列化成物件用於使用
drf的序列化與反序列化
序列化: 將Model類物件序列化成字串使用者傳輸
反序列化: 將字串反序列化成Model物件用於使用
1、在settings中配置
配置媒體跟路由: settings.py 用來存放使用者上傳的靜態檔案,可以對外公開
# 註冊rest_framework INSTALLED_APPS = [ # ... 'rest_framework', ] #設定os.path.join(BASE_DIR, 'templates' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')] , 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ #... ], }, }, ] # media資源 MEDIA_URL = '/media/' # 後期高階序列化類與檢視類,會使用該配置 MEDIA_ROOT = os.path.join(BASE_DIR, 'media')# media資源路徑
將使用者上傳的所有靜態檔案統一管理:settings.py
2、在urls配置
from MxShop.settings import MEDIA_ROOT from django.views.static import serve #靜態檔案 urlpatterns = { path(r'admin/', admin.site.urls), url('^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}) }
serve是個檢視函式(request,path),通過path找到檔案然後 返回response。
伺服器對外公開伺服器靜態資源,是通過配置url介面,並且在介面中返回指定的靜態資源
問題
現象1:找不到資源
現象2:TypeError: 'set' object is not reversible
解決方法:
檢查專案中的ruls.py檔案是否把urlpatterns列表的[]寫成了{}。因為字典是無序的,所以報了不能逆轉的錯誤。
並且商品圖片也能正常顯示了
參考:
https://www.jianshu.com/p/32c52066ddb4
https://www.cnblogs.com/lulingjie/p/11914317.html
https://blog.csdn.net/u012069883/article/details/82378295