質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

4420閲覧

Python(Bottle + beaker + jinja2)でプログラムを動かすと、HTTPヘッダーがブラウザに表示される。

gomengo

総合スコア51

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2016/10/21 01:43

Python(2.7.9) + Apache/2.2.29 (FreeBSD)の環境でcgiとしてPythonを動かしています。

フレームワークとして、Bottleを使用し、セッション管理ににbeakerを使用し、テンプレートエンジンとしてjinja2を使用しています。

実行しているソースは以下のようになります。

python

1#!/usr/local/bin/python -- 2# -*- coding: utf-8 -*- 3# filename: index.py 4 5import bottle as app 6from beaker.middleware import SessionMiddleware 7 8#jinja2 インポート 9from jinja2 import Environment, FileSystemLoader 10 11#テンプレートファイルの場所を設定 12env = Environment(loader=FileSystemLoader('./tpl/', encoding='utf8')) 13 14session_options = { 15 'session.type': 'file', 16 'session.data_dir': './session/', 17 'session.auto': True, 18} 19app_middlware = SessionMiddleware(app.app(), session_options) 20 21app_session = app.request.environ.get('beaker.session') 22 23@app.route('/index') 24def index(): 25 app_session = app.request.environ.get('beaker.session') 26 app_session['name'] = '変数代入'.decode('utf-8') 27 #使用するテンプレート名を設定 28 tpl = env.get_template('test.tpl.html') 29 html = tpl.render({'name':app_session['name']}) 30 print 'Content-Type: text/html; charset=utf-8\n' 31 print html.encode('utf-8') 32 33 34app.debug(False) 35 36app.run(server='cgi', app=app_middlware, reloader=False, quiet=False, debug=None)

html

1<html> 2<body> 3 4<hr> 5<ul> 6 {{ name }} 7</ul> 8</body> 9</html>

このプログラムを動かすと、Httpのレスポンスヘッダーがテンプレートの内容を出力した下に表示され、ブラウザ上に出力されます。ブラウザに出力されるHTMLは下記のようなものです。

html

1 2<html> 3<body> 4 5<hr> 6<ul> 7 変数代入 8</ul> 9</body> 10</html> 11Status: 200 OK 12Content-Length: 0 13Content-Type: text/html; charset=UTF-8 14Set-cookie: beaker.session.id=c02a517af35644c0826eaa440b416311; Path=/ 15

このHTTPヘッダーを消したいと思っているのですが、どこで出力をする設定をしているのかわかりません。

ご教授いただけると幸いです。

また、今現在共用サーバー上でプログラムを動かしているのですが、
Pythonのプログラムを動かすために、http://aaa.jp/index.py/index
のようなURLでPythonを動かしています。

Options FollowSymLinks RewriteEngine on RewriteCond %{THE_REQUEST} ^.*/index.py RewriteRule ^(.*)index.py$ http://aaa.jp/$1 [R=301,L]

というような.htaccessで、http://aaa.jp/index のURLでアクセスできるようにしたいのですが、

error

1Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden

というようなエラーが表示されます。共用サーバーなのでRewriteできないということだと思うのですが、ほかの方法で上記のようなことを可能にする方法はありますでしょうか。httpd.confとうはいじることができません。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

フレームワークのドキュメントをよく読みましょう。というかBottleのトップページの例を見ただけでも、ルーティング定義のindex()は出力するべきコンテンツを返すように書くものだとわかります。ヘッダやボディの出力 (クライアントへの送信) はフレームワークがやってくれますから、index()の中でやってはいけませんよね。

(追記) HTTP Serverの設定については別質問にしてはどうでしょうか。

投稿2016/10/21 03:08

編集2016/10/21 03:21
ikedas

総合スコア4317

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gomengo

2016/10/21 04:05

ありがとうございました。 また、申し訳ありませんでした。 @app.route('/index') def index(): app_session = app.request.environ.get('beaker.session') app_session['name'] = '変数代入'.decode('utf-8') tpl = env.get_template('test.tpl.html') html = tpl.render({'name':app_session['name']}) return html でうまくいきました。 以後気を付けます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問