Search code examples
pythonflaskvalueerror

Flask-sqlalchemy invalid literal for int() with base 10: 'None'


So I've created a db.model and I've created a login system using Flask-Login everything seemed to work and now all of a sudden it gives the "ValueError: invalid literal for int() with base 10: 'None' ". Apparently something that actually contains nothing is being passed but I can't see what and where. Can anyone help? Here's my highlighted code pieces which are said to be causing my problems:

return Users.query.get(int(user_id))

and

return render_template('Index.html', New_User=All_Users)

those two are parts of the following code pieces:

@login_manager.user_loader
def load_user(user_id):
     return Users.query.get(int(user_id))


def Index():
if request.method=='POST':
    New_Username = request.form['Username']
    New_Password = request.form['Password']
    user = Users.query.filter_by(Username=New_Username).first()
    if not user:
        New_User = Users(Username=New_Username, Password=New_Password)
        db.session.add(New_User)
        db.session.commit()
        login_user(New_User)
        return redirect('/Dashboard')
    else:
        return render_template('Index.html', New_User=All_Users)
else:
        return render_template('Index.html', New_User=All_Users)

Whole traceback:

File "E:\Python\Lib\site-packages\flask\app.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)

File "E:\Python\Lib\site-packages\flask\app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "E:\Python\Lib\site-packages\flask\app.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "E:\Python\Lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "E:\Python\Lib\site-packages\flask\app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "E:\Python\Lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "E:\Python\Lib\site-packages\flask\app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "E:\Python\Lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "E:\Python\Lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "E:\Python\Lib\site-packages\flask\app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "run.py", line 56, in Index
return render_template('Index.html', New_User=All_Users)
File "E:\Python\Lib\site-packages\flask\templating.py", line 136, in render_template
ctx.app.update_template_context(context)
File "E:\Python\Lib\site-packages\flask\app.py", line 838, in update_template_context
context.update(func())
File "E:\Python\Lib\site-packages\flask_login\utils.py", line 379, in _user_context_processor
return dict(current_user=_get_user())
File "E:\Python\Lib\site-packages\flask_login\utils.py", line 346, in _get_user
current_app.login_manager._load_user()
File "E:\Python\Lib\site-packages\flask_login\login_manager.py", line 318, in _load_user
user = self._user_callback(user_id)
File "run.py", line 30, in load_user
    def __repr__(self):
        return f'{self.Username}'
 
@login_manager.user_loader
def load_user(user_id):
    return Users.query.get(int(user_id))
 
 
 
@app.route('/Logout')
@login_required

Solution

  • When you query the Users model on a login, your user_loader returns the user to your '/login' view function, or whatever calls login_user(). When you query the database, if there's a 404 (so the user is not found), None is returned. You have tried to handle this with if not user:..., but you should instead try if user is None, or if user==None or even take the error as default and say if user is not None: #code for logging in. Then your view function will handle the database returning None from the query.