2010-09-11 17 views
2

Je suis nouveau sur django et Google App Engine, et j'ai de la difficulté à utiliser le magasin de données. Chaque fois que je fais une requête, commeL'objet 'WSGIRequest' n'a pas d'attribut 'utilisateur' dans Google App Engine

db.GqlQuery("SELECT * FROM Listing ORDER BY date DESC LIMIT 10") 

Je reçois l'erreur:

'WSGIRequest' object has no attribute 'user' 

Cette erreur semble être généré en context_processors.py dans le noyau de django. Maintenant, le conseil que j'ai trouvé sur Internet a dit de commenter INSTALLED_APPS liés aux utilisateurs et MIDDLEWARE_CLASSES, mais cela ne semble pas aider. Mon code ressemble à ceci:

MIDDLEWARE_CLASSES = (
# 'django.middleware.common.CommonMiddleware', 
# 'django.contrib.sessions.middleware.SessionMiddleware', 
# 'django.contrib.auth.middleware.AuthenticationMiddleware', 
# 'django.middleware.doc.XViewMiddleware', 
) 

INSTALLED_APPS = (
# 'django.contrib.auth', 
    'django.contrib.contenttypes', 
# 'django.contrib.sessions', 
    'django.contrib.sites', 
) 

Mon objet Liste est définie comme ce qui suit (il avait une propriété de l'auteur plus tôt, mais cela est maintenant commenté et l'objet a été redéfinie avec un nouveau nom):

class Listing(db.Model): 
    #author = db.UserProperty() 
    address = db.StringProperty() 
    date = db.DateTimeProperty(auto_now_add=True) 
    coords = db.GeoPtProperty() 

Est-ce que quelqu'un sait ce qui cause cette erreur, et comment la réparer? Est-ce qu'il est peut-être nécessaire de réinitialiser les paramètres?

+0

S'il vous plaît inclure le stacktrace d'exception. –

+1

Si vous avez supprimé toutes les applications d'authentification, vous devrez également commenter le processeur de contexte d'authentification défini dans 'CONTEXT_PROCESSORS'. – sdolan

Répondre

1

MISE À JOUR

La solution proposée par sdolan semble être d'ajouter ce qui suit à l'settings.py de l'application:

TEMPLATE_CONTEXT_PROCESSORS = ( "django.core.context_processors.debug", « django.core.context_processors.i18n »)

Cette efficacité supprime le troisième processeur par défaut, django.core.context_processors.auth (qui ne devrait pas être là être cause pour AppEngine nous ne voulons pas le composant auth de Django).

Merci, sdolan, pour la solution! J'espère que quelqu'un d'autre peut l'utiliser aussi. :)

@ Nick, je pense qu'il vaut la peine de mettre ce morceau d'or à propos CONTEXT_PROCESSORS dans le tutoriel (http://code.google.com/appengine/articles/django.html)

(suivi originale à la question)

ont le même problème, à la recherche pour la solution .... Tout fonctionne très bien quand settings.py contient

DEBUG = True

mais cette erreur apparaît (et tue ma motivation pour poursuivre l'apprentissage) lorsque je passe à

DEBUG = False

@ Nick Johnson, voici la trace de la pile:

Traceback (most recent call last): 
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3211, in _HandleRequest 
    self._Dispatch(dispatcher, self.rfile, outfile, env_dict) 
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 3154, in _Dispatch 
    base_env_dict=env_dict) 
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 527, in Dispatch 
    base_env_dict=base_env_dict) 
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2404, in Dispatch 
    self._module_dict) 
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2314, in ExecuteCGI 
    reset_modules = exec_script(handler_path, cgi_path, hook) 
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\dev_appserver.py", line 2212, in ExecuteOrImportScript 
    script_module.main() 
    File "C:\Dev\appengine\djangotest\main.py", line 37, in main 
    util.run_wsgi_app(application) 
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\webapp\util.py", line 97, in run_wsgi_app 
    run_bare_wsgi_app(add_wsgi_middleware(application)) 
    File "C:\Program Files (x86)\Google\google_appengine\google\appengine\ext\webapp\util.py", line 115, in run_bare_wsgi_app 
    result = application(env, _start_response) 
    File "C:\Program Files (x86)\Google\google_appengine\lib\django\django\core\handlers\wsgi.py", line 189, in __call__ 
    response = self.get_response(request) 
    File "C:\Program Files (x86)\Google\google_appengine\lib\django\django\core\handlers\base.py", line 103, in get_response 
    return callback(request, **param_dict) 
    File "C:\Program Files (x86)\Google\google_appengine\lib\django\django\views\defaults.py", line 79, in page_not_found 
    return http.HttpResponseNotFound(t.render(RequestContext(request, {'request_path': request.path}))) 
    File "C:\Program Files (x86)\Google\google_appengine\lib\django\django\template\context.py", line 100, in __init__ 
    self.update(processor(request)) 
    File "C:\Program Files (x86)\Google\google_appengine\lib\django\django\core\context_processors.py", line 18, in auth 
    'user': request.user, 
AttributeError: 'WSGIRequest' object has no attribute 'user' 
+0

Merci - Je n'ai jamais répondu avec la trace de la pile, puisque j'ai abandonné GAE (et refait tout le code approprié) avant que quelqu'un ne rajoute un commentaire. –