回答編集履歴

1 誤字訂正

退会済みユーザー

退会済みユーザー

2017/08/26 20:43  投稿

該当のソースコード中の`QRmaker()`という関数は値を返していないのに、
`input_code()`中で
```
qr_img = QRmaker(code_input)
```
と記述されているのには違和感を感じます。
と記述されているのには違和感があります。
また
```
qr_img.save(filename,"png") #QRコードに名前をつけて保存
```
についてですが、これは
```
qr_img.save(filename) #QRコードに名前をつけて保存
```
と書くのが正しいのではないでしょうか?
また、特に設定しない限り、画像ファイル等の静的なリソースファイルはstaticディレクトリ以下におかないと
ルーティングできませんので、QRコード画像の生成先は
```
# これはNG
filename = "qrcode_image/{}.png".format(ts.strftime("%Y-%m-%d_%H-%M-%S"))
# こうすべき
filename = "./static/qrcode_image/{}.png".format(ts.strftime("%Y-%m-%d_%H-%M-%S"))
```
と書くべきです。
以上の点を考慮して、提示されたソースを以下のように修正してみました。
実行したところ、私の環境(Debian 9, Python3.6.1-64bit)では表示されました。
```
├── app.py
├── static
│   └── qrcode_image
│      └── 2017-08-26_20-26-42.png
└── templates
   ├── index.html
   └── output_code.html
```
のようになっています。
```app.py
# coding:utf-8
from flask import Flask, render_template, Response,request,redirect,url_for
import datetime
from PIL import Image
import qrcode as qr
import io
# flask incetance
app = Flask(__name__)
# index page, input code
@app.route('/')
def index():
   now = datetime.datetime.now()
   timeString = now.strftime("%Y-%m-%d %H:%M")
   return render_template('index.html',time=timeString)
@app.route('/input_code', methods=['POST'])
def input_code():
   code_input = request.form['code']
   fig_url = QRmaker(code_input)
   return render_template("output_code.html", data=code_input,fig=fig_url)
# retry and quit
@app.route('/event', methods=['POST'] )
def event():
   if request.method == 'POST':
       if request.form['submit'] == 'Retry':
          return redirect(url_for('index'))
       elif request.form['submit'] == 'Quit':
           return Response('Please close the web browser')
       else:
           pass # unknown
   elif request.method == 'GET':
       return redirect(url_for('index'))
def QRmaker(code):
   qr_img = qr.make(str(code)) #codeの文字をQRコードに変換
   # img.show() #生成したQRコードを表示
   ts = datetime.datetime.now() # grab the current timestamp
   # construct filename   
   filename = "./static/qrcode_image/{}.png".format(ts.strftime("%Y-%m-%d_%H-%M-%S"))
   qr_img.save(filename) #QRコードに名前をつけて保存
   return filename
# メニュー画面作成
if __name__ == '__main__':
   app.run(host='0.0.0.0', debug=True)
```
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る