会員制の動画投稿ウェブアプリを作る際にサーバーの負荷を考慮して動画ファイルが1G Bを超えると投稿できないようにすることができたのでその技術を共有する。
Table of Contents
省略
- 投稿機能の実装
- アカウント作成方法
- File形式の指定方法
環境
- Django 3.1
- python 3.7.3
ソースコード
models.pyに上限のfileサイズを設定する
from django.core.exceptions import ValidationError
def file_size(value):
limit = 1000000000
if value.size>limit:
raise ValidationError('File too large. Size should not exceed 1GB.')
サイズはbite単位で決められているので1GBをbiteに変換する。
class Movie(models.Model):
user = models.ForeignKey( settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
title = models.CharField(_('Title'),max_length=50,unique=True)
video = models.FileField(upload_to='media/user/video',verbose_name='upload to moive ',
validators=[FileExtensionValidator(allowed_extensions=['MOV','MPEG4','mp4', ]),file_size])
def __str__(self):
return self.title
設定した上限バイトをMovieModel に読み込ませる。ビデオの項目に画像を読み込んでもらっては困るので、’MOV’,’MPEG4′,’mp4′,以外はエラーを返す設定を行った。すでにmigrate しているのなら改めてmigrateしてなくても良い楽チンさがある。
デモプレイ
1GB以上の動画を選びUploadボタンを押すと以下のようになる
まとめ
def file_size(value):
limit = 1000000000
if value.size>limit:
raise ValidationError('File too large. Size should not exceed 1GB.')
class Movie(models.Model):
user = models.ForeignKey( settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
title = models.CharField(_('Title'),max_length=50,unique=True)
video = models.FileField(upload_to='media/user/video',verbose_name='upload to moive ',
validators=[FileExtensionValidator(allowed_extensions=['MOV','MPEG4','mp4', ]),file_size])
def __str__(self):
return self.title
いざ実装する際に色々調べてみたら意外と簡単にできて驚いた。