質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

Q&A

解決済

1回答

1581閲覧

djangoでファイルをアップロードする際にサイズが0のファイルを検知して処理を中断させたい

sarasa_38765

総合スコア34

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

0グッド

0クリップ

投稿2020/06/25 09:12

編集2020/06/25 10:25

#https://qiita.com/ekzemplaro/items/07abd9a941bcd0eb5834を参考にしてファイルをアップロードする処理を作成しています。
#通常の分は問題なくアップロードできたのですが、ファイルサイズが0の分をアップロードすると当然エラーになります。サイズが0なら処理を中断させる方法はありますでしょうか?
#request.FILES.sizeで確認しようと思ったのですが中身無しの分はアクセスするとエラーになってしまいます。

#回答頂いた方の処理を行いましたがvalueerrorでした

python

1from django import forms 2from django.core.exceptions import ValidationError 3 4 5def size_valid(f): 6 try: 7 size = f.size 8 except: 9 raise ValidationError("サイズエラー") 10 11class UploadFileForm(forms.Form): 12 file = forms.FileField(validators=[size_valid])

log

1ValueError at /trade_xls/create 2The view trade_xls.views.create didn't return an HttpResponse object. It returned None instead. 3Request Method: POST 4Request URL: http://192.168.168.132/carcass/trade_xls/create 5Django Version: 3.0.7 6Exception Type: ValueError 7Exception Value: 8The view trade_xls.views.create didn't return an HttpResponse object. It returned None instead. 9Exception Location: /usr/local/lib/python3.6/site-packages/django/core/handlers/base.py in _get_response, line 126 10Python Executable: /usr/bin/python3 11Python Version: 3.6.8 12Python Path: 13['/home/sun/carcass', 14 '/usr/lib64/python36.zip', 15 '/usr/lib64/python3.6', 16 '/usr/lib64/python3.6/lib-dynload', 17 '/usr/local/lib64/python3.6/site-packages', 18 '/usr/local/lib/python3.6/site-packages', 19 '/usr/lib64/python3.6/site-packages', 20 '/usr/lib/python3.6/site-packages'] 21Server time: 木, 25 6月 2020 18:41:32 +0900

#細部あってるかどうかわからないのですが変更しましたが、エラーは同じでした

python

1from django import forms 2from django.core.exceptions import ValidationError 3 4 5 6 7 8class UploadFileForm(forms.Form): 9 file = forms.FileField() 10 def clead_file(self): 11 file= self.cleaned_data.get("file") 12 if not file: 13 raise ValidationError("サイズエラー") 14 return file 15

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Python

1class Hoge(forms.Form): 2 file = forms.FileField() 3 def clean_file(self): 4 file = self.cleaned_data["file"] 5 if not file: 6 raise forms.ValidationError("サイズエラー") 7 return file

HTML

1<!-- エラーを表示 --> 2{% if form.errors %} 3 {% for field in form %} 4 {% for error in field.errors %} 5 <p class="error">{{error}}</p> 6 {% endfor %} 7 {% endfor %} 8{% endif %}

とかいけますか?

投稿2020/06/25 09:29

編集2020/06/25 10:58
ForestSeo

総合スコア2720

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sarasa_38765

2020/06/25 10:27

細部わからないところもあったのですが変更しました。同じValueErrorでした
ForestSeo

2020/06/25 11:06 編集

あ、if not file: でしたね。なぜか image になってました。 あと、self.cleaned_data["file"] でいけますか? 編集しました。 エラーは出ないと思います。
ForestSeo

2020/06/25 11:47 編集

思ったんですが、サイズ0のファイルってどのようにアップロードするんですか? 選択せずには開けませんよね。
sarasa_38765

2020/06/26 00:41

回答ありがとうございます。エラーの際のreturn renderができていないようでした。検知はできました。ありがとうございました。サイズ0のファイルは別のプロジェクトのテストで残っていた残骸ファイルです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問