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

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

ただいまの
回答率

87.50%

PythonAnywhereでのflask webアプリのリリース

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 158

score 2

PythonAnywhereでwebアプリをリリースしようとしています。webアプリはローカルでの動作確認を行っています。
FlaskとMySQLを使って作った簡易なwebアプリです。PythonAnywhereにMySQLの環境が用意されているため、ローカルでテストした時と同じようにSQLのテーブルをPythonAnywhereに作成してアプリを実行しようとしています。
PythonAnywhereの「 Add a new web app 」から設定を行い、mysiteのフォルダの中にflask_app.pyを作成して、このflask_app.pyを開きコードを削除して、自分が作ったflaskコードを貼り付けました。
その後、ローカルと同様にtemplatesフォルダとstaticフォルダを作成して、そのフォルダの中にファイルをアップロードしました。
その後、webアプリをリロードして実行しましたが、エラーとなりました。
エラー内容も記載しておきます。

個人的には、ライブラリを読み取れていないためエラーとなっているのではないかと思っています。
bashを開いて「pip install --user ライブラリ名」を入力して必要なライブラリをダウンロードしたつもりなのですが、コードを実行する際に必要なライブラリを読み込みにいくための設定、もしくはライブラリをダウンロードしている場所に問題があるのではと思っています。

下記コードとエラーを載せておきますので、アドバイスお願いします。

ファイル構成
flask_app.py(mysiteフォルダの中)
├─templates
│      bbs.html
│      bbs_result.html
│      bbs_result_delete.html
│      layout.html
│      option.html
|-static
|-js
test.js

flask_app.py

from flask import Flask, request, render_template
import codecs
import pymysql


app = Flask(__name__)

def getConnection():
        return pymysql.connect(host='*********.mysql.pythonanywhere-services.com',user='********',passwd='**********',db='naokiscottie$flask',charset='utf8',cursorclass=pymysql.cursors.DictCursor)


@app.route("/")
def bbs():
        connection=getConnection()

        cursor=connection.cursor()

        select="id,name,content"
        sql="SELECT {0} FROM flask_test".format(select)
        cursor.execute(sql)

        rows=cursor.fetchall()


        connection.commit()
        connection.close()
        message="登録情報を入力していください。"

        return render_template("bbs.html", message = message, rows=rows)


@app.route("/result", methods=["POST"])
def result():
    message = "下記のように入力されています"
    article = request.form["article"]
    name = request.form["name"]
    id = request.form["id"]


    connection=getConnection()

    cursor=connection.cursor()

    a=id
    b=name
    c=article



    insert_content="""
    insert flask_test values(%s,%s,%s)
    ;
    """
    cursor.execute(insert_content,(a,b,c))

    #select="id,name,content"
    #sql="SELECT {0} FROM web_test".format(select)
    #cursor.execute(sql)


    connection.commit()
    connection.close()

    return render_template("bbs_result.html", message = message, article = article, name = name ,id=id)


@app.route("/result_delete", methods=["POST"])
def result2():
    message = "id="
    delete_id = request.form["delete"]


    connection=getConnection()

    cursor=connection.cursor()

    a=delete_id



    insert_content="""
    delete from flask where id=(%s)
    ;
    """
    cursor.execute(insert_content,(a))

    #select="id,name,content"
    #sql="SELECT {0} FROM web_test".format(select)
    #cursor.execute(sql)


    connection.commit()
    connection.close()

    return render_template("bbs_result_delete.html", message = message, delete_id=delete_id)

@app.route("/option")
def result3():

    return render_template("option.html")

bbs.html

{% extends "layout.html" %}
{% block content %}
    <h1>データベース入力システム</h1>
    <p>{{ message }}</p>

    <form action="/result" method="post">
        <label for="id">ID</label>
        <input type="text" name="id">
        <p></p>
        <label for="name">名前</label>
        <input type="text" name="name">
        <p></p>
        <label for="article">投稿</label>
        <input type="text" name="article">

        <button type="submit">送信する</button>
    </form>
