Question

I will dive straight into the code of the application I'm developing using Google App Engine in Python:

import os
import webapp2
import jinja2
from google.appengine.ext import db

template_dir = os.path.join(os.path.dirname(__file__), 'templates')
jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir), autoescape=True)

class Handler(webapp2.RequestHandler):
    def write(self, *a, **kw):
        self.response.out.write(*a, **kw)
    def render_str(self, template, **params):
        t = jinja_env.get_template(template)
        return t.render(params)
    def render(self, template, **kw):
        self.write(self.render_str(template, **kw))

class Users(db.Model):
    name = db.StringProperty(required = True)
    password = db.StringProperty(required = True)
    email = db.EmailProperty(required = True)
    address = db.PostalAddressProperty(required = True)
    join_date = db.DateTimeProperty(auto_now_add = True)
    dob = db.DateTimeProperty()
    phone = db.PhoneNumberProperty()    

class Orders(db.Model):
    name = db.StringProperty(required = True)
    email = db.EmailProperty(required = True)
    address = db.PostalAddressProperty(required = True)

class MainPage(Handler):
    def get(self):
        self.render("home.html")

class Register(Handler):
    def get(self):
        self.render("signup-form.html")
    def post(self):
        name = self.request.get("username")
        password = self.request.get("password")
        verify = self.request.get("verify")
        email = self.request.get("email")
        address = self.request.get("address")
        phone = self.request.get("phone")

        a = Users(name = name, password = password, email = email, address = address, phone = phone)
        a.put()
        self.response.write("Registration successful!")

class MP(Handler):
    def get(self):
        self.render("mp.html")
    def post(self):
        self.render("order2.html")

class Order2Login(Handler, Register):
    def get(self):
        self.render("orderlogin.html")
    def post(self):
        old_usr = self.request.get("loginname")
        old_pwd = self.request.get("loginpwd")
        ans = a.filter("name =", old_usr).filter("password =", old_pwd)
        if ans:
            self.response.write("You are a registered member!")
        else:
            self.response.write("You are NOT registered.")

class Order2New(Handler):
    def get(self):
        self.response.write("New user yeah")        

app = webapp2.WSGIApplication([('/', MainPage),
                                ('/register', Register),
                                ('/mp', MP),
                                ('/order2new', Order2New),
                                ('/order2login', Order2Login)], debug=True)

Now, in the Order2Login class, I needed to access the database object 'a' so that I can confirm whether a user is already a member of my website. Now, for that, I inherited the Register class in my Order2Login class, since the 'a' object was initially created in the Register class.

However, after running my application on my local machine, I get the following error:

TypeError: Error when calling the metaclass bases

    Cannot create a consistent method resolution

order (MRO) for bases Handler, Register

What seems to be the problem in my code?

Était-ce utile?

La solution

Inheriting like that doesn't make any sense at all. Even apart from the metaclass problem, inheriting wouldn't make that variable available anyway, since it's a local variable. And in any case, these are two completely separate requests, so data does not persist between them.

But I have no idea why you think you need access to that variable in any case. The User object was persisted to the datastore: in the login view, you don't want to query a, which is a single instance and doesn't have a filter method anyway, you want to query the User class.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top