Python 本地主机的Cloud 9和Flask问题

Python 本地主机的Cloud 9和Flask问题,python,flask,cloud9-ide,Python,Flask,Cloud9 Ide,我为标题中的任何错误信息道歉,但我真的不确定问题是什么。我正在创建一个演示项目,从HTML表单中接收用户名和年龄。然后,有两个按钮。有人将信息添加到名为people.db的sqlite3数据库中。另一个从数据库中随机检索一个人并显示它 这是我的密码: import os import sqlite3 from flask import Flask from flask import request from flask import render_template from flask imp

我为标题中的任何错误信息道歉,但我真的不确定问题是什么。我正在创建一个演示项目,从HTML表单中接收用户名和年龄。然后,有两个按钮。有人将信息添加到名为
people.db
的sqlite3数据库中。另一个从数据库中随机检索一个人并显示它

这是我的密码:

import os
import sqlite3

from flask import Flask
from flask import request
from flask import render_template
from flask import g

app = Flask(__name__)

@app.route('/', methods=['POST', 'GET'])
def hello():
    error = None

    if request.form.get('submit', None) == "add":
        if request.form['name'] and request.form['age']:
            name = request.form['name']
            age = request.form['age']

            database = connect_db()
            cursor = database.cursor()
            sql = "INSERT INTO person (name, age) VALUES ({0}, {1});".format(name, age)

            cursor.execute(sql)
            database.commit()

            return render_template("index.html")
        else:
            error = "Name or age not provided."
            return render_template('index.html', error=error)
    elif request.form.get('submit', None) == "retrieve":
        database = connect_db()
        cursor = database.cursor()
        sql = "SELECT * FROM person ORDER BY RANDOM() LIMIT 1;"

        cursor.execute(sql)
        result = cursor.fetchone()

        return render_template("index.html")
    return render_template("index.html")

if __name__ == "__main__":
    app.run(host=os.getenv('IP', '0.0.0.0'),port=int(os.getenv('PORT', 8080)))
所以,问题是,当我在Cloud 9的c9users.io平台上运行该程序时,它试图转到
http://project-username.c9users.io:8080/localhost/?name=name&age=22&submit=add
。我不明白它为什么要访问本地主机。我的程序结构如下:

\website-test
    \templates
        index.html
    hello.py
    people.db
因此,我认为它应该返回到网站的根目录,同时执行所需的功能。我如何做到这一点

谢谢大家!

这里还有我的
index.html

<!DOCTYPE html>
<html>
    <head>
        <title>WEBSITES</title>
    </head>

    <body>
        <h2>Please enter your name and age.</h2>
        <form action="localhost/">
            <input type="text" name="name" placeholder="name">
            <input type="text"  name="age" placeholder="age">
            <input type="submit" name="submit" value="add">
            <input type="submit" name="submit" value="retrieve">
        </form>
    </body>
</html>

网站
请输入您的姓名和年龄。

默认情况下,在
localhost
上运行应用程序。在文件末尾添加以下代码行

if __name__ == "__main__":
  app.run(host='0.0.0.0')

0.0.0.0
这里的意思是,该应用程序将把主机作为您的
ip
,并可公开访问。如需进一步参考,请阅读。

您的index.html中有什么内容?听起来您的表单元素上有
action=“localhost/”

您的问题中缺少了一个
app.run()
。默认情况下,Flask仅在本地主机上运行。Cloud9可能会检测到这一点,并将其重定向到您这看起来像是对SQL注入开放的。研究如何以避免SQL注入的方式构造查询。此外,您没有区分
GET
POST
请求。您可以通过比较
request.method
来查看它的计算结果是
GET
还是
POST
。如果我重复发表评论,请道歉,我没有看到它出现。我在app.run()语句中进行了编辑!我意识到我没有包括它,但我现在添加了我的app.run,这是C9推荐的,我没有更改任何代码。它的作用是否与您建议的更改相同?@Azhraam
app.run()
在这里可以正常工作,因为C9将为您处理
端口和
IP
映射。如果您在远程服务器上托管此应用程序,请使用
0.0.0
。好的,那么我的代码中的这部分有问题吗?我认为您不应该担心本地主机问题。要测试您的应用程序是否运行良好,您可以做的是:只需在根端点上显示Hello World消息,并为上述任务添加单独的端点/Hello。恐怕我不明白。为什么本地主机不是一个问题?我没有本地主机操作,但我会将我的HTML编辑到post中,这是将页面重定向到的行