25 сентября 2013 г.

PyCharm Community Edition

Для языка программирования Python есть очень хорошая среда, PyCharm. Это самая лучшая IDE для данного языка. Так вот сегодня вышла новая бесплатная редакция среды Community Edition.
она имеет урезанный функционал но все равно для большинства Python программистов этого будет вполне достаточно.
Здесь можно посмотреть разницу между бесплатной и платной версией.

16 сентября 2013 г.

Работаем с Ajax в Django

Для работы с Ajax в Django имеется очень легкий и простой в использовании библиотека django-dajaxice. С его помощью можно буквально за несколько минут заставить работать Ajax запросы в нашем django приложении.
Итак создаем проект на django. Открываем консоль и выполняем команду

>django-admin.py startproject mysite


Создаем приложение.

>django-admin.py startapp myapp


Убеждаемся что параметры проекта в файле settings.py имеют вид

# Django settings for mysite project.

.....

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'dajaxice.finders.DajaxiceFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

....

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
    'django.template.loaders.eggs.Loader',
)

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    'django.core.context_processors.static',
    'django.core.context_processors.request',
    'django.contrib.messages.context_processors.messages'
)

.....

import os
TEMPLATE_DIRS = (os.path.join(os.path.dirname(__file__), '..', 'templates').replace('\\','/'),)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'dajaxice',
    'myapp',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

.....
Редактируем urls.py
from django.conf.urls import patterns, include, url
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from dajaxice.core import dajaxice_autodiscover, dajaxice_config

dajaxice_autodiscover()

# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

urlpatterns = patterns('',
    url(r'^$', 'myapp.views.index'),
    url(dajaxice_config.dajaxice_url, include('dajaxice.urls')),
    # Examples:
    # url(r'^$', 'mysite.views.home', name='home'),
    # url(r'^mysite/', include('mysite.foo.urls')),
    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    # Uncomment the next line to enable the admin:
    # url(r'^admin/', include(admin.site.urls)),
)
urlpatterns += staticfiles_urlpatterns()
Пишем шаблон index.html
<!DOCTYPE html>
<html>
<head>
    <title></title>

    {% load dajaxice_templatetags %}
    {% dajaxice_js_import %}

    <script>
        function square(sourse, number){
            
            function callback_square(data){
                alert(data.number);
            }
            
            Dajaxice.myapp.views.square(callback_square, {number:number })                 

        }
    </script>
    
</head>
<body>
<input type="text" onclick="square(this, this.value)">
</body>
</html>
И обработчик запросов myapp\views.py
import json
from dajaxice.decorators import dajaxice_register
from django.shortcuts import render_to_response

def index(request):
    return render_to_response('index.html')


@dajaxice_register
def square(request, number):
    print int(number)
    number=int(number)*int(number)
    return json.dumps({'number':number})

Запускаем сервер разработки

>manage.py runserver

и открываем в браузере адрес http://127.0.0.1:8000, проверяем вводим число в поле и шелкаем по нему.

Файлы из примера,  сайт проекта.