
Тимур
17.08.2016 
 15:29:21
каналы
https://channels.readthedocs.io/en/latest/
 
                
                
parikLS
17.08.2016 
 15:29:35
а ты уже трогал каналы?
 
                
                
Тимур
17.08.2016 
 15:29:54
неа, сам ищу того кто трогал ))
 
                    
Google
                
                
                
                
 
                
                
parikLS
17.08.2016 
 15:30:25
мне пока что как-то привычнее заюзать ту же торнаду
 
                
                
Paul
17.08.2016 
 15:35:22
 
                
                
Ilya
17.08.2016 
 16:27:38
 
                
                
[Anonymous]
17.08.2016 
 16:30:50
 
                
                
Ilya
17.08.2016 
 16:32:17
 
                
                
parikLS
17.08.2016 
 17:24:37
уже б декоратор написал))
 
                
                
Ilya
17.08.2016 
 17:25:37
ну, да,во время рефакторинга исправлю
спасибо за совет
 
                
                
parikLS
17.08.2016 
 17:26:24
и мне не нравится что нету обработчиков ошибок
 
                
                
Artem
17.08.2016 
 17:26:29
return HttpResponse('You are not loged in')
есть функция - JsonResponse()
которая уже возращает джЫсонку с хедерами
 
                
                
parikLS
17.08.2016 
 17:26:45
на такие вещи например data = json.loads(request.body.decode('utf-8'))
 
                    
Google
                
                
                
                
 
                
                
Ilya
17.08.2016 
 17:29:15
делал быстро, и пока особо и поэтому было желание быстрее сделать основной функционал
 
                
                
parikLS
17.08.2016 
 17:29:30
 
                
                
Artem
17.08.2016 
 17:29:44
там все имеется
 
                
                
Ilya
17.08.2016 
 17:29:49
и пока особо
это лишнее
 
                
                
[Anonymous]
17.08.2016 
 17:29:54
 
                
                
Ilya
17.08.2016 
 17:29:55
было в сообщении
 
                
                
Artem
17.08.2016 
 17:30:03
как вариант, так же можно юзануть REST
 
                
                
Ilya
17.08.2016 
 17:30:30
rest api framework?
 
                
                
Artem
17.08.2016 
 17:30:36
Ыгы
удобная весчь!
 
                
                
Ilya
17.08.2016 
 17:30:50
ни разу ещё не юзал
 
                
                
parikLS
17.08.2016 
 17:30:57
 
                
                
Ilya
17.08.2016 
 17:30:59
логичнее было бы
 
                
                
Artem
17.08.2016 
 17:31:08
у меня уже 4 проекта работает на ресте
 
                
                
Ilya
17.08.2016 
 17:31:08
так как на джанге только апи
 
                
                
[Anonymous]
17.08.2016 
 17:31:15
 
                
                
parikLS
17.08.2016 
 17:31:34
 
                
                
[Anonymous]
17.08.2016 
 17:33:04
Типа @logged
Или вы свой декоратор хотели?)
 
                    
Google
                
                
                
                
 
                
                
Ilya
17.08.2016 
 17:35:04
просто вроде ты вообще тащер
 
                
                
[Anonymous]
17.08.2016 
 17:40:21
Для чего тесты в джанго?
 
                
                
Artem
17.08.2016 
 17:43:02
 
                
                
Ilya
17.08.2016 
 17:49:21
:)
 
                
                
Artem
17.08.2016 
 17:49:55
что бы тестить
Что бы делать очередной проект, и надеяться, что в этом проекте точно начну писать тесты ^_^
 
                
                
Ilya
17.08.2016 
 17:50:14
да да
есть такое
может по TDD
всё делать
тогда точно нужно будет тесты писать
 
                
                
arisu
17.08.2016 
 17:53:18
так возьмите и просто начните
 
                
                
Владимир
17.08.2016 
 17:53:40
нельзя так просто взять и начать (с) :)
 
                
                
arisu
17.08.2016 
 17:57:42
мотивации  у вас нет
 
                
                
Artem
17.08.2016 
 17:57:49
Ага)
 
                
                
Ilya
17.08.2016 
 17:58:08
