class MainPage(webapp.RequestHandler):
  def get(self):
    user = users.get_current_user()
    tasks_query = Task.all()
    tasks = tasks_query.fetch(1000)
    if user:
      url = users.create_logout_url(self.request.uri)
    else:
      url = users.create_login_url(self.request.uri)
    template_values = {
      'tasks': tasks,
      'url': url
      }
    path = os.path.join(os.path.dirname(__file__), 'index.html')
    self.response.out.write(template.render(path, template_values))

class Gadget(webapp.RequestHandler):
  def get(self):
    user = users.get_current_user()
    tasks_query = Task.all()
    tasks = tasks_query.fetch(1000)
    if user:
      url = users.create_logout_url(self.request.uri)
    else:
      url = users.create_login_url(self.request.uri)
    template_values = {
      'tasks': tasks,
      'url': url
      }
    path = os.path.join(os.path.dirname(__file__), 'gadget.xml')
    self.response.out.write(template.render(path, template_values))
0
Jader Dias 24 jul. 2009 a las 03:26

4 respuestas

La mejor respuesta

Realmente depende de lo que esperas que sea común entre las dos clases en el futuro. El propósito de la refactorización es identificar abstracciones comunes, no minimizar el número de líneas de código.

Dicho esto, suponiendo que se espera que las dos solicitudes difieran solo en la plantilla:

class TaskListPage(webapp.RequestHandler):
    def get(self):
        user = users.get_current_user()
        tasks_query = Task.all()
        tasks = tasks_query.fetch(1000)
        if user:
          url = users.create_logout_url(self.request.uri)
        else:
          url = users.create_login_url(self.request.uri)
        template_values = {
          'tasks': tasks,
          'url': url
          }
        path = os.path.join(os.path.dirname(__file__), self.template_name())
        self.response.out.write(template.render(path, template_values))

class MainPage(TaskListPage):
    def template_name(self):
        return 'index.html'

class Gadget(TaskListPage):
    def template_name(self):
        return 'gadget.xml'
6
Jader Dias 24 jul. 2009 a las 02:02

Refactorizar para qué fines? ¿Recibes errores, quieres hacer otra cosa o ...? Suponiendo las importaciones correctas y el envío de url alrededor de esto, no veo nada aquí que tenga que ser refactorizado para el motor de la aplicación, ¡así que no nos hagas adivinar!)

1
Alex Martelli 24 jul. 2009 a las 00:44

Dado que ambas clases son idénticas, excepto por una cadena ('index.html' vs 'gadget.xml'), ¿sería posible convertir una en una subclase de la otra y tener esa cadena como una constante de clase en ambas?

1
Jake 24 jul. 2009 a las 01:20

Conviértalo en la misma clase y use un parámetro GET o POST para decidir qué plantilla renderizar.

1
EmilyS 24 jul. 2009 a las 01:22