Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialKiefer Jones
4,401 PointsAttributeError: 'AnonymousUserMixin' object has no attribute 'username'
Getting the above error when trying to click on my stream on the website after doing the Follow and Unfollow video, it appears to point to;
File "/home/treehouse/workspace/app.py", line 105, in stream if username and username != current_user.username:
not sure what is wrong here as I did not edit this, and it was working before doing this video.
Chris Freeman
Treehouse Moderator 68,457 PointsWhere is current_user
defined?
Kiefer Jones
4,401 PointsI have imported current_user from flask.ext.login
3 Answers
Chris Freeman
Treehouse Moderator 68,457 PointsThe issue is that current_user
is not logged in and therefore does not have a defined username
.
One solution is to check if the current_user
Is logged in by wrapping your code with:
if current_user.is_authenticated():
#code
A more advanced solution is to customize the anonymous user class from this stackoverflow post:
from flask.ext.login import AnonymousUserMixin
class Anonymous(AnonymousUserMixin):
def __init__(self):
self.username = 'Guest'
Then added this class to anonymous_user
login_manager.anonymous_user = Anonymous
Kiefer Jones
4,401 PointsFirst solution fixed it right up, thank you Chris.
Christopher Shaw
Python Web Development Techdegree Graduate 58,248 PointsUsing Chris Freeman first suggestion, I did the following to check if the user is authenticated and gave a dummy name if not, which did not require any new imports.
@app.route('/stream')
@app.route('/stream/<username>')
def stream(username=None):
template = 'stream.html'
if current_user.is_authenticated():
cur_usr_name = current_user.username
else:
cur_usr_name = "***no_actual_user_name_should_ever_match_this***"
if username and username != cur_usr_name:
try:
user = models.User.select().where(
models.User.username**username).get()
except models.DoesNotExist:
abort(404)
else:
stream = user.posts.limit(100)
else:
stream = current_user.get_stream().limit(100)
user = current_user
if username:
template = 'user_stream.html'
return render_template(template, stream=stream, user=user)
Alex Holigores
2,815 PointsUtilizing the AnonymousUserMixin solution I also added the following:
elif current_user.username == 'Guest':
flash('Please login in to see your stream!', 'error')
return redirect(url_for('index'))
Kiefer Jones
4,401 PointsKiefer Jones
4,401 Points