前提・実現したいこと
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上で同様の問題を探してみたのですが、見つけることができませんでした。
そもそも私の知識が乏しいあまりにどういう問題が起きているのかを把握できておりません・・・
どなたかわかる方いらっしゃいましたら御助力のほどよろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/08/20 09:29
退会済みユーザー
2020/08/20 09:34
2020/08/21 00:24