Показаны сообщения с ярлыком django. Показать все сообщения
Показаны сообщения с ярлыком django. Показать все сообщения

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

Читал хабр, подкинули интересную ссылку на сайт, там собраны краткие подсказки, шпаргалки по разным языкам программирования и не только.
http://cheat-sheets.org
В общем, очень рекомендую.
Я уже скачал хелп по Django, Python, Regular Expressions.

А там ещё есть:

понедельник, 16 января 2012 г.

Создание схемы базы данных из имеющейся базы данных в Django| database schema from existing database in django

Сделал базу данных в django. Как сделать из неё картинку, схему базы данных?


Вот возник такой вопрос, и мне подсказали:
http://code.google.com/p/django-command-extensions/ устанавливаете, потом manage.py graph_models, только надо еще http://www.graphviz.org/ иметь в системе установленным


Более развёрнуто:

вторник, 27 декабря 2011 г.

Django ORM без Джанги

Буду краток.

Проблема: использовать прелести Django ORM, а он хорош, но для проекта, который не для веба.

Есть ответы на  stackoverflow
http://stackoverflow.com/questions/579511/using-only-the-db-part-of-django
а вот это я не пробовал
http://pypi.python.org/pypi/django-standalone

воскресенье, 6 ноября 2011 г.

Добавление robots.txt и favicon.ico в Django 1.3

Добавляем следующее в urls.py и радуемся. Файл robots.txt кладём в шаблоны
примерное его содержание
#
# robots.txt http://www.???.ru/
#

User-agent: *
Disallow: /admin

User-agent: Yandex
Disallow: /admin
Host: www.???.ru
Crawl-delay: 10

Sitemap: http://www.???.ru/sitemap.xml
##################

А иконку кладём в папку со статическими файлами сайта.


urls.py:

from django.conf.urls.defaults import patterns, include, url
from django.views.generic.base import TemplateView, RedirectView

class TextPlainView(TemplateView):
def render_to_response(self, context, **kwargs):
return super(TextPlainView, self).render_to_response(
context, content_type='text/plain', **kwargs)

urlpatterns = patterns('',
url(r'^robots\.txt$', TextPlainView.as_view(template_name='robots.txt')),
url(r'^favicon\.ico$', RedirectView.as_view(url='/media/img/favicon.ico')),
)


Зачем нужен robots.txt?
Для того чтобы поисковому боту сказать, куда заглядывать не нужно, наверняка ещё для чего-то, гуглить лень, можете добавить комменты зачем, перенесу в пост.


Зачем нужен favicon.ico?
Это иконка которая будет показываться в левом углу вкладки в браузере, и будет отображаться при добавлении в избранное, она в общем так и расшифровывается favicon (favorite  icon) типа любимая иконка.


PS: Не забываем, что это не полный urls.py, а только те строчки, которые добавляют robots.txt и favicon.ico.

Я в первый раз попробовал это на woman-clinics.ru, сайт "Женской консультации 2х2"  про акушерство, гинекологию и др.




суббота, 20 ноября 2010 г.

Отладка почтовых сообщений в django

python -m smtpd -n -c DebuggingServer localhost:25
Эта одностроковая команда запускает сервер SMTP на порту 1025. Здесь используется стандартная библиотека smtpd для языка Python (задается при помощи -m smtpd) и передаются три аргумента: -n, -c DebuggingServer и localhost:1025.
Аргумент -n указывает Python-у не устанавливать для setuid (позволяет изменять пользователя) значение "nobody" — код будет работать под вашим пользователем.
Аргумент -c DebuggingServer указывает Python-у использовать класс DebuggingServer в качестве реализации SMTP, которая печатает каждое получаемое сообщение в выходной поток stdout.
Аргумент localhost:1025 указывает Python-у запускать SMTP сервер как locahost на порту1025.
Однако, если вы захотите запустить сервер на стандартном порту 25, вам нужно будет использовать команду sudo, поскольку только пользователь с правами root может запускать сервисы на портах 1 — 1024. Они также известны как привилегированные порты.

пятница, 29 октября 2010 г.

south на сервере django

Странное название заметки, объясню.
Тезисами, потому что некогда.
1. Сделал сайтик, залил на сервачок, есть кастомные апы и плагины для Django-CMS, они создают свои таблицы
2. Захотел поменять таблицы, поставил South
3. Выполнил инит, и миграции при изменении таблиц в приложении
4. Залил измененный код на сервер
5. Удалил нулевую миграцию для апа, потому что оно создаёт в ней архитектуру для таблицы и саму таблицу
6. запустил python manage.py migrate appname

