Python 本地主机的Cloud 9和Flask问题
我为标题中的任何错误信息道歉,但我真的不确定问题是什么。我正在创建一个演示项目,从HTML表单中接收用户名和年龄。然后,有两个按钮。有人将信息添加到名为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
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推荐的,我没有更改任何代码。它的作用是否与您建议的更改相同?@Azhraamapp.run()
在这里可以正常工作,因为C9将为您处理端口和IP
映射。如果您在远程服务器上托管此应用程序,请使用0.0.0
。好的,那么我的代码中的这部分有问题吗?我认为您不应该担心本地主机问题。要测试您的应用程序是否运行良好,您可以做的是:只需在根端点上显示Hello World消息,并为上述任务添加单独的端点/Hello。恐怕我不明白。为什么本地主机不是一个问题?我没有本地主机操作,但我会将我的HTML编辑到post中,这是将页面重定向到的行