我剛開始學習python和flask。我的問題可能看起來簡單或愚蠢,但我真的處於僵局。如果不理解當前的代碼行爲,我無法進一步學習。 這是我的問題。
我的項目中有非常奇怪的代碼行爲。我的一個培訓flask.app從用戶輸入生成qr代碼。生成代碼後,用戶可以選擇:在png上獲取鏈接或直接下載文件。這個程序運行良好。
稍後,我決定從我的小型培訓應用程序製作藍圖,第一個是qr生成器。我剛剛複製的QR根路徑的功能,但它不能很好地工作 - QR不能保存PNG,我收到了錯誤,點擊按鈕後,獲得鏈接或下載:Pyqrcode將無法使用Flask藍圖
FileNotFoundError: [Errno 2] No such file or directory: 'tmp/201612131254.png'
這裏是層次結構:
├── app.py
├── blueprints
│ ├── __init__.py
│ ├── qr_generator
│ │ ├── __init__.py
│ │ ├── forms.py
│ │ ├── templates
│ │ │ ├── macros
│ │ │ │ └── render_field.html
│ │ │ └── qr_request.html
│ │ ├── tmp
│ │ └── view.py
│ └── tmp
├── config.py
├── static
├── templates
│ └── _base_template.html
├── tmp
└── views.py
這裏是app.py:
from flask import Flask, render_template
import config
from blueprints.qr_generator.view import qr_view
app = Flask(__name__)
app.config.from_object(config)
app.register_blueprint(qr_view)
@app.route('/')
def home():
return render_template(
'_base_template.html'
)
if __name__ == '__main__':
app.run()
藍圖QR發電機view.py:
import datetime
from flask import Blueprint, request, render_template, send_from_directory, redirect
from pyqrcode import QRCode
from blueprints.qr_generator.forms import UserTextField
# Blueprint
qr_view = Blueprint('qr_view', __name__, template_folder='templates')
# Views:
@qr_view.route('/qr_view', methods=['GET', 'POST'])
def qr_generator():
qr_file_name = None
if request.method == 'POST':
form = UserTextField(request.form)
if form.validate():
qr_code = QRCode(form.data['text'], encoding='utf-8')
qr_file_name = 'tmp/' + datetime.datetime.now().strftime('%Y%m%d%H%M') + '.png'
qr_code.png(qr_file_name, scale=5)
if form.data['mode'] == 'download':
return redirect(qr_file_name)
else:
form = UserTextField()
return render_template(
'qr_request.html',
form=form,
link=qr_file_name,
)
@qr_view.route('/tmp/<path:qr_path>')
def show_qr(qr_path):
return send_from_directory('tmp', qr_path, as_attachment=True)
qr_request.html:
{% extends '_base_template.html' %}<html lang="en">
{% block content %}
<div class="content">
{% from "macros/render_field.html" import render_field %}
<form method="POST" action="{{ url_for('qr_view.qr_generator') }}">
{{ form.hidden_tag() }}
<dl>
{% for field in form %}
{% if field.id != 'csrf_token' %}
{{ render_field(field) }}
{% endif %}
{% endfor %}
</dl>
<input type="submit" value="{{ 'Submit' }}" class="btn">
</form>
<div class="link">
{% if link %}
<p>Your QRCode is <a href="{{ link }}">here</p>
{% endif %}
</div>
</div>
{% endblock %}
相同的代碼工作良好,沒有藍圖...... 預先感謝任何幫助
似乎問題出在pycharm ..如果我通過控制檯啓動應用程序,QR保存在/ tmp中的png,用戶可以下載它。根據Blueprints概念,我想將藍圖中的png文件保存爲** qr_generator **。當我更改代碼 - 'qr_file_name ='blueprints/qr_generator/tmp /'+ datetime.datetime.now()。strftime('%Y%m%d%H%M')+'.png'我得到新文件到'blueprints/qr_generator/tmp /'文件夾中,但用戶無法獲得qr-code - 找不到文件'http://127.0.0.1:5000/blueprints/qr_generator/tmp/201612131800.png' – kotmsk