http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-now-with-python-3-support 是一份介紹 Flask 網際程式框架使用的導引資料.

Part I 介紹如何傳回 Hello World 字串.

可攜程式系統

假如在 Windows 操作系統, 建立 git clone https://github.com/chiamingyen/kmol2016 倉儲, 然後執行 start.bat 就可以啟動可攜 Python3 程式環境.

假如是在 Ubuntu 操作系統, 只要安裝 16.04 版本, 就已經內建 Python3 程式環境, 然後再使用 pip install flask, 就可以安裝 Flask 網際框架模組.

專案倉儲目錄

首先在 github 建立一個空的倉儲, 只先 initialize README.md 檔案, 以及 AGPL License, 以及 Python 對應的 .gitignore 等檔案, 完成後, git clone 這個空倉儲 (假設名稱為 wcmw13) 到本地端.

在 wcmw13 目錄中, 分別建立 microblog, users, 以及 tmp 子目錄. microblog 目錄下, 再建立 app 子目錄.

接下來在 users 目錄中利用 Leo Editor 建立一個 user.leo 專案檔, 之後的所有檔案建立與命令執行, 則都在 Leo Editor 環境中完成.

由於 user.leo 檔案位於 users 目錄中, 因此利用 @path 節點路徑設定指令, 以 @path ./../ 節點標題, 跳出 users 目錄.

接著就可以在此一節點的路徑下, 分別利用 @edit 節點指令, 編輯 README.md, setup.py 以及 wsgi.py 等檔案. 其中的 setup.py 是 Openshift 雲端平台上內建的環境配置檔案, 而 wsgi.py 則是內定的 wsgi 應用起始檔案.

其中, setup.py 的內容:

# 用於 Openshift 平台的環境設定檔 setup.py
from setuptools import setup

setup(name='WCM 2016 project',
      version='1.0',
      description='OpenShift App',
      author='wcm',
      author_email='course@mde.tw',
      url='https://www.python.org/community/sigs/current/distutils-sig',
      install_requires=['Flask>=0.10.1'],
     )


wsgi.py 的內容:

#!/usr/bin/python
# wsgi.py 檔案
# 導入 os 模組, 主要用來判斷是否在 OpenShift 上執行
import os
# 導入同目錄下的 myflaskapp.py
from microblog.app import app

# 以下開始判斷在 OpenShift 或近端執行
if 'OPENSHIFT_REPO_DIR' in os.environ.keys():
    # 表示程式在雲端執行
    application = app
else:
    # 表示在近端執行, 以 python3 wsgi.py 執行,  若採 uwsgi 則與 Openshift 運作模式相同
    app.run(debug=True)

接下來在跳出 users 之後的對應位置以 @path microblog 進入 microblog 目錄, 然後利用 @edit run.py 編輯 run.py, 其內容如下:

#!flask/bin/python
if __name__ == "__main__":
    from app import app
    app.run(debug=True)

然後再利用 @path app 進入 app 目錄後, 分別以 @edit init.py 與 @edit views.py 編輯 init.py 以及 views.py 檔案.

其中, init.py 檔案內容:

from flask import Flask

app = Flask(__name__)
from . import views

至於 views.py 的內容:

from flask import render_template
from . import app

@app.route('/')
@app.route('/index')
def index():
    user = {'nickname': 'Miguel'}
    posts = [
        {
            'author': {'nickname': 'John'},
            'body': 'Beautiful day in Portland!'
        },
        {
            'author': {'nickname': 'Susan'},
            'body': 'The Avengers movie was so cool!'
        }
    ]
    return render_template("index.html",
                           title='Home',
                           user=user,
                           posts=posts)

最後利用 @path templates 進入 templates 目錄, 然後再以 @edit base.html 編輯 base.html, 以 @edit index.html 編輯 index.html

而 base.html 的內容:

<html>
  <head>
    {% if title %}
    <title>{{ title }} - microblog</title>
    {% else %}
    <title>microblog</title>
    {% endif %}
  </head>
  <body>
    <div>Microblog: <a href="/index">Home</a></div>
    <hr>
    {% block content %}{% endblock %}
  </body>
</html>

index.html 的內容:

{% extends "base.html" %}
{% block content %}
    <h1>Hi, {{ user.nickname }}!</h1>
    {% for post in posts %}
    <p>
      {{ post.author.nickname }} says: <b>{{ post.body }}</b>
    </p>
    {% endfor %}
{% endblock %}

Comments

comments powered by Disqus