python初心者です。 visual stdio Codeで開発しています。
csvファイル(ファイル名、ファイルの中身日本語あり)をアップロードする処理を
ネット作成しています。
関数での記述方法では下記の記述でアップロードできるようになりました。
(ただCode上でファイルを確認すると日本語になっていません。。)
views.py
UPLOAD_DIR = os.path.dirname(os.path.abspath(file)) + '/uploads/' # アップロードしたファイルを保存するディレクトリ
アップロードされたファイルのハンドル
def handle_uploaded_file(f):
path = os.path.join(UPLOAD_DIR, f.name)
with open(path, 'w', encoding='UTF_8') as destination:
for chunk in f.chunks():
destination.write(str(chunk))
ファイルアップロード
def upload(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
handle_uploaded_file(request.FILES['file'])
return redirect('WebEdi:upload_complete') # アップロード完了画面にリダイレクト
else:
form = UploadFileForm()
return render(request, 'WebEdi/upload.html', {'form': form})
これをクラス化しようとしているのですが、uploadをメソッドにしてupload内でhandle_uploaded_file
にrequest.FILESを引数で渡して呼び出したいのですが警告になってしまいます。
どのように記述すればよいのでしょうか?
初心者の質問で申し訳ありませんがよろしくお願いします。
class appView(TemplateView):
def __init__(self): self.params = { 'form': UploadFileForm(), 'result': None } def handle_uploaded_file(self,f): path = os.path.join(UPLOAD_DIR, f.name) with open(path, 'w', encoding='UTF_8') as destination: for chunk in f.chunks(): destination.write(str(chunk)) def get(self, request): return render(request, 'app/index.html', self.params) # ファイルアップロード def post(self,request): self.params['form'] = UploadFileForm(request.POST, request.FILES) if self.params['form'].is_valid(): self.handle_uploaded_file(request.FILES['file']) return render(request, 'app/index.html', self.params)
あなたの回答
tips
プレビュー