从使用flask和sqlalchemy登录的用户处获取特定的博客文章

2024-05-17 17:09:15 发布

您现在位置:Python中文网/ 问答频道 /正文

在def user():函数中,我需要获取当前登录到变量中的用户的博客文章,以便通过render_template()命令将其传递到html文件。老实说,这可能是非常简单的东西,但当我在谷歌搜索时,我只是不知道如何很好地表达它。谢谢大家!

class users(db.Model):
    _id = db.Column("id", db.Integer, primary_key=True)
    username = db.Column(db.String(20))
    password = db.Column(db.String(30))
    blog = db.Column(db.String(500))
    admin = db.Column(db.String(5))

    def __init__(self, username, password, blog, admin):
        self.username = username
        self.password = password
        self.blog = blog
        self.admin = admin
        db.create_all()

values = users.query.all()

@app.route("/create_account", methods=["POST", "GET"])
def create_account():
    if request.method == "POST":
        create_user = request.form["create_username"]
        create_pass = request.form["create_password"]
        create_admin = request.form["create_adminer"]
        found_user = users.query.filter_by(username=create_user).first()
        found_pass = users.query.filter_by(password=create_pass).first()
        found_adminer = users.query.filter_by(admin=create_admin).first()
        try:
            if found_user.username and found_pass.password:
                flash("Account already exists")
                return render_template("login.html")
        except:
            if create_admin == "True":
                usr = users(create_user, create_pass, 'Your Blog Will Go Here', create_admin)
                db.session.add(usr)
                db.session.commit()
                flash('Account Created')
                return redirect(url_for("login"))
            else:
                usr = users(create_user, create_pass, 'Your Blog Will Go Here', "")
                db.session.add(usr)
                db.session.commit()
                flash('Account Created')
                return redirect(url_for("login"))
    else:
        return render_template('create_account.html')

@app.route("/login", methods=["POST", "GET"])
def login():
    if request.method == "POST":
        use = request.form["usern"]
        pas = request.form["passw"]
        found_username = users.query.filter_by(username=use, password=pas).first()
        print(found_username.username)
        try:
            adm = request.form['adminer']
            found_admin = users.query.filter_by(admin=adm).first()
            if found_username.username == use and found_username.password == pas and adm == 'True':
                session['username'] = use
                session['password'] = pas
                session['admin'] = adm
                return redirect(url_for("user"))
            else:
                if found_username.username == use and found_username.password == pas:
                    session['username'] = use
                    session['password'] = pas
                    return redirect(url_for("user"))
        except:
            flash('Incorrect Login Information')
            return render_template('login.html')        
    else:
        return render_template('login.html')

@app.route("/user")
def user():
    use = session['username']
    pas = session['password']
    values = users.query.all()
    try:


    while True:
         for item in values:
             print(item.blog)
             found_user = users.query.filter_by(username=use, password=pas, blog=item.blog).first()
             if found_user.username == use and found_user.password == pas and found_user.blog == item.blog:
             return render_template("user.html", username=use, blogs=item.blog)
             break
             #I know there isn't and except statement, will add it once i get the basic code structure i need. Thank You!

@app.route("/logout")
def logout():
    session.pop("username", None)
    session.pop("password", None)
    session.pop("admin", None)
    flash("You have been logged out", 'warning')
    return redirect(url_for('login'))
    #return render_template('login.html')


if __name__ == "__main__":
    db.create_all()
    app.run(debug=True)

Tags: dbreturnadminusesessioncreateusernamelogin
2条回答

快速免责声明我使用的是peewee而不是SQLalchemy,所以我不能只编写您需要的代码。 如果您只是想根据当前用户从数据库中获取“blog”列的值,您可以尝试进行如下查询:

blog        = users.select(blog).where(users.username==use)
(variable)  = (select 'blog' column from your database where username, of same row, is equal to "use"((session["username"])) variable)

至少在peewee是这样做的。
然后可以在这里使用:

@app.route("/user")
def user():
    try:
        use = session["username"]

        blog = users.select(blog).where(users.username==use)

        return render_template("user.html", username=use)
    except:
        flash("Need to Login First")
        return redirect(url_for("login"))

这就是解决方案:

@app.route("/user")
def user():
    #global values
    try:
        use = session['username']
        pas = session['password']
        values = users.query.all()
        while True:
            for item in values:
                print(item.blog)
                found_user = users.query.filter_by(username=use, password=pas, blog=item.blog).first()
                try:
                    if found_user.username == use and found_user.password == pas and found_user.blog == item.blog:
                        return render_template("user.html", username=use, blogs=item.blog)
                        break
                except:
                    pass
    except:
        flash("Need to Login First")
        return redirect(url_for("login"))

相关问题 更多 >