我使用python 3.4和最新烧瓶0.10.1,flask-bootstrap 3.3.5.6,flask-wtf 0.12,Jinja2 2.8来制作我的网络应用程序。
现在我尝试使用cx_freeze将我的应用转换为.exe。
我的应用在python中工作正常。但冻结后,浏览器会获得ERR_EMPTY_RESPONSE。
我写了一个简单的测试用例,它有同样的问题。
这个问题花了我几个小时。可能是因为使用模板造成的?谁能帮帮我?
这是我的setup.py
from cx_Freeze import setup, Executable
includefiles = ['templates/', 'static/']
base = None
main_executable = Executable("starter.py", base=base, copyDependentFiles=True)
setup(name="Example",
version="0.1",
description="Example Web Server",
options={
'build_exe': {
'packages': ['jinja2',
'jinja2.ext',
'flask_wtf',
'flask_bootstrap',
'os'],
'include_files': includefiles,
'include_msvcr': True}},
executables=[main_executable], requires=['flask', 'wtforms'])
starter.py:
from IndividualWebsite import app
app.run()
IndividualWebsite.py:
from flask import Flask, render_template, request, session, redirect, url_for, flash
from flask_bootstrap import Bootstrap
import jinja2.ext
from flask_wtf import Form
from wtforms import StringField, SubmitField
from wtforms.validators import Required
app = Flask(__name__)
app.config['SECRET_KEY'] = 'hard to guess string'
bootstrap = Bootstrap(app)
class NameForm(Form):
name = StringField('What is your name?', validators=[Required()])
submit = SubmitField('Submit')
@app.route('/', methods=['GET', 'POST'])
def index():
form = NameForm()
if form.validate_on_submit():
old_name = session.get('name')
if old_name is not None and old_name != form.name.data:
flash('Looks like you have changed your name!')
session['name'] = form.name.data
return redirect(url_for('index'))
return render_template('index.html', form=form, name=session.get('name'))
我的index.html是jinja2模板:
{% extends 'base.html' %}
{% import "bootstrap/wtf.html" as wtf %}
{% block page_content %}
<div class="page-header">
<h1>Hello, {% if name %}{{ name }}{% else %}Stranger{% endif %}!</h1>
</div>
{{ wtf.quick_form(form) }}
{% endblock %}
基础模板正在使用boostrap模板。
更新1: 冻结服务器只显示
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
,没有别的
更新2: 如果我只是返回一个字符串:
return '<h1>Test</h1>'
服务器可以响应正确的内容。它可能是由模板引起的。
更新3: 哦,我怕我搞错了。原因500错误hanlder也是由模板写的。解决之后,真正的错误是找不到模板:index.html&#39; 。
但是我在setup.py中包含了所有模板,它们存在于&#39; build / xxx / templates&#39;目录。为什么呢?
答案 0 :(得分:3)
最后我找到了解决方案。
我将烧瓶应用的模板文件夹重置为&#39; ./ templates&#39;在starter.py中:
import os
from IndividualWebsite import app
abs_path = os.path.abspath('.')
app.template_folder = abs_path + '/templates'
app.run()
我也使用flask-bootstrap。所以我必须包括flask-bootstrap的模板和宏。我所做的就是将所有这些内容复制到我的模板文件夹中,并根据副本制作我自己的模板。
希望这些对于想要分发烧瓶app的人有用。