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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1705閲覧

Python enctype="multipart/form-data"をコードに追加後、入力フォームの文字が認識されなくなった

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/08/19 15:15

前提・実現したいこと

Pythonの勉強を初めて2週間程度の超初心者です。質問の内容におかしな点がございましたらご了承くださいませ。
初心者向けの教本を用いて勉強をしています。特定の文字を入力すると、それに対応するレスポンスを返すアプリケーションを作成しました。例えば、「今日」と入力すると今日の日付を返すようになっています。
ブラウザ上はしたの画像のようになっています。
イメージ説明

発生している問題・エラーメッセージ

下のコードがテンプレートファイルの中身です。
enctype="multipart/form-data"をformに追加後、「メッセージを入力してください」のフォームに文字を入力しても、認識されなくなった
→教本のなかで、画像を送信できるようフォームにenctype="multipart/form-data"を追加しました。特定のコマンド(今日、辞書など)以外、「何ヲ言ッテルカ、ワカラナイ」と返るようになっています。これまできちんと動作していましたが、enctype~を追加後、何を入力しても「何ヲ言ッテルカ、ワカラナイ」が返るようになりました。

<html> <body> <h1>pybot Webアプリケーション</h1> <form method="post" action="/hello" enctype="multipart/form-data"> メッセージを入力してください: <input type="text" name="input_text"><br> 画像を選択してください: <input type="file" name="input_image"><br> <input type="submit" value="送信"> </form> <ul> <li>フォームに入力されたメッセージ: {{input_text}}</li> <li>pybotからの応答メッセージ: {{!output_text}}</li> </ul> </body> </html>

該当のソースコード

テンプレートファイル

<html> <body> <h1>pybot Webアプリケーション</h1> <form method="post" action="/hello" enctype="multipart/form-data"> メッセージを入力してください: <input type="text" name="input_text"><br> 画像を選択してください: <input type="file" name="input_image"><br> <input type="submit" value="送信"> </form> <ul> <li>フォームに入力されたメッセージ: {{input_text}}</li> <li>pybotからの応答メッセージ: {{!output_text}}</li> </ul> </body> </html>

サーバーを起動するためのファイル

from bottle import route, run, template, request from pybot import pybot @route('/hello') def hello(): return template('pybot_template', input_text='', output_text='') @route('/hello', method='POST') def do_hello(): input_text = request.forms['input_text'] input_image = request.files.input_image output_text = pybot(input_text, input_image) return template('pybot_template', input_text=input_text, output_text=output_text) run(host='localhost', port=8080, debug=True)

アプリケーション本体

from pybot_eto import eto_command from pybot_random import choice_command, dice_command from pybot_datetime import today_command, now_command, weekday_command from pybot_wikipedia import wikipedia_command def len_command(command): cmd, text = command.split() length = len(text) response = '文字列ノ長サハ {} 文字デス'.format(length) return response def heisei_command(command): heisei, year_str = command.split() if year_str.isdigit(): year = int(year_str) if year >= 1989: heisei_year = year - 1988 response = '西暦{}年ハ、平成{}年デス'.format(year, heisei_year) else: response = '西暦{}年ハ、平成デハアリマセン'.format(year) else: response = '数値ヲ指定シテクダサイ' return response command_file = open('pybot.txt', encoding='utf-8') raw_data = command_file.read() command_file.close() lines = raw_data.splitlines() bot_dict = {} for line in lines: word_list = line.split(',') key = word_list[0] response = word_list[1] bot_dict[key] = response def pybot(command): # command = input('pybot> ') response = '' try: for message in bot_dict: if message in command: response = bot_dict[message] break if '長さ' in command: response = len_command(command) if '平成' in command: response = heisei_command(command) if '干支' in command: response = eto_command(command) if '選ぶ' in command: response = choice_command(command) if 'サイコロ' in command: response = dice_command() if '今日' in command: response = today_command() if '現在' in command: response = now_command() if '曜日' in command: response = weekday_command(command) if '辞典' in command: response = wikipedia_command(command) if not response: response = '何ヲ言ッテルカ、ワカラナイ' return response # if 'さようなら' in command: # break except Exception as e: print('予期せぬエラーが発生しました') print('* 種類:', type(e)) print('* 内容', e)

試したこと

web上で同様の問題を探してみたのですが、見つけることができませんでした。
そもそも私の知識が乏しいあまりにどういう問題が起きているのかを把握できておりません・・・

