Google App Engine: URL-пути на основе заголовка для сущностей

Я хотел бы создать URL-адреса для сущностей на основе их названий.

Например, если название объекта "Книга" - "Ромео и Джульетта", я бы хотел, чтобы пути URL были

http://example.com/book/romeo-and-juliet

Кроме того, как бы я обработал этот путь URL, если название книги "Ромео и Джульетта". Наконец, рекомендуется использовать этот подход, или я должен просто создать URL-пути, используя идентификатор объекта, например:

http://example.com/book/4644337115725824

Благодарен за любой совет.

1 ответ

Решение

Зависит от того, как вы получаете книгу. Движок приложения использует ndb, и ключ для каждой книги должен быть уникальным. Так что будет разница между "Ромео и Джульетта" и "Ромео и Джульетта".

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

Подход был бы использовать оба. Сгенерированный идентификатор и название как

/12345678/mybook

Согласно вашему комментарию, вы не озадачены несправедливостью, но SEO и URL-дружественных строк. Я рекомендую поиск по этому вопросу, и вы найдете больше, чем вам нужно. Я не эксперт по URL URL firendly, но они громоздки, и им нужно избегать правил и т. Д.

например, "romeo & juliet" нужно будет экранировать из-за пробелов и "&".

Итак, в конечном итоге вы создаете соглашения для вашего приложения. Вот простое правило для вас:

  1. Заменить '&' на 'и' на заголовках
  2. Заменить ' ' (пробелы) на подчеркивание '_'
  3. ...

Таким образом, вы получите "romeo_and_juliet", которое гораздо более дружественно по отношению к URL, чем "romeo & juliet".

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

encoded_param = urllib.urlencode(book_title)

Мне нравится использовать URL, как

/books/[key]/romeo_and_juliet

где [ключ] книга keyлибо строка, либо идентификатор.

Другие вопросы по тегам