请问这个理解是否正确?
STATIC_URL = '/static/'
# 用户上传的文件目录
MEDIA_URL = '/medias/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'medias')
urlpatterns += [
url(r'^medias/(?P<path>.*)$', serve, {
'document_root': settings.MEDIA_ROOT
}),
]关于以上两段代码理解如下:
①STATIC_URL = '/static/' 这里是django框架设置的默认存放静态文件的地方。
MEDIA_URL = '/medias/' 这里是设置用户存放上传文件的地方,设置2个地址存放文件,是为了将不同的功能文件分开,便于代码的维护。另外网查得知,这个代码片段也是将serve函数作为视图函数的前提条件。
②MEDIA_ROOT = os.path.join(BASE_DIR, 'medias') 首先MEDIA_ROOT 这个对象是存放的是一个地址,这个地址又是由BASE_DIR(指的是django服务器的地址)和字符串medias拼接而来。简单的就是:服务器地址+'medias' = http://127.0.0.1:8000/medias
③urlpatterns += [] 为的是与其他的url函数按照django框架的要求,组成一个列表以供django识别调用
④url(r'^medias/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT })
根据URL函数的定义:def url(regex, view, kwargs=None, name=None):
r'^medias/(?P<path>.*)$' 这里即是参数regex,地址后半部分的正则匹配规则。(前半部分是服务器地址)
serve 即serve()函数,这里被用作视图函数,因为是django内置,所以不存在于views.py文件中
kwargs=None,这个参数即视图函数view包含的关键字参数,这里的view函数即函数serve()
name=None,这个参数是前面正则规则的一个别名
再看serve():def serve(request, path, document_root=None, show_indexes=False):
request:视图函数都需要有这个参数接受调用请求
path:即视图函数要调用的地址
document_root=None:默认这个参数可以不写,但是如果没有path这个参数,就需要以字典形式传入地址到这个参数
在serve()函数的注释说明有这样一段:Serve static files below a given point in the directory structure.
To use, put a URL pattern such as::
from django.views.static import serve
url(r'^(?P<path>.*)$', serve, {'document_root': '/path/to/my/files/'})
in your URLconf. You must provide the ``document_root`` param. You may
also set ``show_indexes`` to ``True`` if you'd like to serve a basic index
of the directory. This index view will use the template hardcoded below,
but if you'd like to override it, you can create a template called
``static/directory_index.html``.
以上告诉了使用serve这个函数的方法,这视为django框架的要求,要使用这个serve函数,必须遵照执行
问题:1.以上理解是否正确,请指正!
2.MEDIA_URL = '/medias/' 和 MEDIA_ROOT = os.path.join(BASE_DIR, 'medias')
为什么不是MEDIA_URL = '/medias/images/cat.jpg/' 和 MEDIA_ROOT = os.path.join(BASE_DIR, 'medias/images/cat.jpg')
我试了,但是好像没什么意义?
正在回答
同学你好:
1、同学的理解大致是正确的,MEDIA_URL = '/media/' #访问路径
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') #上传路径。
调用哪个视图函数主要是根据用户在浏览器发送的请求,django内置的服务器接收到请求之后根据url匹配规则找到对应的函数。
kwargs参数理解正确
name参数,用来命名该URL,主要用在URL反解中,或者一起测试接口中(目前还没有学习反解,与测试用例作为了解即可)
关于serve()函数的注释,同学可以自行翻译一下,在你的URLconf中。必须提供“document_root”参数。如果想为基本索引提供服务,还可以将“show_indexes”设置为“True”此索引视图将使用下面硬编码的模板,但是如果您想覆盖它,可以创建一个名为``static/directory_index.html``
2、因为MEDIA_URL = '/media/' #访问路径 这里用的是文件的根目录而不是根目录中的子目录
如果我的回答解决了同学的疑惑,欢迎采纳!祝同学学习愉快!
- 参与学习 人
- 提交作业 218 份
- 解答问题 3562 个
本阶段带你用Python开发一个网站,学习主流框架Django+Flask是Python Web开发的第一步,在基础知识上实现积分商城的项目开发,体验真实的项目开发流程,提高解决编程问题和效率的能力。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星