Я по-прежнему новичок в python с менее чем за год опыта, и я изучал его, создав довольно большой проект в Google App Engine. Он вырос как behemoth из 10k + строк кода и html-шаблонов, поэтому я занимаюсь реорганизацией довольно большой части кода, чтобы следовать гораздо более строгой архитектуре MVC.Сделать метод класса «Шаблон» в GAE Python
Мой вопрос один относительно python напрямую. Я не знаю слов, чтобы точно сказать, что я хочу построить, поэтому просто хотел бы использовать пример.
Это мой текущий «базовый» код для отображения вида:
class MainHandler(webapp.RequestHandler):
def get(self):
tUser = users.get_current_user()
tContext = {
'user': tUser,
'login': users.create_login_url(self.request.uri),
'logout': users.create_logout_url(self.request.uri),
}
#User is logged in
if (tUser):
#code for loading view information and adding to the context dict
#CUSTOMIZATION GOES HERE
else:
self.redirect("/")
tmpl = os.path.join(os.path.dirname(__file__), 'logged-in.html')
self.response.out.write(render(tmpl, tContext))
Я хотел бы принять этот шаблонный код и абстрактно это как-то, может быть, с пути Предварением/Добавляя «настраиваемую «код для каждого метода класса?
Я думаю, что смогу использовать декоратор, чтобы сделать это как-то, но у меня нет наставников python вне stackoverflow, чтобы указать мне в правильном направлении. Я предпочел бы самый пифонический метод, или, по крайней мере, то, что обычно считается «передовой практикой» в этой ситуации.
Версия для python - 2.7.2.
редактировать
Обратите внимание, если я могу сделать это с помощью декораторов, то, что нужно для меня, чтобы быть в состоянии назвать декоратор из совершенно другого класса и питона файл? Я бы хотел, чтобы мои декораторы были в одном файле и ссылались на него из другого места, поэтому мой код нормализуется, насколько это разумно. =)
редактировать 2
Это тестирование кода, который я разработал в консоли, и я должен оставить на вечер, или я бы уточнить его больше. Тем не менее, похоже, что это успешно обращается и изменяет свойства класса, что в значительной степени является тем, что, как мне кажется, вам нужно сделать в GAE.
class Decorators():
@staticmethod
def BeginInit(pInFunction):
def OutFunction1(self):
print str(self.innerv)
pInFunction(self)
return OutFunction1
@staticmethod
def EndInit(pInFunction):
def OutFunction2(self):
self.innerv = 5
pInFunction(self)
print "this is test 3"
return OutFunction2
class Test2Handler():
innerv = 10
@Decorators.BeginInit
@Decorators.EndInit
def TestPrint(self):
print self.innerv
print "this is test 2"
Печать
10
5
this is test 2
this is test 3
Интересно, да это также будет работать. знак равно –