データベースを更新してもそれが反映されません
ロリポップのレンタルサーバーを借りてflaskでwebアプリを作ろうと思っています。ログイン後、トップページに"〇〇さんこんにちは"と表示し、登録名を変えるinput boxも置いておき、それに新しい名前を入力するとuserlist.jsonの中の登録名を書き換え、再度トップページにアクセスすることで"△△さんこんにちは"のように表示される名前を変えたいのですが、何故か変わりません。
キャッシュが関係しているのかと考え、キャッシュを消してリロードしても表示内容は変わりません。
自分のパソコンでターミナルでapp.pyを実行するとうまくいくのですが、、、
また、一旦ログアウトしてから再度ログインするときちんと表示内容は変わっています。
初心者でつまらない質問かもしれませんが、ご教授いただけると幸いです。
階層
hogehoge.com
├templates
|| login.html
|└ top.html
├data
|└ userlist.json
|app.py
|login.py
|data_use.py
|index.cgi
└.htaccess
app.py
from flask import Flask, render_template, redirect, request
import os, datetime
import data_use
import login
app = Flask(__name__)
app.secret_key = 'abcdefg'
#最初の画面
@app.route('/')
def index():
return render_template('login.html')
#ログイン直後
@app.route('/try_login', methods=['POST'])
def try_login():
mail = request.form.get('mail','')
if login.try_login(mail):
return redirect('/index.cgi/top')
return redirect('/')
#ログイン後のトップページ
@app.route('/top')
def top():
#ログインしてるかどうか
if not login.is_login():
return redirect('/')
mail = request.form.get('mail','')
userlist=data_use.load_data()
#名前を得る
username=userlist[mail]
return render_template('top.html', username=username)
#名前変更直後
@app.route('/top/change_name', methods=['POST'])
def change_name():
#ログインしてるかどうか
if not login.is_login():
return redirect('/')
newname=request.form.get('newname','')
mail=login.get_mail()
data_use.change_data(mail, newname)
return redirect('/index.cgi/top')
if __name__ == '__main__':
app.run()
login.py
from flask import session
import data_use
# ログインしているか調べる
def is_login():
return 'mail' in session
# ログイン処理
def try_login(mail):
userlist=data_use.load_data()
# 該当ユーザーか?
if mail in userlist:
session['mail'] = mail
return True
return False
# メールを渡す
def get_mail():
if is_login(): return session['mail']
return 'not login'
# ログアウト処理
def try_logout():
session.pop('mail', None)
return True
data_use.py
import os, json
# 保存先のファイルを指定
BASE_DIR = os.path.dirname(__file__)
SAVE_FILE = BASE_DIR + '/data/userlist.json'
# ユーザーリスト(JSON形式)を読み出す
def load_data():
with open(SAVE_FILE, 'rt', encoding='utf-8') as f:
return json.load(f)
# ユーザーリストへ書き出す
def save_data(data_list):
with open(SAVE_FILE, 'wt', encoding='utf-8') as f:
json.dump(data_list, f, ensure_ascii=False, indent=2)
# 名前を変える
def change_data(mail, newname):
data_list = load_data()
data_list[mail]=newname
save_data(data_list)
top.html
<!DOCTYPE html>
<html lang="ja"><head><meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>トップページ</title>
</head><body><div>
<h1>{{ username }}さん、こんにちは<h1>
<form action="/index.cgi/top/change_name" method="POST">
<legend>名前を変更するなら、入力してください</legend>
<fieldset>
<label for="newname">新しい名前</label>
<input type="text" name="newname" id="newname">
<button type="submit">
変更</button>
</fieldset>
</form>
</div></body></html>
login.html
<!DOCTYPE html>
<html lang="ja"><head><meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>ログインページ</title>
</head><body><div>
<h1>ログインページ<h1>
<form action="/index.cgi/try_login" method="POST">
<legend>メールアドレスを入力してください</legend>
<fieldset>
<label for="mail">メールアドレス</label>
<input type="text" name="mail" id="mail">
<button type="submit">
ログイン</button>
</fieldset>
</form>
</div></body></html>
userlist.json
{
"a@gmail.com": "山田",
"b@gmail.com": "佐藤"
}
index.cgi
#!/usr/local/bin/python3
from wsgiref.handlers import CGIHandler
from app import app
CGIHandler().run(app)
.htaccess
<ifmodule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\index.cgi -f
RewriteRule ^(.*)$ $1index.cgi [L]
</ifmodule>
0