请问这个理解是否正确?

请问这个理解是否正确?

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回答

同学你好:

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/'   #访问路径 这里用的是文件的根目录而不是根目录中的子目录

如果我的回答解决了同学的疑惑,欢迎采纳!祝同学学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
3.从网页搭建入门Python Web
  • 参与学习           人
  • 提交作业       218    份
  • 解答问题       3562    个

本阶段带你用Python开发一个网站,学习主流框架Django+Flask是Python Web开发的第一步,在基础知识上实现积分商城的项目开发,体验真实的项目开发流程,提高解决编程问题和效率的能力。

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师