python - Python Flask 应用程序使用 ajax 将远程服务器文本文件输出到网络服务器并显示在网页上,找不到 404
问题描述
我有一个运行我的网站的网络服务器(fedora 和 apache),我目前正在尝试创建我的 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 函数路由我的调用的地方。
应用程序.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 的核心是一个模板系统。对于您的 Web 服务器,每个 PHP 文件都只是一个 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)
推荐阅读
- python - 如何裁剪文件夹中的所有图片并通过python将其保存到另一个文件夹
- vba - 将文件解压缩到单个文件夹?
- c# - 有没有办法统一更改/修改资产文件?
- sql - How to calculate age in POSTGRES for multiple columns and conditions
- java - 我不明白为什么在这个给定的程序中 a 的值没有增加
- clickhouse - 添加新的跳过索引
- python - 如何将引用返回到在 flask-sqlalchemy 中具有复合键的表?
- java - 使用从主类派生的字符串值到测试类
- python - 为什么我不能在 python 中使用'if A or B'函数得到正确的结果
- ruby-on-rails - 如何在 Rails 控制器上为 Active Storage 下载 blob URL