W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
當(dāng)你使用 ?FileField
?或 ?ImageField
? 時(shí),Django 提供了一組處理文件的API。
考慮下面的模型,使用 ?ImageField
?來存儲(chǔ)照片:
from django.db import models
class Car(models.Model):
name = models.CharField(max_length=255)
price = models.DecimalField(max_digits=5, decimal_places=2)
photo = models.ImageField(upload_to='cars')
specs = models.FileField(upload_to='specs')
任何 Car 實(shí)例將擁有一個(gè) photo 屬性,你可以使用它來獲取附加照片的詳情:
>>> car = Car.objects.get(name="57 Chevy")
>>> car.photo
<ImageFieldFile: cars/chevy.jpg>
>>> car.photo.name
'cars/chevy.jpg'
>>> car.photo.path
'/media/cars/chevy.jpg'
>>> car.photo.url
'http://media.example.com/cars/chevy.jpg'
注解:文件在數(shù)據(jù)庫(kù)中作為保存模型的一部分,因此在模型被保存之前,不能依賴磁盤上使用的實(shí)際文件名。
car.photo 是一個(gè) File 對(duì)象,這意味著它擁有下面所描述的所有方法和屬性。
例如,您可以通過將文件名設(shè)置為相對(duì)于文件存儲(chǔ)位置的路徑來更改文件名(如果你正在使用默認(rèn)的 ?FileSystemStorage
?,則為 ?MEDIA_ROOT
?)。
>>> import os
>>> from django.conf import settings
>>> initial_path = car.photo.path
>>> car.photo.name = 'cars/chevy_ii.jpg'
>>> new_path = settings.MEDIA_ROOT + car.photo.name
>>> # Move the file on the filesystem
>>> os.rename(initial_path, new_path)
>>> car.save()
>>> car.photo.path
'/media/cars/chevy_ii.jpg'
>>> car.photo.path == new_path
True
要將磁盤上的現(xiàn)有文件保存到 ?FileField
?:
>>> from pathlib import Path
>>> from django.core.files import File
>>> path = Path('/some/external/specs.pdf')
>>> car = Car.objects.get(name='57 Chevy')
>>> with path.open(mode='rb') as f:
... car.specs = File(f, name=path.name)
... car.save()
雖然 ?ImageField
?非圖像數(shù)據(jù)屬性(例如高度、寬度和大?。┰趯?shí)例上可用,但如果不重新打開圖像,則無法使用底層圖像數(shù)據(jù)。 例如:
>>> from PIL import Image
>>> car = Car.objects.get(name='57 Chevy')
>>> car.photo.width
191
>>> car.photo.height
287
>>> image = Image.open(car.photo)
# Raises ValueError: seek of closed file.
>>> car.photo.open()
<ImageFieldFile: cars/chevy.jpg>
>>> image = Image.open(car.photo)
>>> image
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=191x287 at 0x7F99A94E9048>
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: