简体   繁体   English

从登录的用户那里获取特定的博客文章 - 使用 Flask 和 sqlalchemy

[英]Getting the specific blog post from the user that is logged in - with flask and sqlalchemy

In the def user(): function i need to get the blog post for the user that is currently logged in into a variable so i can pass it to my html file through the render_template() command.在 def user(): 函数中,我需要获取当前登录到变量的用户的博客文章,以便我可以通过 render_template() 命令将其传递给我的 html 文件。 It is honestly probably something super simple but i just didn't know how to word it very well when i was doing google searches.老实说,这可能是一件非常简单的事情,但我在进行 google 搜索时不知道如何很好地表达它。 Thank You!谢谢你!

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)

Quick disclaimer I am using peewee not SQLalchemy so I cannot just write you the code you need.快速免责声明我使用的是 peewee 而不是 SQLalchemy,所以我不能只给你写你需要的代码。 If you simply want the value of the "blog" column from your database based on the current user you could try to make a query that goes along the lines of this:如果您只是想要基于当前用户的数据库中“博客”列的值,您可以尝试进行如下查询:

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)

This is atleast how it would be done in peewee.这至少是在 peewee 中完成的方式。
This could then be palced in here:然后可以将其放在此处:

@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"))

This was the solution:这是解决方案:

@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"))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM