Pull to refresh

Comments 24

Какое-то все это… нерациональное и не параллельное. Интересно, сервер не захлебнется постить в 20-30 групп?
Я правильно понима, что вы сначала постите записи, а потом совершаете обход и собирает ID-постов? Зачем?
Я понимаю, что наработки сыроватые, т.к. программист python ещё junior=)С опытом всё придёт)
Нет, постинг записей и собирание постов — разные процессы. Любую статью или новость можно запостить Вконтакте — это одна функция. Параллельно с этим на сервере работает скрипт, который просто через определённое время обновляет отдельные таблицы в базе данных — таблицу для групп и таблицу для постов.
Наврятли это джуниор, это какой-нибудь стартер.
>>Параллельно с этим на сервере работает скрипт, который просто через определённое время обновляет отдельные таблицы в базе данных — таблицу для групп и таблицу для постов.
Вот это не совсем понятно что вы имели в виду.
Для отправки поста Во Вконтакте нужен список групп, куда можно запостить запись. Этот список периодически обновляется с помощью скрипта, который получает список групп администратора, и если появились новые, добавляет их в базу данных(в таблицу). Точно так же и со всеми последними постами из групп и со стены админа — проверяется, если ли новые, и если есть — добавляются в базу данных.
Странное решение. Обычно делаетка так — спрашиваем человека В КАКИЕ группы И ЧТО публиковать.

Простой поймите — крутость системы определяется не тем, сколько процессов совершаются автоматически, а сколько процессов пользователь может кастомизировать под себя.
Вы видимо просто не понимаете. С помощью скрипта обновляется список групп админа, это отдельная таблица в базе данных.
В админке у статей/новостей есть поля — отправить на стену админа вконтакте, есть поле manytomanyfield — список этих самых групп. То есть админ САМ выбирает, в КАКИЕ группы ему отправить КОНКРЕТНУЮ запись.
У вас при каждом сохранении статьи, будет создаваться запись вконтакте.

Зачем переопределять метод save(), если есть сигналы?

За try:except без указания типа исключения — нужно надавать по рукам.

if len(groups) — то же самое, что и if groups

Нет, запись вконтакте создаётся только тогда, когда в админке администратор указал, что эту запись нужно отправить на стену вконтакте/ в группу. Для этого есть флаг post_vk.
Про сигналы не знала, обязательно изучу.
Спасибо за рекомендации и советы, буду знать и дальше развивать знания по python=)
Попробуйте несколько раз сохранить статью с флагом wal_post_vk равным True ;)
Ну логично запись постится Вконтакте)
Причем не один раз. Так и надо?
При каждом сохранении записи, если её надо отправить вконтакт, то она постится ровно один раз раз на стену админа и/или выбранной группы
В функции use_vk, где и происходит обращение к API, в конце два условия как раз на проверку — отправлять запись на стену админу и отправлять ли запись в выбранные группы. Там метод vk.wall.post(**params) — как раз и отправляет запись, если нужно. Т.е. если выполняется условие, что запись нужно отправить на стену — выполняется этот метод API, один раз (метод вызывается один раз).
Я все это прекрасно вижу. Похоже вы не понимаете суть проблемы.

Сценарий:
1) пользователь добавляет статью, установил wall_post_vk в True, нажал сохранить. Статья отправилась вконтакт.
2) пользователь заметил ошибку в заголовке, исправил ее, нажал сохранить
3) заметил еще одну ошибку, исправил, нажал сохранить

Вопрос — сколько будет статей опубликовано?
Хм, ну этого я не отрицаю, действительно, пока стоит wall_post_vk в True, статья будет поститься при каждом сохранении.
Просто это уже дальнейшее углубление в функциональность, такое и правда надо доработать… Только опять же, а если администратор именно так и хочет, что исправить заголовок и заново опубликовать запись вконтакте?.. Пока при быстром рассмотрении появляется идея удалять предыдущий пост и публиковать новый.
Это была работа по самостоятельной разработке, как раз для лучшего понимания) + диплом
Помимо советов выше, я бы добавил еще это. Вместо
from umc.vk_response import *
Использовать это
from umc import vk_response ... vk_response.some_method()
Так более понятно, откуда тот или иной метод, который используется в коде.
И да. Почитайте про сигналы.
И вообще не понятно, зачем вот эта строчка
groups = [g for g in self.group_vk.all()]
строка
groups = [g for g in self.group_vk.all()]

получает весь список групп, которые выбрал админ, куда надо отправить запись. Затем запись постится в каждую группу из этого списка.
Я полагаю, что вопрос был конкретно про решение с:
[g for g in self.group_vk.all()]
ОК. Тогда почитайте еще про models.ForeinKey(Model)
и про models.ManyToManyField(Model)
Тогда можно будет избавится от этой какахи) и получать делать так
for group in self.group_vk.all()
Ну и за одно про reverse foreign key.
Sign up to leave a comment.

Articles