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

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

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

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

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

Q&A

1回答

4316閲覧

ローカルで動いたファイルをサーバーで動かすと405エラーになる

退会済みユーザー

退会済みユーザー

総合スコア0

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

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

0グッド

0クリップ

投稿2021/11/14 05:12

編集2021/12/18 08:11

前提・実現したいこと

ロリポップFTPでファイルをアップロードしましたが、ローカル環境では動いたファイルがエラーになります。

HTMLからPYthonへ受け渡す時に405エラーが表示されます。

こちらのサイトを参考にしました。
https://qiita.com/Rowing0914/items/de16bc2676705bd94d24

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

Method Not Allowed The method is not allowed for the requested URL.

調べた結果、405エラーはURLやファイルの配置がおかしいという指摘が多数あったので確認しましたが、解決方法がわからなかったので、質問させていただきました。

該当のソースコード

layouthtml

1<!DOCTYPE html> 2<html> 3 <head> 4 <title>home</title> 5 <meta charset = "UTF-8"> 6 </head> 7 <body> 8 <form method = "POST" action="/result"> 9 <label>名前<input type="text" value="" size="30" name="name"></label> 10 <label>番号<input type="text" value="" size="30" name="num"></label> 11 </form> 12 <h3>{{ui}}</h3> 13 {% block body %}{% endblock %} 14 </body> 15</html>

indexhtml

1{% extends "layout.html" %} 2{% block body %} 3Welcome to Heroku! 4This is your first app, isn't it? 5Let's share your achievement with your friends!! 6{% endblock %}

indexpy

1from flask import Flask , render_template , request 2from models.fin import nn 3 4app = Flask(__name__) 5 6@app.route('/') 7def index(): 8    return render/template('index.html') 9 10@app.route('/result', methods=['GET', 'POST']) 11def result(): 12 name = request.form["name"] 13 num = request.form["num"] 14 ui = nn(name,num) 15 return render_template('index.html',ui=ui) 16 17if __name__ == '__main__': 18 app.run(debug=True)

finpy

1def nn(name,num): 2 a = [num/name] 3 return a

ディレクトリとファイル

heroku_dir---index.py templates---index.html layout.html models---fin.py

補足情報(FW/ツールのバージョンなど)

Mac、python3.8.8,ロリポップFTPを使用しています

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

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

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

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

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

guest

回答1

0

The method is not allowed for the requested URL.

そもそもこのエラーは許可されていないメソッドでリクエストが実行されたときに発生するエラーです。
おそらくhttp://localhost:5000/をブラウザで開いたのではないでしょうか?
ブラウザで開くときにはGETメソッドが実行されているので、ブラウザで開く想定であればmethodsGETを追加する必要があります。

ついでですが、HTMLを見るかぎり同じメソッドでフォームに送信もしたいようなので、ポストのあったときにだけパラメータを取得できるようにしたほうがいい気がするので、request.method == 'POST'で条件分岐をしないとエラーが出る気がします。
なので、index()関数を以下のように修正してみてはいかがでしょうか?

python

1def index(): 2 if request.method == 'POST': 3 name = request.form.getlist("name") 4 num = request.form.getlist("num") 5 ui = nn(name,num) 6 else: 7 ui = [] 8 return render_template('index.html',ui=ui)

投稿2021/11/14 08:48

Supernove

総合スコア1154

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

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

退会済みユーザー

退会済みユーザー

2021/11/14 10:26 編集

ご回答ありがとうございます。 ブラウザで開いていたため、GETを追加しました。 更新すると、NameError: name 'request' is not definedとなりました。 requestは事前にimportが必要なのですか requestsについての説明は多くあったのですが、同じなのでしょうか pip install requestsは実行済みです 教えていただきありがとうございます。
Supernove

2021/11/14 10:53

ちょっと紛らわしいですが、flaskのrequestがインポートに入ってなかったので、1行目にrequestを追加して、 【from flask import Flask , render_template, request】 としてみてください
退会済みユーザー

退会済みユーザー

2021/12/18 07:19 編集

requestを追加すると、ローカルで表示することができました。 ロリポップFTPにアップしたのですが、HTMLの入力情報をPythonhへ受け渡す時に、Method Not Allowedが表示されました。 ローカル環境で動いたファイルがサーバーではエラーになる原因を教えていただきたいです。 よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問