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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

3246閲覧

flaskで起動したウェブページで移動先のページに行こうとするとNOT FOUNDにな

meJ15

総合スコア55

Flask

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2019/03/20 05:20

前提・実現したいこと

ウェブページにボタンを作り、ボタンを押すとほかのページに行くような処理をJavaScriptで書き、ページの移動が確認できています。

しかしflaskを使うとページの移動がうまくできずにNOT FOUNDというページになってしまいます。

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

Not Found The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.

該当のソースコード

javascript

1 2function performLogIn() { 3 var name_us = $('input[name = "name_us"]').val(); 4 var emauil_us = $('input[name = "emauil_us"]').val(); 5 var pass_us = $('input[name = "pass_us"]').val(); 6 var conf_pass_us = $('input[name = "conf_pass_us"]').val(); 7 8 //var username = document.getElementsByTagName("username").value; 9 console.log(name_us); 10 console.log(emauil_us); 11 location.href="../index.html"; 12} 13 14

省略していますが。

html

1<!doctype html> 2 3<html lang="ja"> 4 <head> 5 <meta charset = "UTF-8"> 6 7 <link rel="stylesheet" href="/static/css/style.css"> 8 9 <title>mypage</title> 10 11 </head> 12 13 14 </div> 15<div class="cont_btn"> 16 <!--下のボタン--> 17 <a id = "login-button" href = "javascript:performLogIn()" input type =button class="btn_sign">SIGN IN</button></a> 18 19 </div> 20 21 22 <script src="/static/js/login.js"></script> 23 <script src="/static/js/jquery-3.3.1.min.js"></script> </body> 24 </html>

python

1from flask import Flask, render_template 2app = Flask(__name__) 3 4@app.route('/') 5def hello(): 6 with open("index.html", "rb") as f: 7 return render_template('index.html') 8 9 10if __name__ == "__main__": 11 app.run(debug=True,port=8084) 12 print("http://localhost:" + str(port))

ボタンを押したらjavascriptのperformLogIn()という関数を呼び出しています。
その関数ではURLを指定できるためにlocation.href="../main.html";としています
ボタンをおすとURLがhttp://localhost:8084/main.htmlと変わっていることも確認していますが、NOTFOUNDとなります。

試したこと

javascriptの
location.href="../index.html";を
location.href="";とすると再度同じページが表示されました。そのときのURLはhttp://localhost:8084/でした。(http://localhost:8084にindex.htmlが置かれている?) そう考え、pythonのプログラムを下のように変えるとmain.htmlが読み込まれましたが、わざわざこのようにしないとflaskはページが読み込めないのでしょうか?
index.htmlに書くだけではダメなのか。

python

1from flask import Flask, render_template 2app = Flask(__name__) 3 4@app.route('/') 5def hello(): 6 with open("index.html", "rb") as f: 7 return render_template('index.html') 8 9@app.route('/main.html') 10def main(): 11 with open("main.html", "rb") as f: 12 return render_template('main.html') 13 14if __name__ == "__main__": 15 app.run(debug=True,port=8084) 16 print("http://localhost:" + str(port))

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

わざわざこのようにしないとflaskはページが読み込めないのでしょうか?

そうですね。ルーティングとかURLマッピングなどと呼ばれます。
Flaskのルーティング部分をざっくりと理解する - Qiita
Flask を使いこなそう — Flask Handson 1 documentation

投稿2019/03/20 06:49

Lhankor_Mhy

総合スコア36074

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

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

meJ15

2019/03/20 13:29

そうなんですね。ありがとうございます。一つ質問なのですが、これから作ったhtml、jsをサーバにアップロードして、ユーザからの情報をデータベースに保存するようなシステムを構築したい場合はどのような手段が簡単なのでしょうか?初めはpython+flaskで作ったものをHerokuで動かそうと思っていました。phpを使った方がルーティングのことを考えずに構成できるのでしょうか?
Lhankor_Mhy

2019/03/23 02:16

たとえば、このページのURLは、 https://teratail.com/questions/180377 ですが、これは、 https://teratail.com/questions/【質問ID】 というルーティングだと思います。 質問者さんが想定しているシステムの詳細は分からないのですが、「ユーザからの情報」をデータベースに保存する際に、IDをふるでしょうから、そのIDで管理されるのがいいのではないでしょうか。
yuicho

2019/04/19 23:11

>phpを使った方がルーティングのことを考えずに構成できるのでしょうか? に関しては、まさにそうだと思います。 flaskだけに限らずフレームワークそのものが概ねすべてのアクセスが1ファイルにまず集中し(flaskの場合は `app.route()` を指定しているもの)、そこから各アクセスのリクエストされたURLをルーティングに照らし合わせて処理する仕組みになっています。 なので、「ルーティングのことを考えたくない」「 `index.php` にアクセスしたら `index.php` が、 `main.php` にアクセスしたら `main.php` が処理してほしい」ということであれば、フレームワークを使わないほうが良いかと思います。 その場合は Lhankor_Mhy 様の例をお借りしますと、GETパラメーターでユーザーIDを渡す、などになるかと思われます。 (ただ、大規模なものを作られるのであればフレームワーク無しは厳しいと思いますし、今のうちに慣れておくというのもよいのではないかと思います)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問