Python 除'以外的烧瓶路径/';不由apache提供服务
所以我应该先说我对Flask、Apache和web服务还不熟悉,所以我为我的无知提前道歉 我正试图用Raspberry Pi 3建立一个远程数据记录项目。我将数据捕获到SQL数据库中,然后通过Apache以交互式绘图的形式提供这些信息 最近我一直在尝试使用flask,因为我喜欢它的灵活性。我已经成功地安装了flask和Apache,并且都提供了hello worlds服务。然后我设置了wsgi,通过Apache为flask路由提供服务,并能够让hello world正常工作。然后我成功地复制了这个例子(/) 然后,我想将重启按钮连接到一个烧瓶路径,该路径将实际重启Pi。我能够在开发环境“localhost:5000”中实现这一点。如果我从web导航到Pi,我可以加载sysinfo页面,但是重新启动的路径失败,出现404错误 “未找到服务器上未找到请求的URL。如果 手动输入URL请检查拼写并重试。“ 以下是index.py的路由:Python 除'以外的烧瓶路径/';不由apache提供服务,python,apache,flask,raspberry-pi3,wsgi,Python,Apache,Flask,Raspberry Pi3,Wsgi,所以我应该先说我对Flask、Apache和web服务还不熟悉,所以我为我的无知提前道歉 我正试图用Raspberry Pi 3建立一个远程数据记录项目。我将数据捕获到SQL数据库中,然后通过Apache以交互式绘图的形式提供这些信息 最近我一直在尝试使用flask,因为我喜欢它的灵活性。我已经成功地安装了flask和Apache,并且都提供了hello worlds服务。然后我设置了wsgi,通过Apache为flask路由提供服务,并能够让hello world正常工作。然后我成功地复制了这
@app.route("/sysinfo/restart_now", methods=['GET','POST'])
def restart_now():
subprocess.call("delayed-reboot",shell=True)
return render_template("restart_now.html")
以及index.html模板中用于路由的按钮代码:
<form action="/sysinfo/restart_now" method="post">
<button name="restart_now" onclick="return confirm('Do you wish to shutdown your system ?')" class="button button-primary">Reboot Pi</button>
</form>
<p>Sysinfo will reload automatically in <span id="counter">45</span> second(s).</p>
<script type="text/javascript">
function countdown() {
var i = document.getElementById('counter');
if (parseInt(i.innerHTML)<=0) {
location.href = '/sysinfo';
}
if (parseInt(i.innerHTML)>0) {
i.innerHTML = parseInt(i.innerHTML)-1;
}
}
setInterval(function(){ countdown(); },1000);
</script>
这是我正在使用的wsgi配置:
WSGIDaemonProcess sysinfo user=pi group=www-data threads=5
WSGIScriptAlias /sysinfo /var/www/sysinfo/sysinfo.wsgi
<Directory "/var/www/sysinfo">
WSGIProcessGroup sysinfo
WSGIScriptReloading On
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
ErrorLog /var/www/sysinfo/logs/error.log
如果能帮助我理解我做错了什么,我将不胜感激
-谢谢它不起作用,因为您正在Apache中的子URL上装载应用程序,但您在Flask中的路由也有装载点。这意味着您使用的URL必须是
/sysinfo/sysinfo/restart\u now
您需要在Flask路由中使用just/restart\u now
,或者将Apache配置更改为使用:
WSGIScriptAlias /sysinfo /var/www/sysinfo/sysinfo.wsgi/sysinfo
在最后一个参数上添加尾随的/sysinfo
,使Flask应用程序仍然将装入点视为路径信息的一部分,而这正是Flask路由的内容
顺便说一句,您不需要在
上重新加载wsgiscript,因为这是默认设置。谢谢。我花了一分钟的时间,但我最终还是弄明白了这一点,回来解释,看到了你的回答。顺便问一下,调试flask/java/html代码的好方法是什么?我最后做的是制作另一个测试页面模板,然后在文本{{url_for(“restart_now”)}中打印出来,这样做之后,事情就变得很明显了。我还意识到我应该使用{{url_for(…)}}而不是directhref,并且也解决了这个问题。我在chrome>more tools>dev tools方面取得了一些成功,但我对这方面还不熟悉。
import sys
sys.path.insert(0, '/var/www/sysinfo')
from index import app as application
WSGIScriptAlias /sysinfo /var/www/sysinfo/sysinfo.wsgi/sysinfo