понедельник, 17 февраля 2014 г.

Простой web-сервер на python

Создать простой веб-сервер на python несложно. Для этого нам понадобится сокеты (sockets).
Но прежде нужно определить, что мы хотим получить в результате.
А хотим мы получить простую программу на python, которая будет прослушивать какой-то порт нашего локального компьютера и принимать запросы от браузера.
1. Создадим файл my_server.py:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import socket
import time

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind(('localhost', 8080))
serversocket.listen(5)
print 'Server is waiting for connections.'
while True:
    conn, addr = serversocket.accept()
    data = conn.recv(1024)
    
    print 'Connection:', addr
    print '------------------------------'
    print "Request Data from Browser"
    print '------------------------------'
    print data
    
    conn.send(data)
    conn.close()
    # Делаем задержку, чтобы цикл не сильно загружал процессор
    time.sleep(0.1)

2. А теперь запустим этот файл в консоли Windows cmd.exe. Для этого вам нужно открыть командную строку Windows, указать путь к файлу my_server.py и нажать Enter.
Так мы запустили сервер, который ожидает запросы на адрес http://127.0.0.1:8080.

3. Запустим браузер, к примеру Internet Explorer, и перейдем по адресу  http://127.0.0.1:8080/test. В результате в браузере и консоли мы увидим следующее:



 Таким образом, в переменной data нашего скрипта хранится информация о странице, которую пользователь запрашивает. Мы можем дописать код, и сервер будет возвращать в зависимости от запроса контент той или иной html-страницы, хранящейся на сервере.
Далее можно будет сделать так, чтобы содержимое html-страницы строилось на основе данных, хранящихся в базе данных, к примеру, mysql. Однако это тема отдельных постов.

пятница, 17 января 2014 г.

Bad request (400) при сохранении модели с изображением в Django

Иногда при попытке сохранения модели в админке Django может возникнуть ошибка Bad request (400). Рассмотрим пример такой модели:
class Category(models.Model):
    """ Категория товара. Например, Куртки, Пальто """
    title = models.CharField(max_length=100, verbose_name='Название')
    image = models.ImageField(upload_to='/images/category')
    slug = models.SlugField(verbose_name=u'Псевдоним для url')
    section = models.ManyToManyField(Section, verbose_name=u'Раздел сайта')
    description = models.TextField(verbose_name='Описание')

    def __unicode__(self):
        return self.title

    class Meta:
        verbose_name = 'Категория'
        verbose_name_plural = 'Категории'
Ошибка возникла из-за неверного указания пути для сохранения загружаемого файла.
В данном случае нужно было указать:
image = models.ImageField(upload_to='images/category')

понедельник, 30 декабря 2013 г.

Альтернатива PIL (Python Image Library)

В последнее время у меня стали возникать проблемы с PIL при разработке под Windows. Как только в django я создаю модель с ImageField, возникает ошибка:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xed in position 20: ordinal not in range(128)

Вникать в суть проблемы не стал, вместо PIL установил пакет Pillow.
После установки Pillow под Windows 7 приведенная выше ошибка исчезла и я, наконец, смог создать модель, содержащую ImageField.

среда, 18 декабря 2013 г.

Минификация javascript файлов на python

Одним из методов увеличения скорости загрузки страницы является минификация javascript-файлов, при которой из файла удаляются комментарии, пробелы, переносы строк.
На python есть модуль jsmin, легко позволяющий сделать это. Скачайте этот модуль и достаньте из архива папку jsmin с кодом модуля.

воскресенье, 10 ноября 2013 г.

Изучаем Python на конкретном примере

Есть отличное видео, где на конкретном примере показывается, как Python может сыграть полезную роль. Как говорится, лучше один раз увидеть, чем сто раз услышать.


четверг, 7 ноября 2013 г.

Валидация форм в Django

Пусть у нас есть простая форма регистрации пользователя в системе на Django. Для того, чтобы пользователь мог зарегистрироваться, нужно предоставить ему возможность указать логин и пароль:

вторник, 29 октября 2013 г.

Веб-форма средствами Django

В статье Простейшая форма на Django мы научились создавать и обрабатывать форму сложным путем, прописывая все детали. Там мы выяснили, что при большом количестве полей такой способ чреват ошибками. Поэтому сейчас мы научимся создавать форму обратной связи средствами Django, используя Django forms.