前提・実現したいこと
現在Webアプリケーションを開発しており、「Raspberry pi(以下、ラズパイ)」で「Flask」を利用して開発しています。
ここで、ラズパイ本体に保存されている「app.py」ファイルから外部ストレージとして接続されているUSB内の「message.py」というファイルを実行したいと考えています。
※追記
本問題は、「コード」による問題が原因だと考えています。なので、「外部ストレージ」関連の問題は考慮外であることをお伝えします。しかし、可能性は0では無いので、あくまで問題の本筋を外部ストレージ関連の問題で固定してしまわないようにお願いします。
※ファイルの説明
①「app.py」...ラズパイ本体に保存されている実行ファイル。Web上に用意しているテキストボックスに文字が入力され送信ボタンが押されると、「judg.py」ファイルへ値を送信する。
②「judg.py」...送られてきた値を元に、実行すべきファイルを外部ストレージから探して実行する。(今回は1つだけ)
③「message.py」...外部ストレージ内に入っているアプリケーション。掲示板アプリのようなもの。
発生している問題・エラーメッセージ
期待する動作は、「message」とテキストボックスに打ち込むと「message.py」が起動し、呼び出しているログインページに移動する事です。(出来れば別タブで開きたい...)
現状としては「message」と打ち込み送信すると、エラーなどは起こらないものの、ログインページにジャンプせずに元のページのメッセージ欄に「message is Active」と表示されるだけで終わってしまいます。
該当のソースコード
「app.py」
Python
1from flask import Flask, render_template, request 2import judg 3 4app = Flask(__name__) 5@app.route('/') 6def index(): 7 return render_template('index.html', message="what shall I do?") 8 9@app.route('/', methods=['POST']) 10def form(): 11 field = request.form['field'] 12 if request.method == 'POST': 13 res = judg.judg(field) 14 return render_template('index.html', message=res['msg'], answer=res['ans']) 15 16if __name__=='__main__': 17 app.run(debug=True, host='localhost')
「judg.py」
Python
1from flask import Flask, render_template, request, redirect 2import os, sys 3//外部ストレージとのパスを通す 4sys.path.append(os.path.join(os.path.dirname(__file__), '/media/pi/NAS')) 5import message 6 7app = Flask(__name__) 8@app.route('/') 9def judg(field): 10 if "message" in field: 11 res = {'msg':"What shall I do?", 'ans':"message is Active!"} 12 message.login() 13 return res 14 else: 15 res = {'msg':"What shall I do?", 'ans':"Sorry.."} 16 return res
「message.py」
Python
1from flask import Flask, render_template, request, session, redirect 2 3 4app = Flask(__name__) 5app.secret_key = b'abc' 6 7member_data = {} 8message_data = [] 9 10@app.route('/', methods=['GET']) 11def index(): 12 global message_data 13 if 'login' in session and session['login']: 14 msg = 'Login id:' + session['id'] 15 return render_template('messages.html', 16 title='Messages', 17 message=msg, 18 data=message_data ) 19 else: 20 return redirect('/login') 21 22@app.route('/', methods=['POST']) 23def form(): 24 msg = request.form.get('comment') 25 message_data.append((session['id'], msg)) 26 if len(message_data) > 25: 27 message_data.pop(0) 28 return redirect('/') 29 30#login page access 31@app.route('/login', methods=['GET']) 32def login(): 33 return render_template('login.html', 34 title='Login', 35 err=False, 36 message='IDとパスワ−ドを入力:', 37 id='' ) 38 39#login 40@app.route('/login', methods=['POST']) 41def login_post(): 42 global member_data 43 id = request.form.get('id') 44 pswd = request.form.get('pass') 45 if id in member_data: 46 if pswd == member_data[id]: 47 session['login'] = True 48 else: 49 session['login'] = False 50 else: 51 member_data[id] = pswd 52 session['login'] = True 53 session['id'] = id 54 if session['login']: 55 return redirect('/') 56 else: 57 return render_template('login.html', 58 title='Login', 59 err=False, 60 message='パスワードが違います。', 61 id=id ) 62 63#logout 64@app.route('/logout', methods=['GET']) 65def logout(): 66 session.pop('id', None) 67 session.pop('login') 68 return redirect('/login') 69 70if __name__== '__main__': 71 app.run(debug=True, host='localhost', port=5000)
「layout.html」
HTML
1<!doctype html> 2<html lang="ja"> 3<head> 4 <title>{% block titile %}{% endblock %}</title> 5 <meta charset="utf-8"/> 6 <link rel="stylesheet" 7 href="{{url_for('static', filename='style.css')}}"> 8</head> 9<body> 10 <h1>{% block headline %}{% endblock %}</h1> 11 12 {% block content %}{% endblock %} 13 14 <div class="footer"> 15 {% block footer %}{% endblock %} 16 </div> 17</body> 18</html>
「index.html」
HTML
1{% extends "layout.html" %} 2 3{% block title %} 4index 5{% endblock %} 6 7{% block headline %} 8Web Server 9{% endblock %} 10 11{% block content %} 12<p>{{ message }}</p> 13<div> 14 <form method="post" action="/" > 15 <input type="text" name="field"> 16 <input type="submit" name="send" value="送信"> 17 </form> 18</div> 19<p>Answer = {{ answer }}</p> 20{% endblock %} 21 22{% block footer %} 23RURSystem. 24{% endblock %}
「login.html」
HTML
1{% extends "layout.html" %} 2 3{% block title %} 4Login 5{% endblock %} 6 7{% block headline %} 8{{ title }} 9{% endblock %} 10 11{% block content %} 12<p>{{ message }}</p> 13<form method="post" aciton="/login"> 14<table> 15 <tr> 16 <th>id</th> 17 <td> 18 <input type="text" name="id" value="{{id}}"> 19 </td> 20 </tr> 21 <tr> 22 <th>password</th> 23 <td> 24 <input type="password" name="pass"> 25 </td> 26 </tr> 27 <th></th><td> 28 <input type="submit" value="Login"> 29 </td> 30 </div> 31</form> 32</table> 33{% endblock %} 34 35{% block footer %} 36RURSystem_Message board. 37{% endblock %}
「messages.html」
HTML
1{% extends "layout.html" %} 2 3{% block title %} 4Message 5{% endblock %} 6 7{% block headline %} 8{{ title }} 9{% endblock %} 10 11{% block content %} 12<div class="logout"><a href="logout">Logout</a></div> 13<p>{{ message }}</p> 14<form method="post" action="/"> 15 <table> 16 <tr> 17 <th>Message</th> 18 <td> 19 <input type="text" name="comment" width="80"> 20 </td> 21 <td> 22 <input type="submit" value="POST NOW"> 23 </td> 24 </tr> 25 </table> 26</form> 27<hr> 28<ul> 29{% for item in data | reverse %} 30 <li>{{item[1]}} ({{item[0]}})</li> 31{% endfor %} 32</ul> 33{% endblock %} 34 35{% block footer %} 36tasojiro. 37{% endblock %}
「style.css」
CSS
1body{ 2 margin: 10px; 3 background-color: aliceblue; 4 } 5h1{ 6 color: lightsteelblue; 7 font-size: 36pt; 8 margin:0px; 9 } 10p{ 11 font-size: 14pt; 12 } 13pre{ 14 background-color: white; 15 font-size: 12pt; 16 padding: 10px; 17 } 18div.footer{ 19 text-align: right; 20 border-bottom: 1px solid lightskyblue; 21 color: lightskyblue; 22 margin: 50px 0px; 23 } 24div.logout{ 25 position: absolute; 26 right: 10px; 27 top: 10px; 28 font-weight: bold; 29 font-size: 12pt; 30 } 31
###ディレクトリ構成
「WebServer」
→(app.py)
→(judg.py)
→(「templates」 →login.html, layout.html, index.html)
→(「static」 →style.css)
「Skills」(外部ストレージ(USB内))
→(message.py)
→(「templates」 →layout.html, message.html)
→(「static」 →style.css)
最後に
Webアプリケーションは、まだ初心者なので間違っている事があれば指摘していただけると幸いです。
何か情報が不足している場合は、言っていただけると追加します。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー