ゆーじぇいブログ

ゆーじぇいブログ

プログラミングとか色々

[Django]特定の拡張子のファイルのみしかアップロードできないようにする

f:id:jyouj:20181124164719j:plain

画像ファイルなら画像ファイル、音声ファイルなら音声ファイル。という風に特定の拡張子だけしかアップロードできないようにしたいということがあるでしょう。そんな時の対処法を紹介します。

画像ファイルオンリー

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])

これで、jpg, png, jpegのみしかアップロードを受け付けません。

音声ファイルオンリー

画像ファイルと同じように実装していきます。先ほどの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に!