我正在尝试创建一个登录表单,该表单通过用户名和密码来检查帐户的存在。我尝试了一些操作,但似乎无法正常工作
<form id="signupform" action="{{url_for ('login') }}" method="post">
<div class="input-group input-group-lg">
<input type="text" class="form-control" placeholder="Username" aria-describedby="sizing-addon1" name="username" >
</div>
<div class="input-group input-group-lg">
<input type="password" class="form-control" placeholder="Password (8 chars min)" aria-describedby="sizing-addon1" name="password" " >
</div>
<small id="emailHelp" class="form-text text-muted">
We'll never share your info with anyone else.<br>
<a href="signuppage"> No account? sign up here!</a>
</small>
<button type="button" class="btn btn-primary">Login</button>
</form>
这是表格^^
import os
from flask import Flask, session ,render_template , request
from flask_session import Session
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
app = Flask(__name__)
# Check for environment variable
if not os.getenv("DATABASE_URL"):
raise RuntimeError("DATABASE_URL is not set")
# Configure session to use filesystem
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
Session(app)
# Set up database
engine = create_engine(os.getenv("DATABASE_URL"))
db = scoped_session(sessionmaker(bind=engine))
@app.route("/")
def index():
return render_template("login.html")
@app.route("/home" , methods=["POST"])
def login():
# request username and password
username=request.form.get("username")
password=request.form.get("password")
#check if account exists
account= db.execute("SELECT * FROM users WHERE username = :username AND password = :password ",
{"username":username , "password":password }).fetchone()
if account is None:
return render_template("loginerror.html")
else:
return render_template("homepage.html")
这是烧瓶应用^^
数据库也正确链接,所以idk
我很迷路,真的很感谢您的帮助
答案 0 :(得分:0)
您没有指定您遇到的错误(并且必须这样做),但是我很确定您输入的格式正确(密码字段的末尾带有引号)
您的methods=["POST","GET"])
代码段中没有@app.route("/home" , methods=["POST"])
。目前,您的代码正在发布他的结果,但无法返回页面。当您使用帖子时,您是在向服务器发送信息,但这不是“ GET”请求,这意味着它不会更改您的URL或搜索新的URL。您应该实现一个功能,检查您是否已登录,如果已登录,请执行“ window.location.href = myserver.com/home”(在js中)。
另外,我建议您两件事。首先,使用flask-login
之类的已有登录引擎,可以节省时间。另外,如果不需要同时通过其他过程访问模型,请使用flask-sqlalchemy
库。这是一个很好的包装程序,可以减少您必须编写的代码
答案 1 :(得分:0)
问题出在这里<button type="button" class="btn btn-primary">Login</button>
。来自MDN button element doc:
类型
按钮的默认行为。可能的值为:
- 提交:该按钮将表单数据提交到服务器。如果未为按钮指定属性,则为默认设置 与关联,或者属性为空或无效 值。
- 重置::按钮将所有控件重置为初始值,例如。 (这种行为容易惹恼 用户。)
- 按钮::该按钮没有默认行为,默认情况下不执行任何操作。它可以让客户端脚本监听 元素的事件,这些事件在事件发生时触发。