[Python 03] Flask


Flashの起動


Flashは、Webページを動的に印刷する工場です.
pip install flask
上記コマンドでフラスコを設定します.
次に、Flaskクイックスタートマニュアルを参照して、Pythonファイルで次のコマンドを作成して実行します.
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

app.run()
サーバーが上昇していることを確認できます.

127.0.0.1:5000にログインすると、Webページが表示されます.

GlitchサービスからFlashを起動


Glitchサービスを利用してサーバーをレンタルすることもできます.

ログイン後、右上に黄色で表示されている検索ウィンドウでflaskを検索します.

フラスコ作成のサンプルプログラムをアップロードできます.選択してスキップし、
フラスコ選択時

こうしてテンプレート番組が登場した.右下のRemix yourボタンはforkできます.これにより、デフォルトのフラスコが設定されているサーバでエンコードし、結果画面をリアルタイムで表示できます.
独自のボタンを再結合します.

左側のファイルリストから
start.shスクリプトファイルサーバを使用します.py、サーバを実行します.pyは、対応するプログラムコードを記述するPythonファイルです.でもstartshの内容を見るとpython serverが表示されます.pyコマンドで実行します.この場合、Python 2バージョンで動作するため、Python 3を使用する場合はpython 3 serverを使用できます.pyに変更すればいいです.
Pythonバージョンチェックは、次のターミナルウィンドウを開き、python-versionを使用してチェックできます.
変更されたstart.sh

サーバーもあります.pyを任意に変更して結果画面を表示できます.結果画面は、次のPreviewボタンを使用してウィンドウを開くことができます.

Open previewペインは右側に分割ペインとして表示され、Preview in a new windowは新しいウィンドウに表示される違いがあります.

Flashの使用方法


アドレスの後に/read/create/update/deleteを追加し、対応する関数にルーティングします.
「/」は、デフォルトのアドレスを入力し、入力時に表示するページです.
「/page name/」は、アドレスの後ろに/page name/を入力し、入力時に表示するページに記入して戻ります.
@app.route("/")
def index():
  return "<strong>Home</strong>"

@app.route("/create/")
def create():
  return "Create"

@app.route("/update/")
def update():
  return "Update"
returnにアクセスするコードを動的に構成できるようになりました.
ただし、HTMLコードは1行に書くのは難しいので、Pythonで改行をサポートする3つの一重引用符を使ってHTMLを書くように書くことができます.ただし、python変数を記述する場合は、以下のようにf式を使用することもできます.
return f'''
<코드>
<코드>
<코드 계속>
<코드 >
'''
これにより、重複するコードを変数に含めたり、関数で実現したりすると、コードの再利用性が向上します.
では、これまで学んだPythonのList、Dictionaryを使って、条件文と重複文を利用して、コードを再利用するページを実現してみましょう.
from flask import Flask

app = Flask(__name__)

# topics List에 id, title, body를 key로 하는 Dictionary를 저장한다.
topics = [{'id':1, 'title':'HTML', 'body':'HTML is...'},
        {'id':2, 'title':'CSS', 'body':'CSS is...'},
        {'id':3, 'title':'JavaScript', 'body':'JavaScript is...'}]

# 출력 템플릿 함수를 저장해놓고 재사용한다.
def template(content):
  liTags = ''
  # List의 각 토픽의 제목을 <li>로 웹에 출력하기 위해 liTags 변수에 문자열로 저장한다.
  for topic in topics:
    liTags += f'<li><a href="/read/{topic["id"]}/">{topic["title"]}</a></li>'
  # liTags 변수를 포함하여 html을 작성하여 반환한다.
  return f'''
    <html>
    <head>

    </head>
    <body>
        <h1><a href="/">WEB</a></h1>
        <ol>
        {liTags}
        </ol>
        {content}
    </body>
    </html>
    '''

# 첫 페이지에서 호출할 함수
@app.route("/")
def index():
  # template 함수의 매개변수로는 웹 페이지 내용을 반환해준다. 첫 화면은 웰컴.
  return template("<h2>Welcome</h2>Hello Web!")

# 각 항목을 클릭하면 연결될 페이지를 작성한다. 
# route의 매개변수에도 변수를 담을 수 있다. 
# 이름은 임의로 설정해주면 되는데 type은 기본적으로 문자열로 들어오게 되므로, 
# 숫자인 경우에는 <int:>로 정수 캐스팅이 필요하다.
@app.route("/read/<int:num>/")
def read(num):
  for topic in topics:
    if(topic["id"] == num):
      content = f'<h2>{topic["title"]}</h2>{topic["body"]}'
  # template 함수의 매개변수로 위에서 작성한 웹 페이지 내용을 반환해준다. 
  return template(content)

app.run()

ホームページが上手です.

Challenge


動的組織のWebページからフォーム・ラベルへの入力値の移動

@app.route("/create/")
def create():
  content = '''
  <h2>Create</h2>let\'s create something!<br>
  <form action="/create/">
    <p><input type="text" name="title" placeholder="title"></p>
    <p><textarea name="body" placeholder="body"></textarea></p>
    <p><input type="submit" value="create"></p>
  </form>
  '''
  return template(content)
create pageを呼び出すリンクを作成し、上記の内容を記述します.
formタグで値を受信するのは次のレッスンです.

入力ウィンドウはよく整理されており、この値を入力してスキップします.

入力した値がよく超えていることがわかります.

? Question


Pythonは改行やインデントを文法として使うので、条件文や重複文が重なると混同しやすく、不便です.

! Answer

for topic in topics:
	liTags 처리 구문
    return liTags
このコード
for topic in topics:
	liTags 처리 구문
return liTags
このコードは違います.
戻りコードのインデント位置によってはfor文で認識される場合がありますので、注意して使用してください.

Comment


Flaskという新しいことを学び、Glitchというかわいいサービスも使えるようになり、いろいろな面で楽しい時間でした.データベースと一緒にまともなサイトを作りたいです.