LoginSignup
0
0

More than 3 years have passed since last update.

Web-WF Python Tornado その2

Last updated at Posted at 2020-08-24

はじめに

webServer APIServerとして、かんたん・すぐれている(と思っている)Tornadoを何回かにわけて紹介したいと思います

Web-WF Python Tornado その1
Web-WF Python Tornado その2 (この記事
Web-WF Python Tornado その3(Openpyexcelの紹介)

対象

フルスタックエンジニア、フロントエンジニア、これから勉強しようと思っている人、Pythonが好きな人

Python3.6以上、tornadoがインストールされている

ゴール

今回はベースになるフォルダ構成や各種ファイルの説明、https化 までを説明

フォルダ構成

(あくまで個人のオススメです)
tornado_folder.png

config

・config.py
tornadoの起動設定を記述
・intDb.py
DBの設定を記述

controller

・apiController.py
get, postなどに対応する部分を記述
・basehandler.py
authなど全体的に処理したいものを記述
・mainController.py
loginやauthに関わる処理を記述

data

・sample.sql
プロジェクトのDDL

lib

・common.py
共通的に使うclass, 関数など

model

・model.py
テーブル定義、データモデル(プロジェクトの大きさで更に分割)

static

・css/
css関連
・fonts/
font関連
・images/
画像関連
・js/
javascriptモジュール関連
・tag/
このsampleではriot.jsを使用していたのでさり気なくアピール
・favicon.ico
favicon

templates

・base.html/
script読み込みなど側部分を記述
・index.html
メインコンテンツを記述
・login.html/
ログイン画面を記述
・topmenu.html
トップメニュー(ヘッダー)を記述

test

・test/
各種テストファイル

app.py

・app.py
tornado起動部分、対応urlを記述

app.py を以下のように変更して外部ファイルをインポート

app.py
import tornado.ioloop
import tornado.web
# 外部ファイルをインポート
from controller.mainController import *
from controller.apiController import *

 全体的なイメージとしてはhtml部分をvue.jsだったりnuxt.jsで作成した静的ファイルを置くか、tornadoをapiサーバーのみに使い、nuxt.js等から利用するという使い方が良いのかなと思います
 このあたりはプロジェクトの規模だったりメンバーの構成に合わせて選択するしか無いかなと考えているのですが、だれかベストプラクティスありますか?

起動&閲覧

ターミナルで

$ python app.py

tornado_main.png

はい、僕はいつもこんなシンプルな画面をプロジェクトのミニマムとして用意しています

https / options

さらに、sslに対応させ、あると便利なoptionsの設定もしておきます

ソース&閲覧

起動部分の抜粋
cert.pemとprivkey.pemは「オレオレ自己認証」で作成
server側はLet's Encryptを利用して運用することも出来ます
(自動化出来るとはいえ更新が面倒です)

app.py
if __name__ == '__main__':
    options.parse_command_line()
    if os.path.exists(BASE_DIR + '/config/config.py'):
        options.parse_config_file(BASE_DIR + '/config/config.py')
    http_server = tornado.httpserver.HTTPServer(application, ssl_options={
        "certfile": "/etc/cert/cert.pem",
        "keyfile": "/etc/cert/privkey.pem",
        "ssl_version": ssl.PROTOCOL_TLSv1_2,
        "ciphers": "EECDH+HIGH+AES!SHA:!ADH:!RC4:!MD5:!aNULL:!eNULL:!SSLv2:!LOW:!EXP:!PSK:!SRP:!DSS:!KRB5",
    })
    http_server.listen(8888)
    tornado.ioloop.IOLoop.current().start()
config.py
# logレベルの設定
# logging = "WARNING"
logging = "ERROR"

tornado_main2.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0