09 Django 静态文件、媒体文件及文件上传

这里总得写点啥吧。

静态文件、媒体文件及文件上传

一、静态文件和媒体文件

媒体文件,就是用户上传的文件,叫做 media

静态文件,是存放在服务器的 cssjsimage 等文件,叫做 static

1. 在 Django 中使用静态文件

首先,确保 django.contrib.staticfilesINSTALLED_APP

其次,在项目的 settings.py 中定义 STATIC_URL

STATIC_URL = "/static/"

然后,在应用的 static 目录中存放静态文件,如:App/static/example.jgp

再然后,如果有别的静态资源文件,不在 app 下的 static 目录下,可以通过 STATICFILES_DIRS 来指定额外的静态文件搜索目录。

STATICFILES_DIRS = [
	os.path.join(BASE_DIR, "static"),
	...
]

最后,在模板中使用 load 标签加载静态文件

{% load static %}
<img src="{% static "example.jpg" %}" />

2. 在 Django 使用媒体文件

settings 中配置 MEDIA_ROOT

MEDIA_ROOT = os.path.join(BASE_DIR, "media")

二、文件上传

文件上传要求 form 表单存在 enctype="multipart/form-data" 属性,并且提交方法是 post

<form enctype="multipart/form-data" action="/uploadFile" method="post">
	<input type="file" name="myfile" />
	<br/>
	<input type="submit" value="upload" />
</form>

简单的文件上传

def file_upload(request):
	if request.method == "POST":
		# 获取上传的文件,如果没有文件,则默认为 None
		myFile = request.FILES.get('myfile', None)
		if not myFile:
			return HttpResponse("No Files for Uploadding")

		file_path = os.path.join(settings.MEDIA_ROOT, myFile)
		with open(file_path, "ab") as fp:
			for part in myFile.chunks():  # 分段写入文件
				fp.write(part)
		return HttpResponse("上传上成功!")
	else:
		return render(request, "index.html")