どなたかわかる方いらっしゃいましたら御助力のほどよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ご提示のソースコードだと、動作させることができませんでした。
本当にこれが最新版ですか?
現象が再現する最小限のソースコードをご提供いただけませんか。

bottleには詳しくありませんが、適当に削除して動かしてみたところ、[/hello]のPOST呼び出しの以下部分でError: 500 Internal Server Errorになりました。

python

1# サーバーを起動するためのファイル 2 output_text = pybot(input_text, input_image)

引数の数があっていないようです。

python

1# アプリケーション本体 2def pybot(command):

以下が返ってきますか?

何を入力しても「何ヲ言ッテルカ、ワカラナイ」が返るようになりました。

投稿2020/08/20 08:10

FiroProchainezo

総合スコア2424

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

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

退会済みユーザー

退会済みユーザー

2020/08/20 09:29

ご回答をありがとうございます。 上のコードに一部間違いがございました。申し訳ございません。下記コードで再度見てみていただけますでしょうか。 ○pybot2.py --アプリケーション本体 ========================= def len_command(command): cmd, text = command.split() length = len(text) response = '文字列ノ長サハ {} 文字デス'.format(length) return response def heisei_command(command): heisei, year_str = command.split() if year_str.isdigit(): year = int(year_str) if year >= 1989: heisei_year = year - 1988 response = '西暦{}年ハ、平成{}年デス'.format(year, heisei_year) else: response = '西暦{}年ハ、平成デハアリマセン'.format(year) else: response = '数値ヲ指定シテクダサイ' return response command_file = open('pybot.txt', encoding='utf-8') raw_data = command_file.read() command_file.close() lines = raw_data.splitlines() bot_dict = {} for line in lines: word_list = line.split(',') key = word_list[0] response = word_list[1] bot_dict[key] = response def pybot(command): # command = input('pybot> ') response = '' try: for message in bot_dict: if message in command: response = bot_dict[message] break if '長さ' in command: response = len_command(command) if '平成' in command: response = heisei_command(command) if '干支' in command: response = eto_command(command) if '選ぶ' in command: response = choice_command(command) if 'サイコロ' in command: response = dice_command() if '今日' in command: response = today_command() if '現在' in command: response = now_command() if '曜日' in command: response = weekday_command(command) if '辞典' in command: response = wikipedia_command(command) if not response: response = '何ヲ言ッテルカ、ワカラナイ' return response # if 'さようなら' in command: # break except Exception as e: print('予期せぬエラーが発生しました') print('* 種類:', type(e)) print('* 内容', e) ====================== ○pybotweb.py --サーバーを起動するためのファイル ====================== from bottle import route, run, template, request from datetime import datetime from pybot2 import pybot @route('/hello') def hello(): return template('pybot_template', input_text='', output_text='') @route('/hello', method='POST') def do_hello(): input_text = request.forms.input_text output_text = pybot(input_text) return template('pybot_template', input_text=input_text, output_text=output_text) run(host='localhost', port=8080, debug=True) ======================== ○pybot_template.tpl --テンプレートファイル ======================== <html> <body> <h1>pybot Webアプリケーション</h1> <form method="post" action="/hello" enctype="multipart/form-data"> メッセージを入力してください: <input type="text" name="input_text"><br> 画像を選択してください: <input type="file" name="input_image"><br> <input type="submit" value="送信"> </form> <ul> <li>入力されたメッセージ: {{input_text}}</li> <li>pybotからの応答メッセージ: {{!output_text}}</li> </ul> </body> </html> ======================== ○pybot.txt --特定の言葉に対する返答を記載したファイル ======================== こんにちは,コンニチハ ありがとう,ドウイタシマシテ さようなら,サヨウナラ ========================
退会済みユーザー

退会済みユーザー

2020/08/20 09:34

上記4つのファイルだけで、「こんにちは」「ありがとう」「さようなら」でそれぞれ返事が返ってきて、「長さ こんにちは」などとすればこんにちはの文字数5が返り、「平成 1991」とすれば平成3年が返ります。 が、現状では何を打ってもおそらく'何ヲ言ッテルカ、ワカラナイ'が返ります。 pybot_template.tplの<form method="post" action="/hello" enctype="multipart/form-data">の部分から、enctype="multipart/form-data"を消すと、正常に機能します。 長々と申し訳ございません。ご確認いただけますでしょうか。
FiroProchainezo

2020/08/21 00:24

ご存じの通りpythonはインデントが正しく無いと動作しません。 コメント欄ではインデントを保持したままcodeを表示することができません。 質問文を修正し、最新のコードをご提供いただけますか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問