Pythonでウェブページを作る方法

Pocket

レンタルサーバを使ってPythonでウェブページを表示する方法についてまとめます。

Pythonの場所

Pythonのインタプリタの場所を探します。レンタルサーバー各社でのPythonの実行方法まとめに各レンタルサーバでの設定方法が書かれています。

私が使っているロリポップでは
#!/usr/local/bin/python3.4
でした。

基本

test.pyを次の通り作成します。

#!/usr/local/bin/python3.4
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
print("Content-Type: text/html; charset=utf-8")
print("")
print("<html>")
print("<body>")
print("<p>Hello World.</p>")
print("</body>")
print("</html>")

1行目はPythonの場所です。環境によって異なります。先頭に#!を付けます。
2行目から4行目は日本語を使うためです。
5行目はHTMLを使うためです。
6行目のprint("")は一見、ムダですが、ないとエラーになります。
7行目以降に通常のHTMLを書きます。

test.pyを適当なところにアップしてパーミッションを700にします。

HTMLを一気に書く方法

先頭と末尾にダブルクォート3個を書くと次のようにHTMLを一気に書くことができます。

print("Content-Type: text/html; charset=utf-8")
print("""
<html>
<body>
<p>こんにちは。</p>
</body>
</html>
"""
)

このとき2行目の
print("")
は不要です。
逆に

print("""<html>

とするとエラーになります。

外部ファイルを読み込む方法

外部にひな形を準備して読み込む方法です。
template.htmとします。

<html>
<head>
<title>{title}</title>
</head>
<body>
{main}
</body>
</html>

test.pyを次のようにします。

import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
print("Content-Type: text/html; charset=utf-8")
print("")
def make_page(option):
  #option[key] = value
  fn = "template.htm"
  with open(fn) as f:
    html = f.read()
  for key in option.keys():
    html = html.replace("{" + key + "}", option[key])
  return html
option = {"title" : "Pythonでウェブページ", "main" : "<p>本文。</p>"}
html = make_page(option)
print(html)

make_pageという関数を作っておきます。ひな形を読み込んで辞書型変数にセットした文字列に置き換えます。

URLのパラメータを読み込む方法

URLのパラメータを読み込む方法です。
PythonでURLのクエリ文字列(パラメータ)を取得・作成・変更 | note.nkmk.meが詳しいです。

test.pyを次のようにします。

import os
import urllib.parse
url = os.environ["REQUEST_URI"]
qs = urllib.parse.urlparse(url).query
qs_d = urllib.parse.parse_qs(qs)
print(qs)
print(qs_d)
print(qs_d["q"][0])
print(qs_d["r"][0])

現在のURLを取得するにはosをインポートしてenvironを使います。
os.environ["REQUEST_URI"]
とすると現在のURLを返します。

URLからパラメータ(クエリ文字列)を取得するにはurllib.parseをインポートします。
URLが
test.py?q=123&r=abc
の場合、次のようになります。

qs → q=123&r=abc
qs_d → {'q': ['123'], 'r': ['abc']}
qs_d["q"][0] → 123
qs_d["r"][0] → abc

qsd_dは辞書型ですのでqs_d["q"]として値が取得できますが実際にはリストが取得できるので[0]として最初の値を取得する必要があります。

[ 2019年9月26日 | カテゴリー: Python, デジタル ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報