Рубрики
Без рубрики

Масонит фреймворк -учебная серия, часть 2 – маршрутизация

Учебное пособие по мазониту по маршрутизации. Tagged с Python, Framework, Masonite, учебными пособиями.

Теперь, когда у нас сделана установка, и наша Масонит Приложение работает, давайте поработаем над добавлением нескольких маршрутов в наше приложение.

Опять же, мы не будем строить конкретное приложение в этом уроке. Мы будем подробно рассмотреть каждую часть маршрута и говорить нам через него, объясняя предостережения, показывая разные варианты и т. Д.

В конце этой серии я сделаю видеоурок, используя эти текстовые учебники в качестве стенограммы. Если вы не хотите пропустить это или следующую учебную часть, дайте подписку!

Таким образом, простой маршрут нуждается в 3 основных частях: метод запроса, URI и контроллер. Мы перейдем к контроллерам в более позднем серии учебных пособий, но давайте сосредоточимся на том, чтобы копать очень глубоко в конкретно маршрутах, а затем мы сможем связать эти знания с контроллерами.

Все маршруты расположены в маршруты/web.py Анкет Все приложения имеют несколько разных понятий маршрутов. У нас могут быть маршруты API, маршруты HTTP, маршруты ресурсов, внутренние маршруты. Из -за этого масонит разбивает все нормальные маршруты HTTP, обращенные перед фронтом, и предлагает поместить его в этот файл в постоянную маршрутов.

В этом файле мы увидим какой -то код, который выглядит как:

from masonite.routes import Get, Post

ROUTES = [
    Get().route('/', 'WelcomeController@show').name('welcome')
]

В простейшей форме это то, что вы будете использовать для создания маршрутов. Давайте разберем его немного больше.

У нас есть Получить () Класс, который сообщает этому конкретному маршруту, что это … как вы уже догадались .. и получите маршрут. Этот класс принимает 2 параметра, URI (начиная с / ) и, в данном случае, строка, которая по умолчанию указывает класс с именем WelcomeController в app.http.controllers. WelcomeController Анкет Не все ваши контроллеры должны в этом каталоге Но это то, что это такое по умолчанию. Мы поговорим о том, как изменить это в более поздней части.

Наконец, у нас есть name () Метод, который принимает простую строку. Эта строка может быть чем угодно, некоторые люди могут делать что -то вроде:

..().name('welcome')
..().name('welcome.home')
..().name('welcome:message')

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

Мы не просто ограничены, чтобы получить и публиковать. Мы можем использовать любой метод запроса:

from masonite.routes import Get, Post, Put, Patch, Delete

ROUTES = [
    Get().route('/', 'WelcomeController@show').name('welcome')
    Post().route('/create', 'WelcomeController@create').name('welcome.create')
    Put().route('/update', 'WelcomeController@update').name('welcome.update')
    Patch().route('/update', 'WelcomeController@update').name('welcome.patch')
    Delete().route('/delete', 'WelcomeController@delete').name('welcome.delete')
]

Если вы строите конечную точку API, не стесняйтесь использовать любой из них. Вы также можете посмотреть в Вход масонита Пакет также, если вам интересно в строительстве API с масонитом.

Как и в любой структуре, мазонит имеет 2 понятия промежуточного программного обеспечения. Первая концепция – промежуточное программное обеспечение маршрута, а другая – промежуточное программное обеспечение HTTP. Поскольку это учебник по маршруту, мы просто поговорим о промежуточном программном обеспечении маршрута, но будем подробно рассказать о учебном пособии по промежутке.

Все промежуточное программное обеспечение определено в config/middleware.py и может использоваться в нашем маршруте выше, как SO:

..().name('welcome').middleware('auth', 'another', 'more')

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

Когда масонит загружает эти маршруты в контейнер, он выравнивает их. Это добавляет поддержку списков гнезда внутри Маршруты Список как так:

