在cs50网页pset 1

时间:2020-04-01 06:31:54

标签: python flask cs50

我正在尝试创建一个登录表单,该表单通过用户名和密码来检查帐户的存在。我尝试了一些操作,但似乎无法正常工作

<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

我很迷路,真的很感谢您的帮助

2 个答案:

答案 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

类型

按钮的默认行为。可能的值为:

  • 提交:该按钮将表单数据提交到服务器。如果未为按钮指定属性,则为默认设置 与关联,或者属性为空或无效 值。
  • 重置::按钮将所有控件重置为初始值,例如。 (这种行为容易惹恼 用户。)
  • 按钮::该按钮没有默认行为,默认情况下不执行任何操作。它可以让客户端脚本监听 元素的事件,这些事件在事件发生时触发。