ФорумПрограммированиеPythonDjango → помагите чайнику

помагите чайнику

  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 27 ноября 2011 г. 10:16

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


    1. Настройка сервера. Делаю так (в одном каталоге):
    ./project/ - здесь код на питоне. здесь тестовый сервак запускаю (./manage.py runserver)
    ./templates/ - здесь шаблоны, чтобы дизайнеры вообще в project не лезли.
    ./www/ - здесь картинки, стили и вобщем вся статика.

    И в nginx.conf:

    server {

    root …/www;

    location ~ ^/(i|css|js) {
    }

    location / { # всё кроме статики проксирую на джаного-сервер
    proxy_pass http://django; # здесь тестовый сервер, на продакшене видимо fastcgi какой-то

    }

    }


    Это правильно или есть более рассово верные пути?


    2. Несколько url под одну регулярку.
    Есть на сайте модели - Country (страны) и City (города). Урлы у них такие:
    site.loc/russia/ - страна
    site.loc/moscow/ - город
    то есть один каталог латиницей и "-".
    На этапе разбора регуляркой никак выяснить страна это или город нельзя.
    Делаю так:


    # urls.py
    from django.conf.urls.defaults import *
    from hotel.hotels import views

    urlpatterns = patterns('',
    (r'^([a-z0-9_-]+)/$', views.country_or_city),
    )


    во вьюхах:

    def country_or_city(request, url):
    try:
    ocountry = Country.objects.get(url=url)
    except Country.DoesNotExist:
    pass
    else:
    return country(request, ocountry)

    try:
    ocity = City.objects.get(url=url)
    except City.DoesNotExist:
    pass
    else:
    return city(request, ocity);

    raise Http404

    def country(request, url = None, ocountry = None):


    def city(request, url = None, ocity = None):



    Как разрулить ситуацию более изящно?

    Мне правильным кажется решение:

    urlpatterns = patterns('',
    (r'^([a-z0-9_-]+)/$', views.country),
    (r'^([a-z0-9_-]+)/$', views.city),
    )

    Если country не находит нужной страны, то отплёвывает какой-то результат типа "это не моё" и поиск нужной вьюхи идёт дальше.
    В джанге есть что-либо подобное?


    3. Контроллер слоя. Вот есть, допустим, сайт. Справа облака "по жанрам", "по годам". И так на нескольких страницах.
    Это понятно - есть контент конкретной страницы, а есть общий слой, в котором отрисовываются эти страницы.

    Как в шаблонах организовать деление на страница/шаблон понятно - наследование шаблонов там есть.
    А как быть с вьюхо-контроллерами? Данные для этих облаков нужно из моделей выбирать и в шаблон передавать. Делать это для каждой вьюхи?


    4. Конфиги для разных платформ. Есть вот settings.py и в нём конфигурация базы прописана.
    А если у меня на локалке одни параметры, а на продакшене, где тот же код работает, другие.

    Как это решается?


    5. Конфиги для модулей. В settings.py настройки самого Django. А что делать с самописными модулями? Пихать каждому свой settings.py? Валить всё в глобальный settings.py?


    6. Формирование адресов страниц.
    Есть страница (новость): /news/2011/11/27/ololo/

    Как правильно вставлять подобные ссылки?
    Формировать из всего говна прямо в шаблоне?
    Формировать во вьюхе?
    Добавить в модель News метод getPageUrl()?

    Душа просит какого-нибудь UrlBuilder'а, где бы все ссылки шаблонами прописывались.
    Тем более, что шаблоны по сути уже есть - это регулярки в url.py.
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 27 ноября 2011 г. 10:42, спустя 25 минут 47 секунд

    location ~ ^/(i|css|js) {
       }




    location ~ ^/(i|css|js) {
    access_log off;
    expires 30d
    }
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 27 ноября 2011 г. 10:48, спустя 6 минут 2 секунды


    location ~ ^/(i|css|js) {
       }




    location ~ ^/(i|css|js) {
    access_log off;
    expires 30d
    }

    желательно не только аццесс лог выключать, но и вообще все логи отключать )
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 27 ноября 2011 г. 11:07, спустя 18 минут 36 секунд

    Как разрулить ситуацию более изящно?

    в джанге нет forward'а? из одного контроллера/экшена форвардим на другой
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 27 ноября 2011 г. 11:11, спустя 3 минуты 50 секунд


    Как разрулить ситуацию более изящно?

    в джанге нет forward'а? из одного контроллера/экшена форвардим на другой
    почему мне не нравится данный прием? Меня от него воротит, шо пиздец.. :)
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 27 ноября 2011 г. 11:13, спустя 1 минуту 55 секунд

    почему мне не нравится данный прием?

    а это я у тебя хотел спросить
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 27 ноября 2011 г. 11:16, спустя 3 минуты 20 секунд

    а это я у тебя хотел спросить

    ну у меня как то мозг противится тому что контроллер начинает играть роль роутера…
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 27 ноября 2011 г. 11:19, спустя 2 минуты 41 секунду

    в джанге нет forward'а? из одного контроллера/экшена форвардим на другой

    хз что в джанге есть )
    а это как, прямо из контроллера указывать в какой контроллер дальше идти?
  • Sinkler

    Сообщения: 8096 Репутация: N Группа: в ухо

    Spritz 27 ноября 2011 г. 11:19, спустя 12 секунд

    ну у меня как то мозг противится тому что контроллер начинает играть роль роутера…

    да ну
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 27 ноября 2011 г. 11:25, спустя 6 минут

    а это как, прямо из контроллера указывать в какой контроллер дальше идти?

    Да
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 27 ноября 2011 г. 11:27, спустя 1 минуту 45 секунд

    а это как, прямо из контроллера указывать в какой контроллер дальше идти?

    ну например в зенде http://framework.zend.com/manual/en/zend.controller.action.html#zend.controller.action.prepostdispatch
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 27 ноября 2011 г. 11:27, спустя 34 секунды

    зачем контроллеру "Страна" знать, что есть ещё контроллер "Город", и формат его урла совпадает со страной, и он ещё не был проверен?
    это получается практически тоже, что и я написал.
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 27 ноября 2011 г. 11:33, спустя 5 минут 53 секунды

    1)
    Это правильно или есть более рассово верные пути?
    неправильно.
    Правильно иметь в каждом application по templates и static, далее собирать static в одно через ./manage.py collectstatic
    https://docs.djangoproject.com/en/dev/howto/static-files/
    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 27 ноября 2011 г. 11:38, спустя 5 минут 19 секунд


    Как разрулить ситуацию более изящно?

    в джанге нет forward'а? из одного контроллера/экшена форвардим на другой
    есть https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse
    adw/0
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 27 ноября 2011 г. 11:48, спустя 9 минут 32 секунды

    есть https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse

    это и есть единственно верное решение моего вопроса?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!