It seems like the login-requiring stuff is repeated in a lot of places.  It might be useful to create an @require_login decorator.  Something like the following should work (though you should test that it works and lint it), and then you can just annotate any request functions with it:

from functools import wraps
 
def require_login(request_func):
  """Decorator: only handle the provided request if the user is logged in.  Else, redirect to the login page.

  Args:
    request_func: function.  A function that handles a request.

  Returns:
    A function that will execute request_func only if the user is logged in.
  """
  @wraps(request_func)
  def new_request_func(self):
    if user.get_current_user_key():
      self.request_func()
    else:
      self.redirect_to(NotLoggedIn)
  return new_request_func