[Django]特定の拡張子のファイルのみしかアップロードできないようにする
画像ファイルなら画像ファイル、音声ファイルなら音声ファイル。という風に特定の拡張子だけしかアップロードできないようにしたいということがあるでしょう。そんな時の対処法を紹介します。
画像ファイルオンリー
validators.pyを用意します。
import os from django.core.exceptions import ValidationError def validate_is_picture(value): ext = os.path.splitext(value.name)[1] if not ext.lower() in ['.jpg', '.png', '.jpeg']: raise ValidationError('Only picure files are availables.')
これをmodels.pyに反映します。
class Voice(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='voices') background = models.FileField(upload_to='background', default='/background/default.png', validators=[validate_is_picture])
音声ファイルオンリー
画像ファイルと同じように実装していきます。先ほどのvalidators.pyに追記します。
def validate_is_audio(value): ext = os.path.splitext(value.name)[1] if not ext.lower() in ['.wav', '.mp3', '.acc']: raise ValidationError('Only audio files are availables.')
そして、models.pyにも
sound = models.FileField(upload_to='sound', validators=[validate_is_audio])
これで、音声ファイルのみしかアップロードできなくしました。
何かあれば、じぇい👨💻 (@jyouj__) | Twitterに!