среда, 20 октября 2010 г.

Установка South(Unknown command: 'schemamigration')

Привет, бедный программист, который получил
D:\PycharmProjects\aproduct\products>python manage.py schemamigration
Unknown command: 'schemamigration'
Type 'manage.py help' for usage.
При попытке запустить комманду manage.py schemamigration из south tutorial :).
Возможный и простой вариант фикса этой проблемы: скопировать папку south из дистрибутива South в папку рядом с твоими аппами.
Более сложный, посмотреть в папку
c:\Python25\Lib\site-packages\South-0.6.1-py2.5.egg\south\management\commands
Обнаружить следующее, и понять, что чего-то не хватает, а именно schemamigration.py, как это решить думайте сами :)
convert_to_south.py
convert_to_south.pyc
migrate.py
migrate.pyc
startmigration.py
startmigration.pyc
syncdb.py
syncdb.pyc
test.py
test.pyc
testserver.py
testserver.pyc
__init__.py
__init__.pyc



А тут короче не заработала у меня даже 0.7.2 версия, хотя кто-то говорил, что нормально работает с M2M (many to many), пофиксил так, но не понял, почему заработало.
В это файле в 177 строке нужно вываливание из цикла добавить break
D:\PycharmProjects\southtest\south\db\generic.py
for sql in self.deferred_sql:
#AAAAAAAAAAAAAAAAAAAAAAA
self.execute(sql)
break

Реализация динамических фильтров в Django

Проблема
Постановка задачи: Есть таблица, с какими-то полями, к примеру такая
class Product(models.Model):
place = models.ManyToManyField(Place) # место расположения продукта
product_type = models.ManyToManyField(ProductType) # тип продукта
producer = models.ManyToManyField(Producer) # производитель


product_name = models.CharField(_(u'product name'), max_length=200) # название продукта
unit = models.CharField(_(u'unit'), max_length=15, blank=True, null=True) # единицы измерения
quantity = models.CharField(_(u'unit count'), max_length=15, blank=True, null=True) # шт/уп
price = models.FloatField(_(u'price'), blank=True, null=True) # цена
price_discount = models.FloatField(_(u'price discount'), blank=True, null=True) # цена со скидкой
description = models.CharField(_(u'description'), max_length=300, blank=True, null=True)
article = models.TextField(_(u'article'), max_length=5000, blank=True, null=True)
  1. image = models.ImageField(upload_to="uploads/images/", blank=True, null=True)


class Meta:
verbose_name = _(u'Product')
verbose_name_plural = _(u'Products')
__unicode__=lambda self:self.product_name


Нужно чтобы на страничке была формочка, которая умеет фильтровать содержимое. К примеру по цене.
Решение
  • Сначала делаем форму
forms.py
from django import forms
class FilterForm(forms.Form):
lo_price = forms.IntegerField(required=False)
hi_price = forms.IntegerField(required=False)
  • Добавляем отображение формы в шаблон
    <form action="{{ request.get_full_path }}" method="post">
    {{ form.as_p }}
    <input type="submit" value="Submit" />
    </form>
    Переменная {{ request.get_full_path }} говорит говорит текущий урл странички, на которой находимся (django-cms).
  • Теперь обработку этой формы добавляем во вьюху
if context['request'].POST: # If the form has been submitted...
form = FilterForm(context['request'].POST) # A form bound to the POST data


if form.is_valid(): # All validation rules pass
myquery = Q()
if form.cleaned_data['lo_price']:
myquery = Q(price__gt = form.cleaned_data['lo_price'])
if form.cleaned_data['hi_price']:
myquery &= Q(price__lt = form.cleaned_data['hi_price'])
products = Product.objects.filter(
Q(product_type=product_type),
Q(place=place),myquery)






context['products'] = products
context['form'] = form
return context
else:
form = FilterForm() # An unbound form
Тут происходит следующее, если нам запостили данные, то мы производим проверку на валидность данных. Фишка myquery = Q(), это чудесная вещь, создание пустого Q-объекта.
Далее, если нам заданы максимальная и минимальная цена, то мы их добавляем в наш Q-объект.
if context['request'].POST это мы проверяем, что нам пришёл запрос post, такая странная форма записи, потому что наш request засунут в контекст django-cms, т. к. это кусок кода взят из django-cms плагина.
В общем, будет время напишу по-аккуратнее, но суть изложил


Основное
В django можно создавать пустые Q() объекты, где-то час искал