Flask

1.1 Почему Flask называют «микро» фреймворком?

«Микро» в данном контексте не значит, что ваше веб-приложение обязательно должно состоять из одного файла на языке Python, хотя никто не мешает вам поступить именно так. Также, не имеется ввиду, что Flask уступает по своей функциональности и возможностям другим фреймворкам. Приставка «микро» в слове микрофреймворк подразумевает, что ядро Flask разрабатывается максимально простым, но с богатыми возможностями для расширения. Flask не принимает решения за вас, такие как, например, «какую базу данных использовать?». А те решение которые идут «из коробки»(например, шаблонная система), легко заменяются на другие. Все остальное зависит от вас, потому что Flask не содержит ничего лишнего.

Читать дальше

Сегодня передо мной встала задача производить бекап MySQL баз в облако, на Amazon S3, да ещё и с ротацией. Решений на этот я нашёл достаточно много, но все они были либо слишком громоздкими для данной задачи, либо чего то не умели (практически никто не умеет делать ротацию из коробки).

Читать дальше

Здравствуйте, я не обладаю большим опытом программирования, прошу вас срочно помочь, со следующим вопросом. При передаче данных по сети с применением средств библиотеки rpyc возникают очень большие задержки по сети. вот следующий код, принимающий с сервера данные: while (условие): self.coords = list(self.c1.root.exposed_coords()) #ВОЗВРАТ ДАННЫХ С СЕРВЕРА print coords[1] СВЯЗЫВАЕТ ЛИ RPYC МАССИВ SELF.COORDS С СЕРВЕРНОЙ ЧАСТЬЮ? ОЩУЩЕНИЕ ТАКОЕ, ЧТО ДА, И ПРИ ОБРАЩЕНИИ К self.coords[i] он делает запрос на сервер и берет с него значение. Спасибо!

Как я научился ненавидеть Django Здравствуйте. Попытаюсь формализовать то, что меня постоянно раздражает в Django и заставляет придумывать разнообразные велосипеды и подключать кучу батареек только для того, чтобы сделать работу на данном фреймворке более удобной. Общепринято, что любой web-фреймворк состоит из следующих компонентов: Роутинг Шаблонизатор Формы ORM (если это не микро фреймворк) Работа с протоколом HTTP на уровне запроса и ответа Разнообразные утилиты Заранее оговорюсь, что Dango мне очень нравится, если бы не следующее… 1. Роутинг Представляет из себя стрельбу из пушки по воробьям в виде регулярных выражений. Понятно что с помощью них можно решать ряд нетривиальных задач, но абсолютно нельзя решить то, что дествительно требуется в роутинге. Это такие вещи как автоматическое извлечение данных (например инстанса модели по ее идентификатору), действительно точная валидация данных (а не только знание того, что в параметре будут только цифры). Примеры батареек для улучшения работы с роутингом: django-hosts, routr. 2. Шаблонизатор Шаблонизатор отличается такой килл фичей котрая постоянно раздражает, это написание шаблонных тегов на каждый чих. А также отсутствие обычных выражений, отсутствие обращения к словарю по ключу находящемуся в переменной, отсутствие вызова функции с параметром (без параметра можно), отсутсвие макросов, невозможность определить переменную, только один параметр в фильтре и т.д. Хорошо хоть недавно появилась конструкция elif. Как это можно решить? Заменить шаблонизатор на Jijna 2 (благо с появлением CBV это очень просто). Батарейки: django-jinja, coffin. 3. Формы Они просто нарушают MVC. Для того чтобы определить, например, css класс для поля, нужно передать его в виджет. Не будем же мы заставлять дизайнера править код? Отсутствие FormField делает жизнь еще веселее. Доставляет clean_fieldname который не видит полей, перечисленных позже него. Как это можно решить? Использовать те же WTForms. 4. ORM До сих пор не могу понять, как делается left join и как мне явно указать какой join делать. Ужасное наследование моделей. Из мелочей: отсутствие join по разным базам, невозможность создать модель без первичного ключа. Наконец то появится index_together. Как это можно решить? Использовать ту же peewee. 5. Работа с протоколом HTTP Отсутствие необходимых исключений (в том же WebOb любой HTTP ответ является в том числе и исключением). Неудобное обращений к заголовкам, нвозможность стандартно парсить uri, очень непонятно как получить тело запроса в первоначальном виде и т.д. Как это можно решить? Использовать тот же WebOb. Если все это сделать, что тогда останется от django кроме админки? Как это можно решить? Поставить flask-peewee. Спасибо за внимание.

Недавно передо мной встала задача провести опрос клиентов Hosting4Django. Разместить опрос в социальных сетях не вариант, т.к. большинство клиентов отсутствуют среди подписчиков группы. Разместить новость на сайте? Хорошая идея, но далеко не все просматривают этот раздел. Немного поразмыслив я остановился на электронной почте. Но как сделать опрос, что будет забирать минимум времени клиентов и при этом сохранить эффективность?

Читать дальше

Здравствуйте, в одном из своих прошлых постов я просил поделиться уроками для Python. Мне дали пару хороших советов и подсказок. И я решил поделиться ссылкой на видео курсы по Python. Как по мне очень интересно. https://www.youtube.com/watch?v=UQi-L-_chcc&feature=fvst

20 сентября в офисе Яндекса пройдет научно-технический семинар, на котором Эдуард Бортников, исследователь из Yahoo! Research, выступит с докладом "Предсказание «узких мест» при выполнении команд в кластерах MapReduce". Эдуард расскажет, как предсказать замедления в инфраструктуре MapReduce с помощью машинного обучения и как с помощью предсказаний ускорить выполнение задач. После семинара будет возможность задать вопросы и пообщаться с докладчиком лично. Семинар пройдет на русском языке в офисе Яндекса по адресу ул. Льва Толстого, 16. Регистрация обязательна: Your text to link...

Здравствуйте, я полный новичок в Python и хочу все выучить сам. Книг нашел не очень много, есть только несколько видео из Ютуба, типа этого.

https://www.youtube.com/watch?v=QaYAOR4Jq2E&list=SPB10458C176C55C88&index=1&feature=plpp_video



Может кто-то подкинет ссылок на видео сайты или ресурсы с книгами.

Строго не судите. Просто родственник попросил сделать за ничего=) Имеются конечно косяки, а в целом работает


#!/usr/bin/env python
# -*- coding: utf-8 -*-
##########################################################################################################
'''
by duke565
Скрипт для сортировки изображений. Собирает файлы из папок и подпапок и разбрасывает их
   по папкам указывая на них дату создания'''
##########################################################################################################  
import os
from shutil import move
import time
##########################################################################################################
dirname = '/home/duke565/splav_2/' # основаная директория
try:
    newdir = '/home/duke565/splavS/' # куда сложить
    OrigNewDir = newdir
except:
    newdir = dirname
     
