2009-10-26 5 views
0

Je suis très nouveau sur python et après une brève introduction sur python + moteur d'application Google, j'ai commencé à travailler sur un projet pilote. J'ai téléchargé deux entités UserDetails et PhoneBook avec des données sur le moteur de l'application. Maintenant, dans mon interface utilisateur, j'essaie d'abord d'entrer le nom de l'utilisateur, puis l'interroger pour obtenir l'identifiant de UserDetails, puis d'utiliser l'identifiant de l'utilisateur récupéré que j'interroge le répertoire pour obtenir les entrées de son répertoire. Voici mon code pour l'interface utilisateur,Problème lors de l'importation de classes à partir du fichier de modèles dans GAE

#!/usr/bin/env python 

import wsgiref.handlers 
from google.appengine.ext import db 
from google.appengine.ext import webapp 
from google.appengine.ext.webapp import template 
from models import UserDetails,PhoneBook 
#import models 

class showPhoneBook(db.Model): 
    """ class to store the user_name to db """ 
    user_name = db.StringProperty(required=True) 

class MyHandler(webapp.RequestHandler): 
    def get(self): 
     """ Query type 1 """ 
     #p = db.GqlQuery('SELECT * FROM UserDetails WHERE user_name = :1', user_name) 

     """ Query type 2 """ 
     #p = UserDetails.gql('WHERE user_name = :1', user_name) 

     """ Query type 3 """ 
     p = UserDetails.all().filter('user_name = ', user_name) 
     result1 = p.get() 
     for itr1 in result1: 
      userId = itr.user_id 

     """ Query type 1 """  
     #q = db.GqlQuery('SELECT * FROM PhoneBook WHERE user_id = :1', userId) 

     """ Query type 2 """ 
     #q = PhoneBook.gql('WHERE user_id = :1', userId) 

     """ Query type 3 """ 
     q = PhoneBook.all().filter('user_id = ', userId) 
     values = { 
      'phoneBookValues': q 
     } 
     self.response.out.write(
      template.render('phonebook.html', values)) 
    def post(self): 
     phoneBookuserID = showPhoneBook(
      user_name = self.request.get('username')) 
     phonebookuserID.put() 
     self.redirect('/') 

def main(): 
    app = webapp.WSGIApplication([ 
     (r'.*',MyHandler)], debug=True) 
    wsgiref.handlers.CGIHandler().run(app) 

if __name__ == "__main__": 
    main() 

Le problème est que je reçois cette erreur dans mes journaux que GAE ne peut pas importer les UserDetails/classe de téléphone à partir de modèles,

<type 'exceptions.ImportError'>: cannot import name UserDetails 
Traceback (most recent call last): 
    File "/base/data/home/apps/bulkloader160by2/1-4.337299749289926105/main.py", line 7, in <module> 
    from models import UserDetails,PhoneBook 

et quand je supprimer from models import UserDetails,PhoneBook et utiliser import models, je reçois,

global name 'UserDetails' is not defined 
Traceback (most recent call last): 
    File "/base/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 507, in __call__ 
    handler.get(*groups) 
    File "/base/data/home/apps/bulkloader160by2/1-4.337300095868541686/main.py", line 19, in get 
    p = UserDetails.all().filter('user_name = ', user_name) 
NameError: global name 'UserDetails' is not defined 

Ceci est mon fichier models.py où j'ai mes UserDetails et les classes définies de l'annuaire téléphonique. J'ai stocké ce fichier dans le répertoire racine.

#!/usr/bin/env python 

from google.appengine.ext import db 

#Table structure of User Details table 
class UserDetails(db.Model): 
    user_id = db.IntegerProperty(required = True) 
    user_name = db.StringProperty(required = True) 
    mobile_number = db.PhoneNumberProperty(required = True) 

#Table structure of Phone Book table 
class PhoneBook(db.Model): 
    contact_id = db.IntegerProperty(required=True) 
    user_id = db.IntegerProperty(required=True) 
    contact_name = db.StringProperty(required=True) 
    contact_number = db.PhoneNumberProperty(required=True) 

Étant nouveau python Je ne suis pas en mesure de comprendre pourquoi ne suis pas en mesure d'importer mes classes de mon fichier models.py et comment définir/obtenir le user_name post(self)-get(self). S'il vous plaît pardonnez-moi si je suis naïf, mais votre aide est la plus appréciée si vous pouvez m'aider à régler correctement mon code.

Merci.

+0

mis à jour ma réponse. –

Répondre

1

La première erreur que vous obtenez se produit lorsqu'il peut importer le module ('models') correctement, mais ne peut pas trouver le membre ('UserDetails') dedans. Ce serait généralement le cas si vous aviez mal saisi le nom de la classe ou si vous ne l'aviez pas défini dans ce module. La deuxième erreur est attendue, car vous importez le module 'models', mais en essayant de vous référer à UserDetails par son nom non qualifié - vous devez vous référer à 'models.UserDetails' si vous importez juste le module. En fonction du code que vous avez fourni, cependant, je ne vois rien de mal, ce qui me porte à croire que c'est quelque chose que vous avez changé pour les extraits que vous avez collés. Vérifiez que UserDetails est correctement défini dans votre fichier models.py. Vous pouvez également les opérations suivantes:

import models 
logging.warn(models.__file__) 

Cela vous montrera le chemin vers le module modèles, qui vous permettra de vérifier qu'il n'y a pas un autre module du même nom quelque part que vous accidentellement l'importation à la place.

0

Si models.py est dans un sous-répertoire, vous devrez peut-être ajouter au chemin du système, tels que:

sys.path.append(os.path.join(os.path.dirname(__file__), "lib")) 

Si des modèles est le répertoire et les classes sont en UserDetails.py etc. vous pouvez doivent:

sys.path.append(os.path.join(os.path.dirname(__file__), "models")) 
import UserDetails 
+0

Je pense que votre première ligne de code pourrait vous aider. BTW pouvez-vous m'expliquer où ajouter votre code dans mon fichier main.py? – Arun

Questions connexes