Django中media资源配置的问题

序列化与反序列化

序列化: 将对象序列化成字符串用户传输

反序列化: 将字符串反序列化成对象用于使用

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

posted @ 2021-11-19 18:18  Jessie橙子  阅读(120)  评论(0编辑  收藏  举报
Live2D