Архив рубрики: Django

Отправляем уведомления в Django через Telegram API.

Вступление

Был у меня значит один проект на Django, и имел этот проект формочку простую. И собирала это формочка лидов. И все было круто-счпстливо. И собирались лиды на e-mail ящике…

Как бы все ничего, но смущало то,  что время реагирования на  заявки лидов было непозволительно большим. Ну как бы почту не получается, целый день мониторить. Наверное не открою Америку если скажу, что если не дать обратную связь лиду (контакту, клиенту) в первые 5 минут с момента заявки до вероятность успешной сделки по истечении этих первых  5 минут увеличивается в геометрической прогрессии.

Если не дать обратную связь лиду (контакту, клиенту) в первые 5 минут с момента заявки до вероятность успешной сделки по истечении этих первых  5 минут увеличивается в геометрической прогрессии.

Читать далее

Установка визуального редактора Ckeditor для Django

Ckeditor один из лучших визуальных редакторов. Практически на каждый сайт на котором приходится, добавлять или изменять контент необходим визуальный редактор. Вот и я решил для одного из своих  проектов дать возможность пользователям удобно редактировать статьи.  ниже приведу пример настройки самого редактора Ckeditor и плагина к нему для загрузки изображений через веб-интерфейс ckeditor-uploaders.

Первым делом установим  сам пакет в виртуальное окружение:


pip install django-ckeditor Читать далее

Вернуть файл в FBV Django.

Иногда возникают ситуации когда в ответ на запрос в браузере необходимо вернуть файл. Наверное возможно написать, какое нибудь изящное решение используя CBV (функции основанные на классах), но я решил использовать для этих целей FBV(функции-представления).

Возвращать наша функция будет фай с разрешением .dbf, используя метод HttpResponse. Думаю более подробные комментарии излишни, код простой очень. И я выложу его, может кому нибудь и пригодится.

@login_required
def download_dbf(request, num_dbf):
    #Подключаемся на фтп серваер
    ftp = FTP('muftp.ru')
    ftp.login('user', 'password')
    ftp.cwd("nakl")
    ftp.cwd(request.user.username)
    #Загружаем файл
    dbf_name = str(num_dbf) + '.DBF'
    dbf_file = MEDIA_ROOT + '/ftp/' + request.user.username + '/' + dbf_name
    lf = open(dbf_file, "wb")
    ftp.retrbinary("RETR " + dbf_name, lf.write, 8 * 1024)
    lf.close()
    ftp.quit()

    fp = open(dbf_file, 'rb')
    response = HttpResponse(fp) #Важно открыть файл и только потом передать его в HttpResponse
    fp.close()
    response['Content-Disposition'] = 'attachment; filename=%s' % dbf_name
    return response

 

Работа с Django на хостинге Beget

Пишу как заметку для себя, так как изредка приходится  разветывать или настраивать Django приложения на shared хостинге Beget.ru

Итак первым делом нужно в паели веб-сервера включить доступ по ssh для вашего аккаунта.

Далее подключаемся к нашему хостингу из терминала

ssh tabari@tabari.beget.tech

попав на сервер переходим в docker — окружение

ssh localhost -p222

Прежде чем идти дальше, предполагается, что у вас уже установлен Python на хостинге. Как устанавливать цитировать руководство не буду, просто оставлю ссылку на него, где все подробно расписано. В моем случае, нужно было установить Python 3, что я и сделал.

На сервере уже по умолчанию установлен git, поэтому переходим в папку Django приложения,  обновляем проект командой, разумеется предварительно нужно инициировать репозиторий git

git pull

накатываем миграции Читать далее

Простой поиск на Django

Полнотекстовый поиск конечно хорошо, но иногда нет необходимости в нем. Реализация  простого поиска, в django оказалась довольно тривиальной задачей. Дабы облегчить кому то поиск, того, на что у меня ушло несколько часов да и себе на памятку, опишу вкратце как реализовать простой поиск на Django.

Допустим у нас есть модель

class Patient(models.Model):
    """
    Модель описывающая пациентов клиники, реализована
    в виде отдельного приложения, так как будет являться одной из базовых моделей
    исходя из логики пронраммы
    """
    firstname = models.CharField(max_length=100, verbose_name="Имя", blank=False, null=True)
    lastname = models.CharField(max_length=300, verbose_name="Фамилия", blank=False, null=True)
    midle_name = models.CharField(max_length=300, verbose_name="Отчетство", blank=True, null=True)

Читать далее