Ответы пользователя по тегу Django
  • Как сделать вход на сайт Django только после авторизации?

    syschel
    @syschel
    freelance/python/django/backend
    Принудительная авторизация:

    project/middleware.py
    from django.core.urlresolvers import reverse
    from django.http import HttpResponseRedirect
    
    class ValidLogin(object):
    
        def process_request(request):
            if not request.user.is_authenticated():
                return HttpResponseRedirect(reverse('signin'))
            return None


    project/settings.py
    MIDDLEWARE_CLASSES = (
        'project.middleware.ValidLogin',
    )


    А раздача прав уже или на уровне url`ов или на уровне вьюх.
    В урлах можно так

    from django.conf.urls import patterns, url
    from django.contrib.auth.decorators import user_passes_test
    urlpatterns = patterns('crm.views',
        url(r'^$', 
            user_passes_test(lambda u: u.is_superuser or u.is_moderator)(HomeCRM.as_view()),
            name='home'),
    )


    Если просто авторизацию через урлы, то так:
    from django.contrib.auth.decorators import login_required
    urlpatterns = patterns('crm.views',
        url(r'^$', 
            login_required(HomeCRM.as_view()),
            name='home'),
    )

    Но это каждую строку урла проверять на авторизацию... А потом ещё думать как реализовать права по грппам. Проще как выше, через middleware авторизацию проверять и слать на форму входа.
    Ответ написан
    3 комментария
  • Как подтягивать картинки в Python-Django через media?

    syschel
    @syschel
    freelance/python/django/backend
    Serving files uploaded by a user during development.

    На продакшене статик и медиа работают через нджинкс/апач, без участия джанги.
    На девелоп сервере, под runserver нужно в урлах прописывать доп настройки.
    Ответ написан
    Комментировать
  • Как правильно сгруппировать queryset?

    syschel
    @syschel
    freelance/python/django/backend
    related_name

    models.py
    manufacturer = models.ForeignKey('Manufacturer', related_name='cars')

    views.py
    m = Manufacturer.objects.filter(...)

    template.html
    {% for man in m %}
    <h1>{{ man.name }}</h1>
       {% for car in man.cars.all %}
            <p>{{ car.name }}</p>
        {% endfor %}
    {% endfor %}


    Или как Максим Чернятевич указал
    Главное что достаём мануфактуры и их выводим. А в них уже обратной связью подтягиваются авто.
    Ответ написан
    1 комментарий
  • Django-registration-redux. Как привязать другие модели?

    syschel
    @syschel
    freelance/python/django/backend
    1. Если вы только учитесь. Старайтесь как можно меньше использовать батарейки. Регистрация очень просто делается голой джангой. Плюс даёт понимание многих внутренних механизмов. Советую снести батарейку и сделать ручками.

    2. Вы не верно понимаете принципы(логику). Личный кабинет, ничем не отличается от любой другой страницы сайта. Тот же функционал. Задайтесь вопросом: "что делает юзер в ЛК?". И получите ответ: "он добавляет статьи, картинки и взаимодействует с юзерами(комментарии, лайки)". То есть он в ЛК управляет объектами "стати", "картинки", "комментарии", "лайки". Для этого уже есть модели? Есть! Что делает в ЛК юзер? Добавляет, редактирует, удаляет эти объекты, но только те их единицы, которые он может по привилегиям (владелец, модератор). Зачем тут какие-то ещё модели? Не зачем! Почему такой вопрос задан? Потому что вы не знаете джангу, а пользуетесь готовыми батарейками. Почему так? Потому что вы не хотите учиться. :-)
    Ответ написан
    5 комментариев
  • Symfony2 или Django?

    syschel
    @syschel
    freelance/python/django/backend
    Любой большой продукт, со временем перерастёт уровень "аутсорс" левой студии, в "штат разработчиков внутри компании". На php найти одного специалиста и пачку джуниоров проще, чем на питон одного джуниора.
    Выбор делать нужно именно из этого критерия, оценки поддержки и развития продукта, а не разработку.
    Видел я уже метания одного магазина. Сначала его делали на пхп, потом на руби, потом на питоне. Каждый раз новая студия, каждый раз переписывая с нуля уже рабочий магазин. В итоге последние три года жизни он на питоне (джанго). Но вот в штат чтобы взять питониста, пришлось сильно постараться. В итоге брали пыхарей с переучиванием и плавным ростом.

    Если проект в стол (сделали и забыли). То тут без разницы. Главное уровень и опыт команды в предлагаемой среде.

    З.Ы. Сам я python(django) разработчик, до этого около 8 лет просидевший на php. И лично мне больше нравится python, а php я стараюсь забыть и не вспоминать. Но мы то говорим со стороны заказчика, а не исполнителя.
    Ответ написан
    Комментировать
  • Как использовать Username в качестве slug?

    syschel
    @syschel
    freelance/python/django/backend
    zigen: Разобрался

    И неверно разобрался.

    slug_field [get_slug_field()]

    class MyClassDetailView(DetailView):
        model = User
        slug_field = 'username'


    Ибо def get_object() используется для других целей "немного". К примеру для НЕ явной фильтрации (образно говоря "только для юзеров мужского пола", "только объектов со статусом - отображать" и так далее). Вы же "slug" передаёте в адресной строке, это явный параметр и для этого идёт банальный и правильный slug_field.
    Ответ написан
    Комментировать
  • Файловая структура Django-приложения и установка пакетов?

    syschel
    @syschel
    freelance/python/django/backend
    1. Джанго как пакет - да. Джанго как приложение (ваш код) - НЕТ!!!
    2. pip3
    Ответ написан
  • Как сослаться в модели на id в новых версиях django?

    syschel
    @syschel
    freelance/python/django/backend
    class Meta:
            db_table = "....."


    Это лишнее в моделях. Конкретно db_table.
    Ответ написан
    Комментировать
  • Как исправить url django?

    syschel
    @syschel
    freelance/python/django/backend
    [04/Jul/2015 14:33:31]"GET /?page=2&querystring_key=page HTTP/1.1" 500 160329
    [04/Jul/2015 14:33:42]"GET /?page=2&querystring_key=page HTTP/1.1" 200 6458


    Что бы посмотреть ошибку при возврате 500, когда шлёте аяксом, достаточно посмотреть в firebug`e или отладчике гуглхрома. Если DEBUG = True

    Ошибка может быть в том, что вы шлёте POST запросом, а ждёт от вас GET. Когда ж вы в браузере инициализируете адрес, то там вы это делаете GET запросом.

    Третье:
    RemovedInDjango19Warning: `request.REQUEST` is deprecated, use `request.GET` or `request.POST` instead.

    Вам говорят, что request.REQUEST устарело и советуют использовать `request.GET` или `request.POST`. Так как это в библиотеке, попробуйте её обновить(не всегда обновление в стабильной паблик версии, посмотрите репозитарий с последней версией).
    Ответ написан
    4 комментария
  • Сначала учить язык программирования или сразу framework?

    syschel
    @syschel
    freelance/python/django/backend
    Сначала язык. Минимум это синтаксис.
    Это как японская поэзия. Что сначала учить, японский язык или сразу хокку?
    Ответ написан
    Комментировать
  • Не работает handler404, почему?

    syschel
    @syschel
    freelance/python/django/backend
    А ошибка какая?
    Обычно в пути к шаблону не указывается папка темплайтов и темболее ../ в начале.

    Django 1.8
    settings.py
    import os
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')],
            'APP_DIRS': True,
        },
    ]


    views.py
    def handler404(request):
        return render(request, 'errors/404.html', status=404)


    Django < 1.8
    settings.py
    import os
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    TEMPLATE_DIRS = (
        os.path.join(BASE_DIR, "templates"),
    )
    Ответ написан
  • Как настроить nginx + django?

    syschel
    @syschel
    freelance/python/django/backend
    Эммм.. В интернете сотни, даже тысячи статей про настройку джанги под убунту на нджинксе. Все они вам не подошли и вам нужна 1001 статья? Так они все однотипные, принципы одни и теже. Меняются только пути к рабочей папке.
    Ответ написан
    Комментировать
  • Как создать анонимного пользователя в Django?

    syschel
    @syschel
    freelance/python/django/backend
    1. Создайте пользователя с логином и паролем guest
    2. Переопределите функцию авторизации. Добавив проверку на пустые поля.
    if логин и пароль пришли пустые:
        авторизовать под пользователем с ID вашего юзера guest
    else:
        обычная валидация формы
    Ответ написан
  • Как перевести значение Label в python django?

    syschel
    @syschel
    freelance/python/django/backend
    app/models.py
    #-*- coding:utf-8 -*-
    from django.utils.translation import ugettext_lazy as _
    
    class Registration(models.Model):
        ...
        create = models.DateTimeField(_(u"#Создано"), auto_now_add=True, blank=True, null=True)
    
        class Meta:
            verbose_name = _(u'#Регистрация')
            verbose_name_plural = _(u'#Подтверждение регистрации')
    Ответ написан
    1 комментарий
  • Как сделать фильтр из моделей django, поля разные, значения схожие?

    syschel
    @syschel
    freelance/python/django/backend
    Моё виденье.
    Структуру можно сделать двух типов
    1. Всё в одну модель, кроме списков(списки через связи ForeignKey/ManyToManyField/OneToOneField подгружать из других моделей или choices, они задаются администратором сайта и всегда статичны). Пускай даже будет 40 полей у модели.
    2. Одна базовая, где общие данные. И куча типовых, относящихся связями к базовой модели, но имеющие свои уникальные поля. Списки так же как и в первом варианте, выносил в отдельные модели или choices.
    Я бы выбрал второй вариант.

    Поиск. Тут два варианта.
    1. Сфинск или другие независимые поисковые программы работающие с джангой (Solr, Elasticsearch, Whoosh, Xapian).
    2. Делать самой джангой и воевать за логику и ресурсы. То есть весь поиск прописывать руками, всю логику возможных вариантов.
    Но я бы выбрал первый вариант, слишком много будет условий и по сути написание велосипеда. А второй вариант подходит под более "простой" тип поиска.
    Ответ написан
    Комментировать
  • Как передать сообщение через GET запрос?

    syschel
    @syschel
    freelance/python/django/backend
    Каша у вас батенька.
    Во первых убрать ссылку, заменить её на кнопку.
    Во вторых прочитать про формы и методы передачи данных из формы по GET/POST.

    Не, ну если уж совсем хочется извращения и вам привычнее есть ногами, а не руками. Тогда в сторону JavaScript`a смотреть. Перехватывая клик по ссылке. Но это полное извращение.

    З.Ы. Через CSS кнопка спокойно стилизуется под ссылку.
    Ответ написан
    Комментировать
  • Календарь с бронированием на django?

    syschel
    @syschel
    freelance/python/django/backend
    Есть стандартная библиотека calendar
    Посмотрите в её сторону. Делал с помощью её календарь событий, куда пользователи добавляют свои объявления по дате. А в календаре отображается всё это.

    import calendar
    c = calendar.Calendar()
    Ответ написан
    Комментировать
  • Будет ли обновления интерфейса django admin?

    syschel
    @syschel
    freelance/python/django/backend
    Вы видимо не понимаете, что джанго это фреймворк, а не цмс.
    Для разработчиков, а фреймворки это для разработчиков в первую очередь, админка достаточная и минималистична как и сам фреймворк. А для "красоты" или "удобства пользователей", создаются свои личные кабинеты и админки менеджеров проекта. Либо берутся готовые решения, которых полно, на любой вкус и цвет. И это политика создателей джанги. Врятли они от неё будут уходить. Скорее дальше упростят, как сделали с теми же комментариями, вынеся их на сторонние библиотеки, убрав из фреймворка.
    Ответ написан
    Комментировать
  • Как исправить bad request при создании модели в django?

    syschel
    @syschel
    freelance/python/django/backend
    У вас related_name одноимённое. Сделайте два разных имени. Ибо на это должно тоже ругаться.
    Вообще, по мимо Bad Request 400, в логе ошибки пишется ещё что-то, там должен быть ответ.
    Ответ написан