ROUTES = [
    Get('/', 'WelcomeController@show').name('welcome'),
    [
        Get.route('/another', 'AnotherController@show').name('another'),
    ]
]

Это совсем не очень полезно, но то, что мы можем сделать с этим, есть метод класса, который возвращает список, как SO:

# inside somefile.py

class AwesomeRoutes:

    def routes(self):
        return [
            Get().route('/another', 'AnotherController@show').name('another'),
        ]

а затем импортируйте его и используйте в этом списке маршрутов:

from somfile import AwesomeRoutes
ROUTES = [
    Get().route('/', 'WelcomeController@show').name('welcome'),
    AwesomeRoutes().routes(),
]

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

Я лично не использую занятия, потому что мне не нравится, как это выглядит. Вместо этого я использую помощников маршрута, которые являются простым сокращением подхода на основе класса и могут использоваться так:

from masonite.helpers.routes import get, post

ROUTES = [
    get('/', 'WelcomeController@show').name('welcome')
]

Просто немного сокращения Но я думаю, что это намного чище. Если вам нравится подход на основе капитализированного класса и хотите немного оба, мы можем сделать что -то вроде:

from masonite.helpers.routes import get as Get

ROUTES = [
    Get('/', 'WelcomeController@show').name('welcome')
]

Маршрутные группы

Мы также можем указать группы маршрутов, что является просто списком маршрутов, которые можно использовать, которые могут быть .. сгруппированы. Это полезно, если у вас есть куча похожих маршрутов и вы хотите сделать ваши маршруты более сухими.

Возьмите этот пример:

from masonite.helpers.routes import get

ROUTES = [
    get('/dashboard/user', ...)
    get('/dashboard/user/edit', ...)
    get('/dashboard/user/create', ...)
    get('/dashboard/profile', ...)
]

Обратите внимание, что все маршруты выглядят очень похожими. В этом случае мы должны сделать группу маршрутов:

from masonite.helpers.routes import get, group

ROUTES = [
    group('/dashboard', [
        get('/user', ...),
        get('/user/edit'),
        get('/user/create'),
        get('/user/profile'),
    ])
]

Эта функция маршрутов не была бы полезна, если бы мы не смогли динамически извлекать части URI. Для этого нам просто нужно поместить в @ Символ рядом с именем переменной, которое мы захотим использовать позже. Отличным примером будет:

from masonite.helpers.routes import get

ROUTES = [
    get('dashboard/user/@id/edit', ...),
]

Заметьте здесь, у нас есть @я бы В нашем списке маршрутов. Теперь мы сможем использовать я бы Ключ, чтобы получить все это значение. Мы поговорим о получении этого значения в следующем учебном пособии, когда говорим о контроллерах.

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

from masonite.helpers.routes import get

ROUTES = [
    get('dashboard/user/@id:int/edit', ...),
]

Это @ID: int Позвольте мазониту не соответствовать этому маршруту, если id это что -то кроме целого числа. Это будет соответствовать /dashboard/user/1/edit но не /Dashboard/User/Joe/Edit

Мы можем сделать то же самое для буквенно -цифровой строки:

from masonite.helpers.routes import get

ROUTES = [
    get('dashboard/user/@id:string/edit', ...),
]

Это будет соответствовать /Dashboard/User/Joe/Edit но не /Dashboard/User/1/Edit Анкет

Контроллер – это в основном просто класс с некоторыми методами. Если вы приезжаете из Джанго, то контроллеры масонита – это просто класс, обернутый вокруг видов на основе функций. Не все контроллеры будут расположены в app.http.controllers Таким образом, вы можете переместить их в несколько мест. Большинство людей делают их в свои собственные категории, где у вас есть такая структура:

app/
  http/
    controllers/
      Dashboard/
        SomeController.py
      Admin/
        SomeController.py
      Leagues/
        SomeController.py
      BaseController.py

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

from masonite.helpers.routes import get

ROUTES = [
    get(..., 'Dashboard.SomeController'),
]

Обратите внимание на Анкет обозначения здесь. Это говорит масониту, чтобы проверить app.http.controller каталог, но также внутри Панель инструментов модуль вместо базового каталога там.

Есть два способа указать контроллеры по всему миру. Если вы хотите выбраться из app.http.controller каталог все вместе и вместо этого захотите поместить свои контроллеры в такую структуру:

app/
  http/
    controllers/
      BaseController.py
controllers
  Dashboard/
    SomeController.py
  Admin/
    SomeController.py
  Leagues/
    SomeController.py

Затем мы можем указать «глобальный» контроллер, который, как по -прежнему, просто ищет контроллер, как если бы вы импортировали модуль:

from masonite.helpers.routes import get

ROUTES = [
    get(..., '/controllers.Dashboard.SomeController'),
]

Обратите внимание на простые / префикс.

Если вы хотите полностью выйти из мира контроллеров на основе струн, что я иногда делаю, особенно когда я разрабатываю пакеты, мы можем просто импортировать класс и указать его без строк:

from masonite.helpers.routes import get
from app.http.controllers.WelcomeController import WelcomeController

ROUTES = [
    get(..., WelcomeController.show),
]

Обратите внимание, что мы ничего не создали. Масонит найдет класс, метод и модуль самостоятельно. Мне лично нравится этот подход намного лучше, потому что он гораздо более четко. Нам не нужно беспокоиться о том, что строка способна неявно поднимать местоположение контроллера.

Субдомены чрезвычайно полезны для любого приложения, но мы фактически отключили их по умолчанию. Это потому, что некоторые службы развертывания, такие как Heroku, развертывают такие вещи, как Meadow-Fever-18273.herokuapp.com Анкет Это устанавливает поддомен на приложение, и вы не сможете показать ни один из своих маршрутов, пока не настраиваете пользовательское доменное имя.

Активация субдоменов

Чтобы активировать субдомены, нам просто нужно открыть любой из нашего поставщика услуг, который имеет wsgi = false свойство класса, и мы можем бросить это в метод ботинка:

def boot(self, Request):
    Request.activate_subdomains()

Как только мы активируем субдонии, теперь у нас есть доступ к их использованию!

Используя субдомены

Теперь мы можем просто установить домен для каждого маршрута, но используя Domain () Метод:

from masonite.helpers.routes import get

ROUTES = [
    get('/', 'WelcomeController@show').name('welcome'),
    get('/home', 'SomeController@show').domain('masonite').name('home'),
]

Теперь только /Главная Маршрут будет доступен для masonite.website.com а не сайт.com Анкет

Более распространенным вариантом использования является указание маршрута на всех доменах и принести домен позже в кодовой базе. Для этого мы можем использовать подстановочный знак звездочки, который поймает все субдомены:

from masonite.helpers.routes import get

ROUTES = [
    get('/', 'WelcomeController@show').name('welcome'),
    get('/home', 'SomeController@show').domain('*').name('home'),
]

Это поймает каждый субдомен, но не что -либо на сайт.com Анкет

Наконец, мы можем указать список конкретных субдоменов, к которым мы не должны подключаться:

from masonite.helpers.routes import get

ROUTES = [
    get('/', 'WelcomeController@show').name('welcome'),
    get('/home', 'SomeController@show').domain(['api', 'slack']).name('home'),
]

Это будет найдено на обоих api.website.com и Slack.website.com но не какой -либо другой субдомен или основной домен. В следующей части мы объясним, как получить эти значения внутри контроллера.

Вот и все для маршрутов! Далее мы поговорим об удивительном мире контроллеров и о том, как масонит действительно сияет от других веб -фреймворков Python.

Обязательно следуйте, чтобы не пропустить это и не забудьте проверить Масонит здесь ! Увидимся в следующий раз!

Оригинал: “https://dev.to/masonite/masonite-framework-tutorial-series-part-2—routing-1ak3”