def image_sort(dirname, newdir, recur= 0):
    if not recur:print 'sorting started ...'
    else: print 'sorting started in %s...'%dirname
    if not newdir: newdir = dirname
 
    imagelist = []
 
    if os.path.isdir(dirname):   #если это папка то
            for x in os.listdir(dirname):
                absx = dirname+os.sep+x # absx - путь  до файла
                if os.path.isfile(absx):
                    imagelist.append(absx) # если это файл, то записывает путь в лист
                else:
                    image_sort(absx, newdir+os.sep+x, recur=1) # 
            for name in imagelist:
                    try:
                        file_date = time.localtime(os.stat(name).st_mtime)
                    except EnvironmentError, error:
                        print 'seems error: %s with '%error, name, '/n'
                        continue
                    
                    imdir = '%s--%02d--%02d'%(file_date.tm_year,file_date.tm_mon,file_date.tm_mday)
                    imdir = os.path.join(OrigNewDir,imdir)
                    
                    if os.path.split(dirname)[-1] == os.path.split(imdir)[-1]:
                        continue
                    elif not os.path.exists(imdir):
                        print 'making dir %s'%imdir
                        os.makedirs(imdir)
                    
                   
                    head,tail = os.path.split(name)    # split orig path
                    replica = os.path.join(imdir,tail) #path file in new folder 
                    if  os.path.isfile(replica): # if file true then rename old  
                            to_ext = '.JPG'
                            if  to_ext[0] != '.':
                                 to_ext = '.'+to_ext
                            root, ext = os.path.splitext(tail)
                            print "Renaming", tail, "to", root+'_1'+ext
                            path_orig = os.path.join(head, tail)
                            path_new =  os.path.join(head, root+'_1'+to_ext)
                            os.rename(path_orig, path_new)
                            imagelist.append(path_new)                                             
                    else:          
                            try:
                                print '\n MOVE "%s" "%s"'%(name,imdir)
                                move(name,imdir)
                            except EnvironmentError:
                                print '\n Error with '+ name,

    if not recur:
        for root, dirs, files in os.walk(dirname):
            if not files:
                for name in dirs:
                    os.rmdir(os.path.join(root,name)) 
                    
                
        print 'sorting completed!'
         

image_sort(dirname, newdir) 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
##########################################################################################################
'''
by duke565
Скрипт для сортировки изображений. Собирает файлы из папок и подпапок и разбрасывает их
   по папкам указывая на них дату создания'''
##########################################################################################################  
import os
from shutil import move
import time
##########################################################################################################
dirname = '/home/duke565/splav_2/' # основаная директория
try:
    newdir = '/home/duke565/splavS/' # куда сложить
    OrigNewDir = newdir
except:
    newdir = dirname
     
def image_sort(dirname, newdir, recur= 0):
    if not recur:print 'sorting started ...'
    else: print 'sorting started in %s...'%dirname
    if not newdir: newdir = dirname
 
    imagelist = []
 
    if os.path.isdir(dirname):   #если это папка то
            for x in os.listdir(dirname):
                absx = dirname+os.sep+x # absx - путь  до файла
                if os.path.isfile(absx):
                    imagelist.append(absx) # если это файл, то записывает путь в лист
                else:
                    image_sort(absx, newdir+os.sep+x, recur=1) # 
            for name in imagelist:
                    try:
                        file_date = time.localtime(os.stat(name).st_mtime)
                    except EnvironmentError, error:
                        print 'seems error: %s with '%error, name, '/n'
                        continue
                    
                    imdir = '%s--%02d--%02d'%(file_date.tm_year,file_date.tm_mon,file_date.tm_mday)
                    imdir = os.path.join(OrigNewDir,imdir)
                    
                    if os.path.split(dirname)[-1] == os.path.split(imdir)[-1]:
                        continue
                    elif not os.path.exists(imdir):
                        print 'making dir %s'%imdir
                        os.makedirs(imdir)
                    
                   
                    head,tail = os.path.split(name)    # split orig path
                    replica = os.path.join(imdir,tail) #path file in new folder 
                    if  os.path.isfile(replica): # if file true then rename old  
                            to_ext = '.JPG'
                            if  to_ext[0] != '.':
                                 to_ext = '.'+to_ext
                            root, ext = os.path.splitext(tail)
                            print "Renaming", tail, "to", root+'_1'+ext
                            path_orig = os.path.join(head, tail)
                            path_new =  os.path.join(head, root+'_1'+to_ext)
                            os.rename(path_orig, path_new)
                            imagelist.append(path_new)                                             
                    else:          
                            try:
                                print '\n MOVE "%s" "%s"'%(name,imdir)
                                move(name,imdir)
                            except EnvironmentError:
                                print '\n Error with '+ name,

    if not recur:
        for root, dirs, files in os.walk(dirname):
            if not files:
                for name in dirs:
                    os.rmdir(os.path.join(root,name)) 
                    
                
        print 'sorting completed!'
         

image_sort(dirname, newdir) 

Строго не судите. Просто родственник попросил сделать за ничего=) Имеются конечно косяки, а в целом работает