官方文檔介紹:
https://docs.djangoproject.com/en/3.1/ref/files/storage/
源碼解讀:
from django.core.files.storage import FileSystemStorage
如果定義模型ImageField()
img=models.ImageField()
如果上傳圖片需要安裝Pillow
pip install Pillow
設置
1、首先在settings.py中定義MEDIA_ROOT與MEDIA_URL。例如:
MEDIA_ROOT = os.path.join(BASE_DIR, "files") MEDIA_URL = "/files/"
files可以是項目根目錄的任何一個文件夾
2、在urls.py的urlpatterns中,設置訪問文件的url
from django.views.generic import TemplateView url(r'^files/(?P<path>.*)$', serve, {"document_root": settings.MEDIA_ROOT})
?P<path>
代表這一塊的內容將作為參數path傳給serve方法
serve方法是django自帶的處理靜態文件的方法
document_root是必須提供的文件位置
注意如果文件放在url注冊的document_root之外,前端是不能訪問到這些文件的
models.py
file = models.FileField()
-
定義upload_to="background/"
表示上傳的文件將會存在$MEDIA_ROOT/background/下
-
ImageField和FileField實際上是CharFields,所以可以設置blank=True
serializers.py
正常寫一個ModelSerializer
class FileSerializer(serializers.ModelSerializer): class Meta: model = File fields = "__all__"
效果
寫完view中的邏輯和注冊路由后,訪問對應的接口可以看到FileField字段是一個上傳文件的按鈕
上傳文件后,該字段會返回可以訪問文件的url