我为标题中的任何错误信息道歉,但我真的不确定问题是什么。我正在创建一个演示项目,该项目从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>
答案 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/"