首先是 form 要写正确,格式为:
<form enctype="multipart/form-data" method="POST" action="/address/upload/">
文件上传的input field的写法为:
<input type="file" name="file"/>
后台的处理是使用 request.FILES。它是一个Dict值,你可以:
file_obj = request.FILES.get(‘file’, None)
这里的’file’是与input field的名字一致的。如果file_obj不为空,它将是一个字典,通过测试可以得知它都有什么值。如果你参考 django 自带的 request_response.txt 文档,可以看到它主要有三个值:
content
这是文件的内容
filename
这是原文件名
content-type
这是文件的mime类型
那么它放在哪里呢?应该是在内存中。因此接下来你可以对这个文件的内容进行处理了,是直接处理内容或保存到一个地方。
也许有人会问,那么 settings.py 中的 MEDIA_ROOT 是做什么用的。如果你不使用 django 的 Model 中的 FileField 或 ImageField 的话,它其实没有什么用。这个设置是用在 Model 的 FileField 中的。在创建一个 Model 时,如果你的 Model 中有与文件相关的字段,那么 django 会根据每个文件字段生成一系列的方法,如:get_fieldname_filename() get_fieldname_url() save_fieldname_file()。fieldname是根据你在 Model 中所起的名字来的。而 save_fieldname_file 需要两个参数,一个是文件名,另一个就是文件内容。因此,你可以使用这个方法来将上传的文件保存。那么保存到哪里去了呢?就是 MEDIA_ROOT 这个目录下。而 settings.py 中的 MEDIA_URL 就是用于 get_fieldname_url() 这个方法的。
因此,MEDIA_ROOT 只与 Model 有关。
<form enctype="multipart/form-data" method="POST" action="/address/upload/">
文件上传的input field的写法为:
<input type="file" name="file"/>
后台的处理是使用 request.FILES。它是一个Dict值,你可以:
file_obj = request.FILES.get(‘file’, None)
这里的’file’是与input field的名字一致的。如果file_obj不为空,它将是一个字典,通过测试可以得知它都有什么值。如果你参考 django 自带的 request_response.txt 文档,可以看到它主要有三个值:
content
这是文件的内容
filename
这是原文件名
content-type
这是文件的mime类型
那么它放在哪里呢?应该是在内存中。因此接下来你可以对这个文件的内容进行处理了,是直接处理内容或保存到一个地方。
也许有人会问,那么 settings.py 中的 MEDIA_ROOT 是做什么用的。如果你不使用 django 的 Model 中的 FileField 或 ImageField 的话,它其实没有什么用。这个设置是用在 Model 的 FileField 中的。在创建一个 Model 时,如果你的 Model 中有与文件相关的字段,那么 django 会根据每个文件字段生成一系列的方法,如:get_fieldname_filename() get_fieldname_url() save_fieldname_file()。fieldname是根据你在 Model 中所起的名字来的。而 save_fieldname_file 需要两个参数,一个是文件名,另一个就是文件内容。因此,你可以使用这个方法来将上传的文件保存。那么保存到哪里去了呢?就是 MEDIA_ROOT 这个目录下。而 settings.py 中的 MEDIA_URL 就是用于 get_fieldname_url() 这个方法的。
因此,MEDIA_ROOT 只与 Model 有关。