レンタルサーバを使ってPythonでウェブページを表示する方法についてまとめます。
Pythonの場所
Pythonのインタプリタの場所を探します。レンタルサーバー各社でのPythonの実行方法まとめに各レンタルサーバでの設定方法が書かれています。
私が使っているロリポップでは
#!/usr/local/bin/python3.4
でした。
基本
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("")
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("""
<html>
<body>
<p>こんにちは。</p>
</body>
</html>
""")
このとき2行目の
print(“”)
は不要です。
逆に
とするとエラーになります。
外部ファイルを読み込む方法
外部にひな形を準備して読み込む方法です。
template.htmとします。
<head>
<title>{title}</title>
</head>
<body>
{main}
</body>
</html>
test.pyを次のようにします。
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 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]として最初の値を取得する必要があります。
コメント