簡體   English   中英

如何重構此Python代碼?

[英]How to refactor this Python code?

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))

確實,這取決於您期望將來在這兩個類之間有什么共同點。 重構的目的是識別常見的抽象,而不是減少代碼行的數量。

也就是說,假設這兩個請求僅在模板中有所不同:

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'

重構出於什么目的? 您是否遇到錯誤,想要做其他事情,還是...? 假設對此進行了適當的導入和url調度,我在這里看不到必須為應用引擎重構的任何內容-因此,請不要讓我們猜測!-)

由於除了一個字符串('index.html'與'gadget.xml')以外,這兩個類都是相同的,是否有可能使一個成為另一個的子類,並在一個字符串中將一個字符串作為一個類常量?

使它成為同一類,並使用GET或POST參數來決定要呈現的模板。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM