在URL中显示用户名的Python Flask

问题描述:

我正在通过Oreilly的烧瓶介绍工作,并且暂时停留在某个部分。它与基于用户配置文件生成动态网址。在URL中显示用户名的Python Flask

我views.py

@main.route('/user/<username>', methods=['GET', 'POST']) 
def user(username): 
    user = User.query.filter_by(username=username).first() 
    if user == None: 
     flash(user) 
     return redirect(url_for('auth.register')) 
    return render_template('/main/profile.html', user=user) 

models.py

class User(UserMixin, db.Model): 
    __tablename__ = 'users' 
    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column(db.String(64), unique=True, index=True) 
    password_hash = db.Column(db.String(128)) 
    name = db.Column(db.String(64)) 
    about_me = db.Column(db.Text()) 
    member_since = db.Column(db.DateTime(), default=datetime.utcnow) 
    last_seen = db.Column(db.DateTime(), default=datetime.utcnow) 

当我访问一个网页,我没有得到一个用户名和redircted。如果我改变

我views.py

@main.route('/user/<username>', methods=['GET', 'POST']) 
def user(username): 
    user = Current_user 

我让页面的用户名可见显示了使用{{user.username}},但是URL看起来像

http://0.0.0.0:8080/main/user/%3Capp.models.User%20object%20at%200x7f31fa279550%3E 

我在做什么错?

+0

您如何生成您的网址?另外,应该检查'None'的身份,而不是相等:'如果用户是None:'。 – dirn

您正将用户对象作为用户名的值传递给url_for。当你这样做时,用户对象被转换成插入到URL中的字符串表示。您致电filter_by查找具有该值的用户名。你想传递的只是用户名。

<a href="{{ url_for('main.user', username=g.user.username) }}">Profile</a> 
+0

嗒嗒我花了很长时间,我甚至没有看:/你的男人! – Anekdotin