• Зачем нужно ООП в javascript?

    thehighhomie
    @thehighhomie
    Вам нужно почитать эти две статьи + комментарии людей снизу:
    ООП в функциональном стиле
    ООП в прототипном стиле

    И видео:
    Javascript-джедай #20 - Прототипы и наследование
    Javascript-джедай #21 - Конструкторы и классы

    Этого вполне хватит чтобы понять ооп в JS и для чего он) во время практики вы сами прозреете)

    И лучше изучи весь учебник: Современный учебник Javascript

    На счет видео Sorax'a не скажу что мне они нравятся но в сети его хвалят, так что решать вам, мне больше учебник помог.
    Ответ написан
    3 комментария
  • Как понять этот кусочек кода на Django?

    @asd111
    1) Можно не проверять, а использовать декораторы или Class based view. Проверка используется в самых простых view как в вашем примере. Проверка нужна чтобы знать какой запрос пришел. Если пришел POST запрос значит форма была отправлена, если пришел GET запрос, значит форму нужно вывести, чтобы её потом можно было отправить.
    2) form = RegistrationForm(request.POST) создает объект класса RegistrationForm с данными из request.POST, т.е. с данными из POST запроса;
    form = RegistrationForm() создает пустой объект класса RegistrationForm
    Ответ написан
    1 комментарий
  • Возникает ошибка Server Error 500 при попытке добавления статьи из админки, как-то связана с переходом на http2, логи не помогают, куда копать?

    DmitryVoronkov
    @DmitryVoronkov
    Python Developer
    Настрой один раз логирование на продакшене и лови ошибки на почту.
    Хоть кто-нибудь читает документацию?
    ADMINS = (('Your nam.', 'mailfor_error@gmail.com'),)
    ...
    EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
    EMAIL_HOST = 'smtp.yandex.ru' # or google
    EMAIL_HOST_PASSWORD = 'password'
    EMAIL_HOST_USER = 'login'
    DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
    SERVER_EMAIL = DEFAULT_FROM_EMAIL
    EMAIL_PORT = 465
    EMAIL_USE_SSL = True
    ...
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': True,
        'formatters': {
            'verbose': {
                'format': '%(levelname)s %(asctime)s %(module)s '
                          '%(process)d %(thread)d %(message)s'
            },
            'simple': {
                'format': '%(levelname)s %(message)s'
            },
        },
        'handlers': {
            'null': {
                'level': 'DEBUG',
                'class': 'django.utils.log.NullHandler',
            },
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
                'formatter': 'simple'
            },
            'mail_admins': {
                'level': 'ERROR',
                'class': 'django.utils.log.AdminEmailHandler',
                'include_html': True,
            }
        },
        'loggers': {
            'django': {
                'handlers': ['console'],
                'propagate': True,
                'level': 'INFO',
            },
            'django.db': {
                'level': 'DEBUG',
                'handlers': ['console'],
                'propagate': True,
            },
            'django.request': {
                'handlers': ['mail_admins', 'console'],
                'level': 'ERROR',
                'propagate': False,
            },
        }
    }
    Ответ написан
    2 комментария
  • Как правильно сериализовать объект?

    dunmaksim
    @dunmaksim
    Технический писатель
    Я бы написал так:
    models.py
    from django.db import models
    
    
    class Ingridient(models.Model):
    
        name = models.CharField(
            max_length=30,
            unique=True,
            db_index=True
        )
    
        class Meta:
            db_table = 'ingridient'
            ordering = [ 'name' ]
    
    
    class Recipe(models.Model):
    
        name = models.CharField(
            max_length=30,
            unique=True,
            db_index=True
        )
    
        ingridients = models.ManyToManyField(
            Ingridient
        )
    
        class Meta:
            db_table = 'recipe'
            ordering = [ 'name' ]


    serializers.py
    from rest_framework.serializers import ModelSerializer, PrimaryKeyRelatedField
    from .models import Ingridient, Recipe
    
    
    class IngridientSerializer(ModelSerializer):
    
        class Meta:
            model = Ingridient
    
    
    class RecipeReadListSerializer(ModelSerializer):
    
        class Meta:
            model = Recipe
            exclude = ['ingridients']
    
    
    class RecipeReadDetailSerializer(ModelSerializer):
    
        ingridients = IngridientSerializer(
            many=True
        )
    
        class Meta:
            model = Recipe
    
    
    class RecipeWriteSerializer(ModelSerializer):
    
        ingridients = PrimaryKeyRelatedField(
            queryset=Ingridient.objects.all(),
            many=True,
            default=[]
        )
    
        class Meta:
            model = Recipe


    views.py
    from rest_framework.viewsets import ModelViewSet
    
    from .serializers import IngridientSerializer, RecipeReadListSerializer, RecipeReadDetailSerializer, RecipeWriteSerializer
    from .models import Ingridient, Recipe
    from rest_framework.permissions import AllowAny
    
    
    class IngridientViewSet(ModelViewSet):
    
        queryset = Ingridient.objects.all()
    
        serializer_class = IngridientSerializer
    
        permission_classes = [
            AllowAny
        ]
    
        class Meta:
            model = Ingridient
    
    
    class RecipeViewSet(ModelViewSet):
    
        queryset = Recipe.objects.all()
    
        permission_classes = [
            AllowAny
        ]
    
        def get_serializer_class(self):
            if self.request.method == 'GET':
                if self.action == 'list':
                    return RecipeReadListSerializer
                return RecipeReadDetailSerializer
            return RecipeWriteSerializer


    urls.py
    from rest_framework.routers import SimpleRouter
    from .views import IngridientViewSet, RecipeViewSet
    
    router = SimpleRouter()
    router.register(r'ingridients', IngridientViewSet, base_name='ingridients')
    router.register(r'recipies', RecipeViewSet, base_name='recipe')
    
    urlpatterns = router.urls


    Насчёт использования SlugField не совсем уверен, что они нужны, ведь API в данном случае будет простым, список его URL вообще проще некуда, впрочем, я думаю, добавить их вы сможете в любое нужное время.
    Зачем для сериализации рецептов целых три сериализатора?
    При получении списка всех рецептов как правило не нужно сразу же получать и все ингридиенты. Во всяком случае, в моих приложениях я делаю подгрузку полной копии модели только при детальном просмотре, а в списках часть полей скрыта на уровне API. Надо ли говорить, что при сериализации пользователей несколько сериализаторов просто необходимы, чтобы не выводить пароль при получении объекта, но иметь возможность его обновлять при записи?
    Сериализатор для чтения деталей как раз выдаёт вложенные объекты при получении модели рецепта - в поле ingridients будет массив полностью сериализованных объектов Ingridient.
    Третий сериализатор используется только для создания записей типа Recipe или их обновления. Для заполнения ингридиентов нужно передать список их id. DRF сам проверит существование соответствующих моделей и выполнит все остальные действия.
    Ответ написан
    Комментировать
  • Значение с базы на каждой странице?

    sim3x
    @sim3x
    Такое лучше делать через CBV и просто передавать в контекст переменную с данными

    Контекст процессоры не совсем прозрачный способ для такого простого действия
    Ответ написан
    Комментировать
  • Django. Как получить текущего юзера в методе модели? И правильно ли это?

    @deliro
    Во вьюхе:
    Event.save(user=request.user)

    В модели:
    def save(self, *args, **kwargs):
        user = kwargs.pop('user')
        ...
        super().save(*args, **kwargs)
    Ответ написан
    Комментировать
  • Django rest framework. Как выбрать возвращаемые связанные поля?

    pinkevich
    @pinkevich
    Developer
    вот, должно работать
    class ReviewsSerializer(serializers.ModelSerializer):
        reviews_from = serializers.ReadOnlyField(source='reviews_from.username', read_only=True)
    
        class Meta:
            model = Reviews
            fields = ('reviews_from', 'reviews_text')
    Ответ написан
    4 комментария
  • Как проверить вхождение пользователя в таблицу БД?

    MrLinch
    @MrLinch
    Just like coding...
    Лучше проверку на то что пользователь голосовал делать во view.
    Например так:
    is_voted = user in question.voted_users.all()
    или
    is_voted = question.voted_users.filter(pk=user.pk).exists()


    И да, так не стоит делать :-)
    voted = request.POST['choice']
    voted_choice = get_object_or_404(Choice, pk=voted)

    Я про то что брать данные прямо из запроса. Лучше используйте формы для этого.
    Ответ написан
    6 комментариев
  • Как менять на странице значения полей ForeignKey и ManyToManyField?

    1. Зачем нужен переход на другую страницу для выбора начальника, разве это удобно? Чтобы избавиться от проблем выпадающего списка при большом количестве записей в таблице Person, можно использовать django-select2 - он даст возможность искать по элементам или, нажав на кнопку "удалить" прямо в элементе управления, указать, что начальника нет. Демо.

    2 и 3. С работниками и товарами, наверное, нужно использовать FormSets. Вот пример о том, как скрестить их с class-based views: effectivedjango.com/tutorial/related.html - кажется, он подходит к вашей ситуации.

    P. S. Если у вас вся задача состоит в управлении таблицами, не думали для этого использовать родное средство - django-admin? Там всё это уже есть - и выбор, и формсеты. С помощью таких батареек как Django Suit можно облагородить внешний вид. Ну а где нужно - кастомизировать и добавить свои view, скажем, на главную страницу админки.
    Ответ написан
    3 комментария
  • Как вывести изображения в background-image?

    winordie
    @winordie
    Лучшая документация -- исходники
    class Gallery(models.Model):
        item = models.CharField(max_length=50)
    
        class Meta:
            verbose_name = u"Галерея"
            verbose_name_plural = u"Галереи"
    
        def __unicode__(self):
            return self.title
    
        def first_photo_url(self):
            return self.photo_set.first().image.url

    В шаблоне:
    {{ gallerys.first_photo_url }}
    Ответ написан
    Комментировать