Механизм Приложения Google - Как я разделяю код на несколько файлов? (веб-приложение)

У меня есть вопрос о разделении main.py файла.

прямо сейчас у меня есть все в моем main.py. У меня нет никаких других .py файлов. И я всегда должен прокручивать длинные строки кода прежде, чем достигнуть раздела, который я хочу отредактировать.

Как я разделяю его? (я собираюсь иметь больше чем 20 страниц, так, чтобы средства, main.py будет ОГРОМЕН, если я не разделю его.

PS: также, я заметил, что должен был установить шаблонные значения, путь к шаблону, и назвать template.render каждым разом. Какой-либо способ сократить их всех?

Код:

    # everything here in main.py
class MainPage(webapp.RequestHandler):
    def get(self):
        # Models are queried here, results transferred to template_values

        template_values = {
            'value1': value1,
            'value2': value2,
            'value3': value3,
            }

        path = os.path.join(os.path.dirname(__file__), 'index.html')
        self.response.out.write(template.render(path, template_values))

class Page2(webapp.RequestHandler):
    def get(self):
        # Models are queried here, results transferred to template_values

        template_values = {
            'value1': value1,
            'value2': value2,
            'value3': value3,
            }

        path = os.path.join(os.path.dirname(__file__), 'index.html')
        self.response.out.write(template.render(path, template_values))

class Page3(webapp.RequestHandler):
    def get(self):
        # Models are queried here, results transferred to template_values

        template_values = {
            'value1': value1,
            'value2': value2,
            'value3': value3,
            }

        path = os.path.join(os.path.dirname(__file__), 'index.html')
        self.response.out.write(template.render(path, template_values))


application = webapp.WSGIApplication(
                                     [('/', MainPage),
                                      ('/page2', Page2)
                                      ('/page3', Page3)],
                                     debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()
15
задан bernie 27 December 2009 в 20:54
поделиться

3 ответа

Разделение кода ничем не отличается от разделения кода для любого приложения на Python - найдите кучу связанного кода, который вы хотите переместить в другой файл, переместите его в этот файл и импортируйте его в основной файл обработчика.

Например, вы можете переместить код Page2 на страницу 2. py, положить

import page2

вверх вашего файла и изменить отображение, чтобы загрузить /page2 из page2.Page2 (в этом случае вы можете захотеть переименовать эти классы....

Или же вы можете иметь отдельные .py-файлы, обрабатывающие различные (группы) страниц, отредактировав файл app.yaml, как описано в Script Handlers.

Вы можете обернуть свои шаблоны -работать с кодом в удобной функции и вызывать его, чтобы немного уменьшить количество повторений кода. Вы можете упростить загрузку значений шаблонов, но как только вы захотите отрисовать, вы можете вызвать метод что-то вроде

def render(template_file, template_values):
    path = os.path.join(os.path.dirname(__file__), template_file)
    self.response.out.write(template.render(path, template_values))

Это не сильно экономит, но немного более читабельно. Возможно, вы захотите переместить render в другой файл и импортировать его туда, где вы хотите.

.
22
ответ дан 1 December 2019 в 03:04
поделиться

Определите свои классы в других .py файлах и используйте "импорт" для их использования в main.py. На самом деле это довольно просто.

2
ответ дан 1 December 2019 в 03:04
поделиться

для входа, действительно ценю их.

Что касается группировки импорта, я пытался сохранить все импорты, связанные с App-engine, в .py файл под названием ext.py

Затем я называл его везде, где хотел использовать его этой строкой:

from ext import *

ext.py содержит следующее:

import os

# import from appengine's libs
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext.webapp import template
from google.appengine.ext import db

# import models
from models import *
0
ответ дан 1 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: