Cloudhost和Flask问题与localhost

时间:2017-04-23 20:17:46

标签: 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 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。我不明白为什么它试图在这里访问localhost。我的程序结构如下:

\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>

2 个答案:

答案 0 :(得分:0)

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

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

0.0.0.0这意味着,该应用会将主机作为您的ip,并且可以公开访问。有关详细参考,请参阅documentation

答案 1 :(得分:0)

index.html中有什么内容?听起来你在表单元素上有action="localhost/"