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

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

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

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

Python 3.x

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

Q&A

解決済

1回答

4140閲覧

Xreaサーバー内のFlaskでルーティングしたHTMLがNotFoundになってしまいます

jyansinkai

総合スコア66

Flask

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

Python 3.x

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

0グッド

0クリップ

投稿2021/09/02 00:58

いつもお世話になっております。

ログイン認証の後にサイトを表示させるというコードを作成しました。
これをXreaサーバー上でFlaskを動作させるべく、SSH接続からFlask等のインストールを行い、ローカルサーバーでエラーなく動作した各種ファイルをアップロードしました。
しかし、ローカルのディレクトリ構成をそのままアップロードしても文字化けした文字列が表示されるばかりでした。
そこで、以下のページを参考に『CGIモードでの動作』を試みました。
https://kumahiyo.com/flask-coreserver/
すると、login.html(ログインページ)、error.html(ログイン失敗ページ)は意図した通りに表示されました。
ところが、肝心のhome.html(ログイン成功後のページ)がNotFoundとなってしまいます。
index.pyを経由させた場合、ルーティングの設定を変えねばならないのかとも考えましたが、ログインページや失敗ページがしっかり表示されている以上、ログイン成功ページもローカルサーバーでの構成と同じでなければならないと思います。

XREAサーバー上のディレクトリ構造は以下の通りです。
public_html
┗seiseki_system
__┗main.py
__┗index.py
__┗main.py
__┗.htaccess
__┗templates
____┗home.html
____┗login.html
____┗error.html

Flaskでルーティングを記述したmain.pyは以下の通りです。

Python3

1#!/usr/local/bin/python3 2# -*- coding: utf-8 -*- 3 4import sqlite3 5from flask import Flask, render_template, request,Response, abort, redirect, session 6from flask_login import LoginManager, login_user, logout_user, login_required, UserMixin 7from collections import defaultdict 8 9# Flask使用準備 10app = Flask(__name__) 11login_manager = LoginManager() 12login_manager.init_app(app) 13app.config['SECRET_KEY'] = "secret" 14 15# 辞書User定義 16class User(UserMixin): 17 def __init__(self, id, name, password): 18 self.id = id 19 self.name = name 20 self.password = password 21 22# seiseki.dbから名簿データ取得+ログイン用ユーザー辞書作成 23users={} 24db = 'seiseki.db' 25conn = sqlite3.connect(db) 26c = conn.cursor() 27c.execute('SELECT * FROM meibo') 28for i, row in enumerate(c): 29 users[i+1] = User(i+1,str(row[0]),str(row[2])) 30conn.commit() 31conn.close() 32 33# ユーザーチェックに使用する辞書作成 34nested_dict = lambda: defaultdict(nested_dict) 35user_check = nested_dict() 36for i in users.values(): 37 user_check[i.name]["password"] = i.password 38 user_check[i.name]["id"] = i.id 39 40@login_manager.user_loader 41def load_user(user_id): 42 return users.get(int(user_id)) 43 44####################################################### 45 46@app.route('/', methods=["GET", "POST"]) 47def login(): 48 if(request.method == "POST"): 49 # ユーザーチェック 50 if(request.form["username"] in user_check and request.form["password"] == user_check[request.form["username"]]["password"]): 51 # ユーザーが存在した場合はログイン 52 login_user(users.get(user_check[request.form["username"]]["id"])) 53 session["player_ID"] = request.form["username"] 54      【・・・データ処理省略・・・】 55 return redirect("/home/") 56 else: 57 return render_template("error.html") 58 else: 59 return render_template("login.html") 60 61@app.route('/home/') 62@login_required 63def home(): 64 return render_template("home.html") 65 66@app.route('/logout/') 67@login_required 68def logout(): 69 logout_user() 70 return Response(''' 71 ログアウトしました。<br /> 72 <a href="/">login</a> 73 ''') 74 75if __name__ == '__main__': 76 app.run(debug=True)

CGI化のコードが書かれたindex.pyは以下の通りです。

Python3

1#!/usr/local/bin/python3 2# coding: utf-8 3 4import cgitb 5cgitb.enable() 6 7from wsgiref.handlers import CGIHandler 8from main import app 9CGIHandler().run(app)

.htaccessは以下の通りです。

AddHandler cgi-script .py RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.py/$1 [QSA,L]

上記コードのどの部分に不備があるか、ご指導頂きたく存じます。
以上、何卒宜しくお願い申し上げます。

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

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

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

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

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

guest

回答1

0

自己解決

public_html⇒seiseki_systemフォルダーにmain.pyを展開していましたが、これをpublic_html直下で実行させてみた所、うまくいきました。

投稿2021/09/05 23:23

jyansinkai

総合スコア66

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問