Тимур
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
в частности редактируемое поле