[英]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.