Heroku, Flask, Python, Nyanko 게시판을 "csv 파일"로 만듭니다.

(1) CSV를 사용하여 게시판 작성



<디렉토리 구성>


test
├app.py
├articles.csv
├Procfile
├requirements.txt
└templates
  ├index.html
  ├layout.html
  └index_result.html

① 콘텐츠 작성



가상 환경을 디렉토리 test 바로 아래에 설정, 시작.
python3 -m venv .
source bin/activate

필요한 프레임워크와 웹 서버를 설치합니다.
pip install flask
pip install gunicorn

articles.csv에, 게시판의 데이터를 처음에 넣어 둔다.

articles.csv
たま,眠いにゃー
しろ,腹減ったにゃー
クロ,なんだか暖かいにゃー
たま,ぽえーぽえーぽえー
ぽんたん,トイレットペーパーがない
なおちん,チーン

app.py를 만듭니다.

app.py
# -*- coding: utf-8 -*-
from flask import Flask,request,render_template
app = Flask(__name__)

@app.route('/')
def bbs():
    lines = []
    #with openしてcsvファイルを読み込む
    with open('articles.csv',encoding='utf-8') as f:
        lines = f.readlines() #readlinesはリスト形式でcsvの内容を返す
    #index.htmlに返す
    return render_template('index.html',lines=lines)

#postメソッドを受け取る
@app.route('/result',methods=['POST'])
def result():
    #requestでarticleとnameの値を取得する
    article = request.form['article']
    name = request.form['name']
    #csvファイルに上書きモードで書き込む
    with open('articles.csv','a',encoding='utf-8') as f:
        f.write(name + ',' + article + '\n')
    #index_result.htmlに返す
    return render_template('index_result.html',article=article,name=name)


if __name__ == '__main__':
    app.run(debug=False)

index.html을 만듭니다.

index.html
{% extends 'layout.html' %}
{% block content %}
    <h1> にゃん子掲示板</h1>
    <form action='/result' method='post'>
        <label for='name'>にゃん子の名前</label>
        <input type='text' name='name'>
        <p></p>
        <label for='article'>投稿</label>
        <input type='text' name='article'>

        <button type='subimit'>書き込む</button>
    </form>

    <p></p>
    <p></p>

    <table border=1>
        <tr><th>にゃん子の名前</th><th>投稿内容</th></tr>
        {% for line in lines: %}
        <!--columnという変数をセット(変数セットにはsetが必要)  -->
        <!--splitを利用して,で分類する。splitはリストを返す  -->
            {% set column = line.rstrip().split(',') %}
            <tr><td>{{column[0]}}</td><td>{{column[1]}}</td></tr>
        {% endfor %}
    </table>

{% endblock %}

HTML 템플릿을 만듭니다.

layout.html
<!DOCTYPE html>
<html lang='ja'>
  <head>
      <meta charset='utf-8'>
      <title>Nyanko BBS</title>
      <style>body{padding:10px;}</style>
  </head>
  <body>
    {% block content %}
    {% endblock %}
  </body>
</html>

index.html에서 입력한 양식의 내용을 index_result.html로 표시합니다.

layout.html
{% extends 'layout.html' %}
{% block content %}
    <h1> にゃ-んと掲示板に書き込みました</h1>
    <p>{{name}}{{article}}</p>

    <!--formで/に戻る -->
    <form action='/' method='get'>
      <button type='submit'>戻る</button>
    </form>

{% endblock %}

②Heroku에 배포



Heroku에의 배치 상세는 이하의 기사에 쓴 대로이므로, 상세 설명을 생략한다.
Heroku, Flask, Python, Git으로 업로드하는 방법 (그 ②)
Procfile, requirements.txt를 작성, git로 조작하여 무사히 배포할 수 있었다.


"이와시", "물고기를 좋아한다"고 투고하면,

쓰기 성공!
돌아오면

제대로 게시판에 쓰여져 있습니다.

다음 번에는 sql을 사용하여 게시판을 만들고 싶습니다.



Heroku에서 CSV 쓰기는 잠시 후 (30 분) 데이터가 사라져 버리므로 sql 등의 데이터베이스를 사용하여 게시판을 만들고 싶다.

좋은 웹페이지 즐겨찾기