<P>IDを消去したい場合,こちらにご入力ください。</P>
    <form action="/result_delete" method="post">
        <label for="delete">IDの消去</label>
        <input type="text" name="delete">

        <button type="submit">送信する</button>
    </form>


    <h2>投稿一覧</h2>

    <table>
    <tr><th>投稿</th><th>名前</th></tr>
    </table>
        {% for row in rows: %}

            <p>{{ row }}</p>

        {% endfor %}

<p><a href="/option">option</a></p>

{% endblock %}


bbs_result.html

{% extends "layout.html" %}
{% block content %}
    <h1>書き込みました</h1>
    <p>{{ message }}</p>
    <P>ID</P>
    <p>{{ id }}</p>
    <P>NAME</P>
    <P>{{ name }}</P>
    <P>投稿</P>
    <P>{{ article }}</P>

    <form action="/" method="get">
        <button type="submit">戻る</button>
    </form>
{% endblock %}


bbs_result_delete.html

{% extends "layout.html" %}
{% block content %}
    <h1>下記のIDを消去しました。</h1>
    <p>{{ message }}</p>
    <p>{{ delete_id }}</p>

    <form action="/" method="get">
        <button type="submit">戻る</button>
    </form>
{% endblock %}

layout.html

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>Flask_test</title>
        <style>body {padding: 10px;}</style>
    </head>
    <body>
        {{ 共通テンプレート }}

        {% block content %}
        {% endblock %}


    </body>
</html>

option.html

{% extends "layout.html" %}
{% block content %}
    <h1>テストページです。</h1>

    <button type="button" onclick="ShowAlart()">javascript test</button>
    <p></p>
    <script src="/static/js/test.js"></script>


    <form action="/" method="get">
        <button type="submit">戻る</button>
    </form>
{% endblock %}

test.js

function ShowAlart() {
    alert("成功");
    }

エラー内容

2021-05-28 07:06:00,299: Error running WSGI application
2021-05-28 07:06:00,301: ModuleNotFoundError: No module named 'flask_app'
2021-05-28 07:06:00,301:   File "/var/www/naokiscottie_pythonanywhere_com_wsgi.py", line 16, in <module>
2021-05-28 07:06:00,301:     from flask_app import app as application  # noqa
2021-05-28 07:06:00,302: ***************************************************
2021-05-28 07:06:00,302: If you're seeing an import error and don't know why,
2021-05-28 07:06:00,302: we have a dedicated help page to help you debug: 
2021-05-28 07:06:00,302: https://help.pythonanywhere.com/pages/DebuggingImportError/
2021-05-28 07:06:00,302: ***************************************************
2021-05-28 07:06:10,449: Error running WSGI application
2021-05-28 07:06:10,450: ModuleNotFoundError: No module named 'flask_app'
2021-05-28 07:06:10,450:   File "/var/www/naokiscottie_pythonanywhere_com_wsgi.py", line 16, in <module>
2021-05-28 07:06:10,450:     from flask_app import app as application  # noqa
2021-05-28 07:06:10,450: ***************************************************






2021-05-31 23:10:22,141: ***************************************************
2021-05-31 23:10:23,270: Error running WSGI application
2021-05-31 23:10:23,271: ModuleNotFoundError: No module named 'pymysql'
2021-05-31 23:10:23,271:   File "/var/www/naokiscottie_pythonanywhere_com_wsgi.py", line 16, in <module>
2021-05-31 23:10:23,272:     from flask_app import app as application  # noqa
2021-05-31 23:10:23,272: 
2021-05-31 23:10:23,272:   File "/home/naokiscottie/mysite/flask_app.py", line 3, in <module>
2021-05-31 23:10:23,272:     import pymysql
2021-05-31 23:10:23,272: ***************************************************
2021-05-31 23:10:23,273: If you're seeing an import error and don't know why,
2021-05-31 23:10:23,273: we have a dedicated help page to help you debug: 
2021-05-31 23:10:23,273: https://help.pythonanywhere.com/pages/DebuggingImportError/
2021-05-31 23:10:23,273: ***************************************************
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

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

  • ただいまの回答率 87.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る