ну на самом деле
если адекватно посмотреть
то тесты могут экономить
время
 
                    
Google
                
                
                
                
  
 
                
                
Artem
17.08.2016 
 17:58:33
class ListChatsCompanion(ListAPIView):
    model = Lobby
    permission_classes = [IsAuthenticated]
    pagination_class = None
    def get_queryset(self):
        return self.model.objects.order_by('-date_created'). \
            select_related('user', 'companion').\
            prefetch_related(
                Prefetch('message_lobby', Message.objects.order_by('-pk').all(),
                         to_attr='last_message'),
                Prefetch('invoice_chat', Invoice.objects.
                         select_related('chat', 'sending', 'delivery').all(),
                         to_attr='last_invoice')
            ).filter(Q(user=self.request.user) | Q(companion=self.request.user))
    @staticmethod
    def get_status_online(user):
        ONLINE, OFFLINE = 1, 0
        if user.last_login < timezone.now() - timedelta(minutes=15):
            return ONLINE
        else:
            return OFFLINE
    @staticmethod
    def get_town_travel(lang, pk, direct, trip):
        """
        :param lang: int value by language for translate response
        :param pk: primary key by instance model
        :param direct: type of direction in (from || to)
        :param trip: type of trip in (del || send)
        :return: response string with title of town
        """
        data_queryset_filter = {}
        if direct is 'from':
            if trip is 'del':
                data_queryset_filter[trip + '_address_from_coords'] = pk
            data_queryset_filter[trip + '_address_from_coords'] = pk
        if direct is 'to':
            if trip is 'del':
                data_queryset_filter[trip + '_address_to_coords'] = pk
            data_queryset_filter[trip + '_address_to_coords'] = pk
        geo = GeoCoding.objects.prefetch_related('lang_address_geocode'). \
            filter(**data_queryset_filter). \
            filter(lang_address_geocode__lang=lang). \
            values('lang_address_geocode__political_town').first()
        if geo is not None:
            return geo['lang_address_geocode__political_town']
        return ''
    def get(self, request, *args, **kwargs):
        """
        :param request:
        :param args:
        :param kwargs:
        :return:
        """
        user = self.request.user
        limit = self.request.query_params.get('count', 10)
        offset = self.request.query_params.get('from', 0)
        lang = lang_to_int(self.request.META.get('HTTP_LANGUAGE', 'en'))
        to_offset = int(limit) + int(offset)
        if not self.get_queryset().exists():
            return ErrorResponse(
                code=HTTP_404_NOT_FOUND,
                msg=_(u'Chats not found')
            )
        retrieve_chat_message = self.get_queryset()
        retrieve_chat = self.get_queryset()[offset:to_offset]
        chat_list = {'chats': map(lambda x: {
            'id': x.pk, 'date_created': dt_to_int_unix(x.date_created),
            'invoice_id': [f.pk for f in x.invoice_chat.all()].pop(),
            'chat_status': [f.status for f in x.invoice_chat.all()].pop(),
            'from': self.get_town_travel(
                lang=lang, direct='from', trip='del',
                pk=[f.delivery.pk for f in x.invoice_chat.all()].pop()
            ),
            'to': self.get_town_travel(
                lang=lang, direct='to', trip='del',
                pk=[f.delivery.pk for f in x.invoice_chat.all()].pop()
            ),
            'chat_user': {
                'id': x.user.pk, 'first_name': x.user.first_name,
                'last_name': x.user.last_name,
                'status': self.get_status_online(x.user),
                'avatar': validate_avatar(x.user.avatar.url),
            } if x.user != user else {
                'id': x.companion.pk, 'first_name': x.companion.first_name,
                'last_name': x.companion.last_name,
                'status': self.get_status_online(x.companion),
                'avatar': validate_avatar(x.companion.avatar.url),
            },
            'last_message': {
                'id': x.last_message[0].pk, 'text': x.last_message[0].text,
                'own_my': True if x.last_message[0].user == user else False,
                'date_created': dt_to_int_unix(x.last_message[0].date_created)
            } if x.last_message else {
                'id': None, 'text': '', 'own_my': None, 'date_created': 0
            },
            'unread_messages':
                retrieve_chat_message.filter(message_lobby__companion=user,
                                             message_lobby__is_read=False,
                                             message_lobby__lobby=x).count()
        }, retrieve_chat)}
        chat_list.update({'count': retrieve_chat.count()})
        return Response(chat_list)
