2013年3月12日火曜日

python http or https サーバ(flask編)

flask
http://flask.pocoo.org/

準備
sudo apt-get install python-flask


簡単にhttpsサーバを用意できるのでうれしいですね。

でもバグがあるのかpython 2.7.3では動かず適当に修正しました。

/usr/lib/python2.7/SocketServer.py
の470行目

request.shutdown(socket.SHUT_WR)

とあるのを

if isinstance(request,socket._socketobject):
  request.shutdown(socket.SHUT_WR)
else:
  request.shutdown()

こうしました。
SSLセッションの時はshutdown()は引数無しでないといけないみたい。
きちんとソースを追ってないけど、今のところはこれで回避。


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import flask

app = flask.Flask( __name__ )

@app.route ( '/', methods=['GET', 'POST'] )
def index():

  #ヘッダの取得
  #flask.request.headers['Content-Type']

  #クエリの取得
  #flask.request.values.get('abc',None)


  if flask.request.method=='GET':
    return '<html><body>hello</body></html>'
  
  if flask.request.method=='POST':
    f = request.files['the_file']
    f.save('/tmp/' + f.filename)
    return flask.redirect(flask.url_for('index'))

  flask.abort(404)
  return 'abortしてるのでここは走らない'


@app.route ( '/abc' )
def abc():
  #templatesディレクトリのabc.htmlを使う
  return flask.render_template('abc.html')


@app.route ( '/text' )
def text():
    res = 'hello'
    return flask.Response(res, mimetype='text/plain')



#HTTPサーバの場合はこちら
app.run(host='0.0.0.0',port=80,debug=True)

#HTTPSサーバの場合はこちら
#app.run(host='0.0.0.0',port=443,debug=True,ssl_context='adhoc')

0 件のコメント:

コメントを投稿