Help us understand the problem. What is going on with this article?

Flaskでwebサービスを作成しクラウド上にアップ

難しいことはいいっていう方は下記のアドレスに言って見てください。

書き込みもできると思います。

http://onelinechatflaskgina.mybluemix.net/

Flaskでwebサービスを作成しクラウド上にアップ

Webサービスを作ろうと思い作成しました。また、IBMクラウド上にアップしました。

作るもの

私のような業務系の人間にとってだいたい作らなくてはいけないプログラムの多くは掲示板の延長だとは思います。テトリスではないと思います。いわゆる掲示板の延長みたいなものですが
掲示板だとどうも興味が引かれないので一行チャットを作ることにしました。

目的

端から端まで動く一発目のきちんとしたものを作っておきたかっため。

画像

スクリーンショット 2020-02-22 10.52.48.png
【言語・FW選定】
・HTML ← 極力シンプルにしたかったため。HTMLのみでCSSの使用はしませんでした。
・Python ← 扱える言語がJavaかPythonなので・・・Pythonに将来性を感じているため。
・Flask ← 楽をするために使うフレームワークというコンセプトにあっていたため。
CGIも試して見ましたがあまりうまくいかず、ネットの記事もあまりないということでやめました。
【アーキテクチャ】
基本的に シンプルを心がけた データベースの使用もなし、jsonに書き込みとクリアを行います。クリアも
運用者側が行うとしました。
【使用方法】
動かしてみる、作りをみる、CSSで加工する練習など学習目的

【2次開発】
Chabotと組み合わせてなんとかぐらい考えています。あまり詳しく書くとやらなくなるので・・・

【開発環境】
・mi
・Atom
【インフラ等】
・IBM Cloud 
IBMの会長がクラウドを仕切っていた人になったためこれから相当力を入れると見込まれ
これからいいのではないかと思われる。また、IBMクラウドは無料でできるので率直に言って
助かります。
https://www.sankeibiz.jp/macro/news/200131/mcb2001310901015-n1.htm
← ファイルの設定の仕方はGITHUB上のアドレスを参考にしてください。

#フォルダ モジュール構成
flask_app -- templates              index.html
             app.py
             onelineChat.json


 ソースコード
import json
import os

from flask import Flask, redirect, render_template, request

application = Flask(__name__)

DATA_FILE = "onelineChat.json"


def save_data(name, memo):
    """記録データを保存します
     :param name: お名前
     :type name: str

    :param memo: メモ
    :type memo: str
    :return: None
    """
    try:

        database = json.load(open(DATA_FILE, mode="r", encoding="utf-8"))
    except FileNotFoundError:
        database = []

    database.insert(0, {
        "name": name,
        "memo": memo
    })

    json.dump(database, open(DATA_FILE, mode="w", encoding="utf-8"), indent=4, ensure_ascii=False)


def load_data():
    """記録データを返します"""
    try:
        database = json.load(open(DATA_FILE, mode="r", encoding="utf-8"))
    except FileNotFoundError:
        database = []
    return database

@application.route('/', methods=['POST'])
def save():
    if request.method == 'POST':

        name = request.form.get('name')
        memo = request.form.get('memo')

        save_data(name , memo)

        return redirect('/')


@application.route('/')
def index():
    """トッフぺージテンプレートを使用してぺージを表示します"""

    rides = load_data()
    return render_template('index.html', rides=rides)

port = os.getenv('VCAP_APP_PORT', '5050')



if __name__ == '__main__':
    application.run(host='0.0.0.0', port=int(port), debug=True)

onelineChat.json
[
    {
        "name": "gina",
        "memo": "こんにちは"
    },
    {
        "name": "Code PaaS Bliss",
        "memo": "こんにちは"
    }
]

index.html
<!DOCTYPE html>
<html lang="ja">
<meta charset="utf-8">
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>簡易掲示板</title>
</head>
<body>
<p>{{ message }}</p>
<form action="" method="post">
         <label for="name">お名前  </label><input id="name" type="text" name="name"><br>
         <label for="memo">メッセージ</label><input id="memo" type="text" name="memo">
       <br>
        <input type=submit value=投稿する>
</form>

<h3>OneLineチャット</h3>
    <table class="list">
        {% for ride in rides %}
    </table>
   <tr>

           <td>{{ride.name}} :</td>
           <td>{{ride.memo}}</td>
    </tr>
    <hr>
    {% endfor %}
</body>
</html>


GITHUB

https://github.com/noikedan/flask_app

IBMクラウド上に乗せたもの

http://onelinechatflaskgina.mybluemix.net/

IBMクラウドにFLASKを載せるために参考にした記事

https://qiita.com/makaishi2/items/21cbdb99444fb50e01e1
https://qiita.com/ishida330/items/6e4e363923344fe31b83

FLASK入門

http://python.zombie-hunting-club.com/entry/2017/11/03/223503
← 私はすごいポート番号ではまってしまいましたので、もしうまくいかないようでしたら
他の記事で最初の一発目を出してみるとか工夫して見たらどうでしょうか?

感想

IBM上に載せる時が一番困りました。
・pythonのバージョンがディフォルトだと2だったため、文字コードが指定されていないとかなりIBMクラウドに叱られました。いくら指定してもうまくいかず、(runtime.txt)に3のバージョンを指定したことで回避を行いました。
・IBMに載せる場合のPORT番号を指定するお作法でハマりました。GITHUBのソースをご参考にしてください。(app.py)
Docker上で確認したらどうなのかということも考えていますが今回はあまり関係なかったのではないかと思います。IBMクラウド上で何が動いているかがわからないと、Dockerでやる意味はないかもしれません。自分のマッキントッシュでやってDocker上のリナックスで確認するということは意味があることかもしれないです。
 先行きはFLASKも扱えるし、Java Springも扱えるIBMクラウドから他クラウドサービスに当面は移行したいと思っています。

gina
Javaエンジニア 得意技 ユーザー目線で管理、Spring 3億のプロジェクトのリリース判断を実質やった経験あり。 最近はサービス選定など上流からの傾向
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした