我有一个运行我的网站的Web服务器(带有apache的fedora(,我目前正在尝试创建我的Flask应用程序以从我的app.js
文件接收AJAX调用,然后最终使用FTP
获取远程文本文件的内容以输出回网站。
我在进行 AJAX 调用时无法让我的路由命中我的 Flask 应用程序。我相信我知道问题是什么,我的 AJAX 调用没有调用端口 5000,这就是我在控制台中看到 404 错误的原因。但是,当我手动执行curl -X GET http://127.0.0.1:5000/index -d'test'
时,我确实看到正确的index.html
页面按预期返回。
所以我的问题是,Flask通常如何在apache网络服务器上设置?
这是我对 Flask (app.py( 的 AJAX 调用。
应用.js:
$(function(){ // this call is returning 404 not found.
$('button').click(function(){
$.ajax({
url: '/index',
data: user,
type: 'POST',
success: function(response){
console.log("Here is the success res: " + response + user);
},
error: function(error){
console.log("Here is the error res: " + error + user);
}
});
});
});
这是我的 Flask 函数路由我的呼叫的地方。
app.py:
from flask import Flask, request, send_file, render_template, json
from ftplib import FTP
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'hello world!'
@app.route('/index', methods=['GET', 'POST'])
def index():
return render_template('index.html')
if __name__ == "__main__":
app.run()
在端口 80 上侦听的所有进程:
# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
/opt/lamp 3179 daemon 4u IPv6 2190211 0t0 TCP *:http (LISTEN)
/opt/lamp 6833 daemon 4u IPv6 2190211 0t0 TCP *:http (LISTEN)
/opt/lamp 7665 root 4u IPv6 2190211 0t0 TCP *:http (LISTEN)
/opt/lamp 7909 daemon 4u IPv6 2190211 0t0 TCP *:http (LISTEN)
/opt/lamp 7919 daemon 4u IPv6 2190211 0t0 TCP *:http (LISTEN)
/opt/lamp 10892 daemon 4u IPv6 2190211 0t0 TCP *:http (LISTEN)
/opt/lamp 11676 daemon 4u IPv6 2190211 0t0 TCP *:http (LISTEN)
/opt/lamp 11843 daemon 4u IPv6 2190211 0t0 TCP *:http (LISTEN)
/opt/lamp 12345 daemon 4u IPv6 2190211 0t0 TCP *:http (LISTEN)
/opt/lamp 12755 daemon 4u IPv6 2190211 0t0 TCP *:http (LISTEN)
/opt/lamp 20204 daemon 4u IPv6 2190211 0t0 TCP *:http (LISTEN)
本页详细介绍了您的部署选项。
Flask(和一般的python应用程序(之间的最大区别在于PHP的核心是一个模板系统。每个PHP文件,对于你的Web服务器来说,只是一个HTML文件。 请记住,PHP 根据自己的定义是一个超文本处理器。
另一方面,Python Web 应用程序是在服务器上运行的应用程序,准备处理请求并返回 html。基本上,您需要能够一方面运行python应用程序,另一方面处理来自外部世界的请求并返回网页。
在已经安装并工作的Apache的设置中,我将使用mod_wsgi/Apache方法。 这使用 Python Web 服务器网关接口在正在运行的应用程序和 Apache 之间提供新娘。
你也可以使用Gunicorn,但如果你已经熟悉Apache,mod_wsgi可能是最好的。
值得注意的是,您应该仅在完成测试后部署应用程序,因为调试在任何分叉环境中都不起作用(如果可能的话,除了存在巨大的安全风险(。 如果问题是本地测试的端口,请更改:
app.run()
自:
app.run('localhost', port='80', debug=True)