Миграция WEB-приложения Django с версии 2.7 на 3.5 (на практическом примере)


Виртуализация серверов и рабочих станций в Windows и Linux - Hiperv, KVM, VMWare Разработка на языке Python 3 (для web-приложений используем Django Framework)
django python string unicode webvirtcloud xrange ошибка
 
 

* В этом блоге я описываю свою повседневную рабочую практику, поэтому все статьи в блоге написаны лично мной и при копировании их на свой сайт пожалуйста указывайте ссылку на страницу откуда вы скопировали.
* Если какая-то статья вам помогла, то вы можете дать мне немного денег вместо простого спасибо (ссылка на форму поддержки проекта внизу страницы), если вы что-то не поняли или у вас что-то не получается, то вы можете нанять меня и я вам все подробно расскажу (расценки и ссылки в конце статьи).


(последние правки 1 месяц)

Про консоль управления виртуализацией WebVirtCloud (бывший WebVirtManager) я уже как то рассказывал, но главной его проблемой как я уже сказал является то что он пострен на базе устаревшего Python2 и автор тащит его вперед именно в таком виде. Переписывать он его отказывается мотивируя это тем что все и так работает, но на самом деле там внутри довольно много легаси-мусора. Я его умудился немного переписать под свежую редакцию Django и Python3, но дело еще далеко до завершения хотя пользоваться уже можно.

Честно говоря не так сложно все это переписывать, чем бороться с мелкими и крупными багами которые вылезают на ровном месте и требуют глубокой отладки. Одному переписывать такое проект довольно тяжело, поэтому буду рад всем кто захочет помочь в этом нелегком деле.

В процессе работы я описал несколько типовых операций миграции с которыми вы наверняка столкнетесь если решите повторить этот эксперимент.

Ошибка - Exception Value: module 'string' has no attribute 'letters'

Меняем:

def randomPasswd(length=12, alphabet=string.letters + string.digits):
    """Generate a random password"""
    return ''.join([random.choice(alphabet) for i in xrange(length)])

на 

def randomPasswd(length=12, alphabet=string.ascii_letters + string.digits):
    """Generate a random password"""
    return ''.join([random.choice(alphabet) for i in xrange(length)])

Символ L в конце числа

В Python 2.7 L использовался для указания типа Long integer.

Python 3 will never add the L. Not when using repr(), and not when using str(). There would be no point; all integers in Python 3 are long integers.

Можно L убирать.

Ошибка в выражении raise ValueError, "only IPv4 and IPv6 supported"

Конструкция вида:

raise ValueError, "only IPv4 and IPv6 supported"

Превращается в:

raise ValueError ("only IPv4 and IPv6 supported")

Что мне кажется более логичным.

Ошибка - Exception Value: name 'unicode' is not defined

В Python 3, все строки теперь Unicode следовательно преобразования вида:

host = unicode(host)
login = unicode(login)
passwd = unicode(passwd) if passwd is not None else None

Можно свести к виду:

#host = unicode(host)
#login = unicode(login)
passwd = passwd if passwd is not None else None

Просто избавляемся от unicode(value)

Ошибка - Exception Value: module 'string' has no attribute 'lowercase'

Аналогична рассмотренной ранее и требует замены:

string.lowercase

на

string.ascii_lowercase

Ошибка - Exception Value: name 'xrange' is not defined

Дело в том, что xrange была переименована в range в Python3 и соответственно просто меняем:

xrange

на 

range

Список можно продолжать долго, но разумнее наверное просто будет опубликовать наработки относительно работоспособного проекта в GIT где вы сможете все увидеть по каммитам.

Моя официальная страница на FaceBook
Мой микроблог в твиттер

Запуск Web-приложений Django в Production-режиме (UWSGI/Nginx)

Запуск Web-приложений Django в Production-режиме (UWSGI/Nginx)

Django-приложения довольно сильно отличаются от php-приложений как структурой проекта, так и методом запуска.  Django-приложения по методу запуска больше похожи на Java, чем на PHP и классические ASP-проекты. Сегодня мы будем строить классическую связку из python-приложения и web-сервера Nginx обслуживающего реверс-проксирование запросов к приложению и предоставление файлов из каталогов media и static. LXC-изоляция в моем случае используется для поддержания python-окружения проекта и именно таким способом я предпочитаю изолировать проекты, а виртуальное окружение я предпочитаю не использовать, так как пару раз уже были проблемы при переносе Django-проектов.


Создание и публикация Django-приложения (Часть первая, создание типового Django-приложения)

Создание и публикация Django-приложения (Часть первая, создание типового Django-приложения)

Для тех кто знаком с Django-разработкой в этой статье вряд ли найдется, что то интересное, но для тех кто хотел бы понять как начать писать на Django/Python небольшие приложения думаю будет интересно, и дополнительно рассмотрим простой метод автоматизированного деплоя нашего приложения на продакшн-сервер. Эту статью я решил написать для самого себя в виде небольшой шпаргалки при запуске новых проектов, поэтому если что непонятно, пишите в комментариях и я попробую рассказать более подробно.


Ваш собственный облачный центр виртуализации (WebVirtMgr умер! Да здравствует WebVirtCloud panel!)

Ваш собственный облачный центр виртуализации (WebVirtMgr умер! Да здравствует WebVirtCloud panel!)

Только я хотел рассказывать о одном довольно старом внедрении Web-сервиса управления парком виртуальных машин на базе полностью открытых решений, как оказалось что проект WebVirtMgr был закрыт и теперь существует в своей новой ипостаси уже с модной приставкой Cloud. Итак друзья мои, сегодня я буду устанавливать и настраивать WebVirtCloud panel.


Обзор open source платформы управления фермой виртуализации KVM (новое в WebVirtCloud)

Обзор open source платформы управления фермой виртуализации KVM (новое в WebVirtCloud)

Как верно подметили читатели моего блога, я конечно рассказал как установить WebVirtCloud, но не рассказал, чем же она так кардинально отличается от того же Proxmox например, да и немного скриншотов бы тоже не помешало. Я в свою очередь наверное даже пойду дальше и подготовлю небольшое видео, где продемонстрирую создание нескольких виртуальных машин и покажу некоторые новые фишки WebVirtCloud.


Использование jQuery Ajax для отправки данных Django-форм без обновления WEB-страницы

Использование jQuery Ajax для отправки данных Django-форм без обновления WEB-страницы

Я последнее время довольно активно использую Java Script в своих проектах. 21-ый век все таки на дворе и надо соответствовать. Хотя почему то считается, что использовать чистый Ajax для работы с формами не стоит и необходимо предоставить возможность работы и с перезагрузкой страницы, но мне кажется, что врят ли сейчас кто-то пользуется IE6, ну и если и пользуется, это его персональное горе.


Логирование ошибок в Django-проекте на боевом сервере

Логирование ошибок в Django-проекте на боевом сервере

Как вы наверное знаете у Django Framework имеется отличная система отладки и вывода отладочной информации при ошибке WEB-приложения и включается режим отладки простым DEBUG = True. Естественно, что на продакшн (боевых) сервера такое поведение недопустимо и в случае сбоя клиенту отображается лишь страница 500 с соответствующим кодом возврата и конечно клиенту этого вполне достаточно, но нам то необходимо оперативно отреагировать на сбой web-приложения и принять меры.


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


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .