воскресенье, 7 июня 2009 г.

django - url mapping

Стал разбираться с DJango, нашел интереснейшую идею.

Часто мы ходим по сайтам, и видим такую картину "www.shop.org/catalog?product_id=123". Другими словами какие-то параметры к странице передаются в виде GET запроса. Выглядит это не супер юзер френдли.

Представьте себе, если бы мне пришлось диктовать эту ссылку другому человеку по телефону :-)

А если бы URL-ы выглядели так? "www.shop.org/catalog/product_id/123/"
Смотрите, никаких GET-запросов! никаких непонятных знаков '?' и '='

Намного лучше!

Теперь буду стараться применять такие URL-ы везде где только смогу. Раньше даже в голову не приходило, что часть URL можно обрабатывать как параметр. В DJango это делается очень просто! наверняка и другие фреймворки данную фишку :-)

6 комментариев:

Sergei Tulentsev комментирует...

Поздравляю, это полезное колдунство.
А зацени-ка вот, как с этим обстоят дела в рельсах. :-)
Такая вот строчка:
map.resources :vk_users

Дает нам следующие роутинги
Название метода ( как выглядит урл ( пояснения
vk_users GET /vk_users(.:format) {:controller=>"vk_users", :action=>"index"}
POST /vk_users(.:format) {:controller=>"vk_users", :action=>"create"}
new_vk_user GET /vk_users/new(.:format) {:controller=>"vk_users", :action=>"new"}
edit_vk_user GET /vk_users/:id/edit(.:format) {:controller=>"vk_users", :action=>"edit"}
vk_user GET /vk_users/:id(.:format) {:controller=>"vk_users", :action=>"show"}
PUT /vk_users/:id(.:format) {:controller=>"vk_users", :action=>"update"}
DELETE /vk_users/:id(.:format) {:controller=>"vk_users", :action=>"destroy"}


А, красиво? :-)

Unknown комментирует...

А почему не MOD Rewrite?
Или это как раз оболочка к нему?

Михаил комментирует...

В Django философия такая "Красивое лучше некрасивого" :)

Alexander Lipatov комментирует...

CC, к сожалению, я не знаю, что такое "MOD Rewrite" :-) В django с помощью регулярных выражений все шаманство происходит :-) может и оболочка, я еще не разобрался в тонкостях

Сергей, запутанно выглядит для не рубиста, но я понял, что это пример URL-мэпинга, и вроде понял, как он работает :-) Мне кажется, что в джанго и рельсах примерно одинаково сделано

Михаил, ага, возможно потому, что его делали для газетчивов :-))

Unknown комментирует...

Сорри. Ни о каком mod-rewrite речи идти не может, т.к. это касаеться Апача (через него в Апаче делаеться тоже самое).

А я просто забыл что это не единственный веб-сервер в мире :)))

Unknown комментирует...

В рельсах как то не особо красиво получается ;)

В Django намного красивее. Хотя идеология указания контроллера и экшина, очень располагает на понимание.

Однако
urlpatterns = patterns('',
url(r'^registration/$',views.registration),
url(r'^login/$', views.login),
url(r'^logout/$', views.logout),

выглядит красивее )).