ВОт тебе мотивация!
  
 
                
                
arisu
17.08.2016 
 17:58:49
что это за простыня ебать
 
                
                
Artem
17.08.2016 
 17:59:03
 
                
                
arisu
17.08.2016 
 18:00:36
а, вот с подсветкой понятно стало
 
                
                
Artem
17.08.2016 
 18:05:43
вот как раз рест с кучей пиздеца
 
                
                
[Anonymous]
18.08.2016 
 00:09:50
 
                
                
Тимур
18.08.2016 
 05:02:32
это ли еще простыня..
 
                
                
[Anonymous]
18.08.2016 
 05:42:14
А где вы джанго-сигналы используете?
 
                
                
Paul
18.08.2016 
 07:18:08
 
                
                
Artem
18.08.2016 
 07:18:55
А чем встроенные сигналы не угодили?
 
                
                
Paul
18.08.2016 
 07:20:27
 
                
                
[Anonymous]
18.08.2016 
 07:20:27
 
                
                
arisu
18.08.2016 
 07:58:09
Сигналам не хватает описания изменившихся полей
Для postsave, postdelete
 
                
                
Alex
18.08.2016 
 11:43:47
Друзья, а скажите, какой самый простой способ расширить модель User? Мне надо добавить туда аватарку и manytomany между юзерами. Пробовал делать через Abstract user, но что-то у меня с таблицей напортачилось странное.
Можно ли создать отдельную модель с новыми полями и связать ее через OneToOne к юзеру или как-то похоже?
 
                
                
parikLS
18.08.2016 
 11:45:46
Можно, это называется прокси модель
 
                
                
[Anonymous]
18.08.2016 
 11:45:53
Есть два способа: наследование и твой
 
                    
Google
                
                
                
                
 
                
                
parikLS
18.08.2016 
 11:49:36
 
                
                
Alex
18.08.2016 
 11:49:39
Я правильно понимаю, что в случае прокси модели, назовем ее NewUser (в котором помимо onetoone связи будет два новых поля), мне надо использовать ее как AUTH_USER_MODEL? Надо ли мне вьюху прописывать, чтобы форма сейвила именно NewUser? Нет ли возможности использовать именно User, но с добавочками?
 
                
                
Artem
18.08.2016 
 11:52:29
Тебе надо в настройках указать параметр Auth _user_model = 'path.to.user.model'
И создать модельку от наследованой от AbstractBaseUser и PermissionMixin. Там хоть сколько полей втыкай. И соответственно self.request.user будет ломиться именно туда
 
                
                
Alex
18.08.2016 
 11:55:17
 
                
                
[Anonymous]
18.08.2016 
 11:55:38
 
                
                
Alex
18.08.2016 
 11:56:42
 
                
                
parikLS
18.08.2016 
 11:57:08
камон, в офф доке это все описано
 
                
                
[Anonymous]
18.08.2016 
 11:58:34
 
                
                
Artem
18.08.2016 
 11:58:44
Обязательное поле - REQUIRED_FIELDS = []
Плюс надо будет расширить менеджер
 
                
                
parikLS
18.08.2016 
 12:00:33
 
                
                
Artem
18.08.2016 
 12:01:40
Не забудь поля
 
                
                
[Anonymous]
18.08.2016 
 12:07:30
 
                
                
eugeny
18.08.2016 
 12:43:13
мужчины, а для SQLite3 какой есть лёгкий удобный клиент на Виндос?
 
                
                
[Anonymous]
18.08.2016 
 12:44:25
Для вас, Павел Иванович, хоть десять:)
 
                
                
parikLS
18.08.2016 
 12:52:34
 
                
                
eugeny
18.08.2016 
 12:53:23
мои компы не тянут пичарм((
 
                
                
Владимир
18.08.2016 
 13:00:43
кто-нибудь прикручивал https://pypi.python.org/pypi/django-datatable-view
в частности редактируемое поле