<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
	<id>https://wiki.welard.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=95.133.12.5&amp;*</id>
	<title>Wiki Welard - Внесок користувача [uk]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.welard.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=95.133.12.5&amp;*"/>
	<link rel="alternate" type="text/html" href="https://wiki.welard.com/index.php?title=%D0%A1%D0%BF%D0%B5%D1%86%D1%96%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0:%D0%92%D0%BD%D0%B5%D1%81%D0%BE%D0%BA/95.133.12.5"/>
	<updated>2026-10-27T23:41:01Z</updated>
	<subtitle>Внесок користувача</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>https://wiki.welard.com/index.php?title=Django_FAQ&amp;diff=2014</id>
		<title>Django FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.welard.com/index.php?title=Django_FAQ&amp;diff=2014"/>
		<updated>2010-07-26T13:02:34Z</updated>

		<summary type="html">&lt;p&gt;95.133.12.5: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Основні команди та нюанси при роботі з системою [[Django]]  ==&lt;br /&gt;
 django-admin.py startproject mysite&lt;br /&gt;
 python manage.py startapp books&lt;br /&gt;
 python manage.py validate&lt;br /&gt;
 python manage.py sqlall books&lt;br /&gt;
 python manage.py syncdb&lt;br /&gt;
 python manage.py inspectdb&lt;br /&gt;
== Модуль для роботи із зображеннями ==&lt;br /&gt;
 http://www.pythonware.com/products/pil/ &lt;br /&gt;
== Створення бази даних ==&lt;br /&gt;
 create database exam2 charset=utf8;&lt;br /&gt;
 ALTER DATABASE exam2 DEFAULT CHARACTER SET 'utf8'&lt;br /&gt;
== Циклічний перебір ==&lt;br /&gt;
 {% cycle 'row1' 'row2'&amp;amp;nbsp;%} &lt;br /&gt;
== Перегрупування в шаблоні ==&lt;br /&gt;
&amp;lt;pre&amp;gt;     {% regroup people by gender as gender_list&amp;amp;nbsp;%}&lt;br /&gt;
     {% regroup people|dictsort:&amp;quot;gender&amp;quot; by gender as gender_list&amp;amp;nbsp;%}&lt;br /&gt;
     &amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
     {% for gender in gender_list&amp;amp;nbsp;%}&lt;br /&gt;
        &amp;amp;lt;li&amp;amp;gt;{{ gender.grouper }}&lt;br /&gt;
        &amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
            {% for item in gender.list&amp;amp;nbsp;%}&lt;br /&gt;
            &amp;amp;lt;li&amp;amp;gt;{{ item.first_name }} {{ item.last_name }}&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
            {% endfor&amp;amp;nbsp;%}&lt;br /&gt;
        &amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
     {% endfor&amp;amp;nbsp;%}&lt;br /&gt;
     &amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
== Шаблон форми == &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;quot;&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;dl&amp;amp;gt;&lt;br /&gt;
{% for field in form %}&lt;br /&gt;
    &amp;amp;lt;dt&amp;amp;gt;{{ field.label_tag }}{% if field.field.required %}*{% endif %}&amp;amp;lt;/dt&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;dd&amp;amp;gt;{{ field }}&amp;amp;lt;/dd&amp;amp;gt;&lt;br /&gt;
    {% if field.help_text %}&amp;amp;lt;dd&amp;amp;gt;{{ field.help_text }}&amp;amp;lt;/dd&amp;amp;gt;{% endif %}&lt;br /&gt;
    {% if field.errors %}&amp;amp;lt;dd class=&amp;quot;myerrors&amp;quot;&amp;amp;gt;{{ field.errors }}&amp;amp;lt;/dd&amp;amp;gt;{% endif %}&lt;br /&gt;
{% endfor %}&lt;br /&gt;
&amp;amp;lt;/dl&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/form&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
== Робота з формою в views.py ==&lt;br /&gt;
 instance = Instance(required_field='value')&lt;br /&gt;
 form = InstanceForm(request.POST, instance=instance)&lt;br /&gt;
 new_instance = form.save()&lt;br /&gt;
&lt;br /&gt;
 instance = form.save(commit=False)&lt;br /&gt;
 instance.required_field = 'new value'&lt;br /&gt;
 new_instance = instance.save()&lt;br /&gt;
&lt;br /&gt;
== Збереження в змінній форми ==&lt;br /&gt;
allNodes = Form.serialize(&amp;quot;myform&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
== Профілі користувачів  ==&lt;br /&gt;
 in settings.py:&lt;br /&gt;
 AUTH_PROFILE_MODULE = 'projectname.UserProfile'&lt;br /&gt;
в інших відповідних файлах&lt;br /&gt;
 class UserProfile(models.Model):&lt;br /&gt;
     user = models.OneToOneField(User, related_name='%(class)s', primary_key=True)&lt;br /&gt;
&lt;br /&gt;
 from django.contrib.auth.models import User&lt;br /&gt;
 u = User.objects.get(username='test')&lt;br /&gt;
 user_profile = u.profile.get()&lt;br /&gt;
&lt;br /&gt;
== Pagination - розбиття на сторінки ==&lt;br /&gt;
 from django.core.paginator import Paginator&lt;br /&gt;
 objects = ['john', 'paul', 'george', 'ringo']&lt;br /&gt;
 p = Paginator(objects, 2)&lt;br /&gt;
 page1 = p.page(1)&lt;br /&gt;
 page1.object_list&lt;br /&gt;
&lt;br /&gt;
== Багатомовність ==&lt;br /&gt;
    django-admin.py makemessages -l uk&lt;br /&gt;
    django-admin.py compilemessages&lt;br /&gt;
&lt;br /&gt;
== Групування в SQL ==&lt;br /&gt;
 &lt;br /&gt;
 qs = Schedule.objects.select_related().filter(pub_date__gte=datetime.now())&lt;br /&gt;
 qs.query.group_by = ['country_id'] #!!!!!!&lt;br /&gt;
 return {'schedule': qs}&lt;br /&gt;
&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; qs = TumbleItem.objects.all()&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; qs.query.group_by = ['item_type']&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; qs.query.having = ['COUNT(item_type) &amp;amp;gt; 1']&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; item_types = [i.item_type for i in qs]&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; item_types&lt;br /&gt;
&lt;br /&gt;
== Дописування методів в адмінку ==&lt;br /&gt;
    def remove(self):&lt;br /&gt;
        from django.core.urlresolvers import reverse&lt;br /&gt;
        return '&amp;amp;lt;a href=&amp;quot;%s&amp;quot; class=&amp;quot;deletelink&amp;quot;&amp;amp;gt;Delete&amp;amp;lt;/a&amp;amp;gt;'&amp;amp;nbsp;% reverse( &amp;quot;django.contrib.admin.views.main.delete_stage&amp;quot;,&lt;br /&gt;
            args = ( self.__class__._meta.app_label, self.__class__.__name__.lower(), self._get_pk_val(), ) )&lt;br /&gt;
    remove.allow_tags = True&lt;br /&gt;
&lt;br /&gt;
== Приклад WSGI ==&lt;br /&gt;
&lt;br /&gt;
 sys.stdout = sys.stderr&lt;br /&gt;
 import os, sys&lt;br /&gt;
 sys.path.append('/usr/lib/python2.4/site-packages/django')&lt;br /&gt;
 sys.path.append('/var/www/paradise/paradise')&lt;br /&gt;
 sys.path.append('/var/www/paradise')&lt;br /&gt;
 os.environ['DJANGO_SETTINGS_MODULE'] = 'paradise.settings'&lt;br /&gt;
 import django.core.handlers.wsgi&lt;br /&gt;
 application = django.core.handlers.wsgi.WSGIHandler()&lt;br /&gt;
&lt;br /&gt;
== Профілі користувачів ==&lt;br /&gt;
&lt;br /&gt;
 from django.contrib import admin&lt;br /&gt;
 from profile.models import UserProfile&lt;br /&gt;
 from django.contrib.auth.models import User&lt;br /&gt;
 class ProfileInline(admin.StackedInline):&lt;br /&gt;
     model = UserProfile&lt;br /&gt;
     extra = 1&lt;br /&gt;
     max_num = 1&lt;br /&gt;
&lt;br /&gt;
 class ProfileAdmin(admin.ModelAdmin):&lt;br /&gt;
     inlines = (ProfileInline,)&lt;br /&gt;
     admin.site.unregister(User)  #!!!&lt;br /&gt;
     admin.site.register(User, ProfileAdmin)&lt;br /&gt;
&lt;br /&gt;
== Профілі 2 ==&lt;br /&gt;
&lt;br /&gt;
 from django.contrib.auth.models import User&lt;br /&gt;
 User.add_to_class('department',models.CharField(max_length=250,blank=True))&lt;br /&gt;
 User.add_to_class('position',models.CharField(max_length=250,blank=True))&lt;br /&gt;
 User._meta.admin.fields += (('Custom', {'fields': ('department','position',)}),)&lt;br /&gt;
 User._meta.admin.list_display += ('department','position',)&lt;br /&gt;
 def get_user_name(self):&lt;br /&gt;
     if self.first_name or self.last_name:&lt;br /&gt;
         return self.first_name + &amp;quot; &amp;quot; + self.last_name&lt;br /&gt;
     return self.username&lt;br /&gt;
 User.add_to_class(&amp;quot;get_user_name&amp;quot;,get_user_name)&lt;br /&gt;
&lt;br /&gt;
== Якщо є яйця в пітоні ==&lt;br /&gt;
&lt;br /&gt;
 /etc/sysconfig/httpd&lt;br /&gt;
 export PYTHON_EGG_CACHE=&amp;quot;/var/cache/python-eggs&amp;quot; &lt;br /&gt;
&lt;br /&gt;
== Кеш в Апачі ==&lt;br /&gt;
добавити в апач конфігурацію&lt;br /&gt;
 &amp;lt;IfModule mod_expires.c&amp;gt;&lt;br /&gt;
     &amp;lt;FilesMatch &amp;quot;\.(jpg|gif|png|css|js)$&amp;quot;&amp;gt;&lt;br /&gt;
          ExpiresActive on&lt;br /&gt;
          ExpiresDefault &amp;quot;access plus 3 days&amp;quot;&lt;br /&gt;
     &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Кеш в Django ==&lt;br /&gt;
 from django.views.decorators.cache import cache_page&lt;br /&gt;
 ....&lt;br /&gt;
 @cache_page(60 * 15)&lt;br /&gt;
 def show_page(request, url=None, page_num=0):&lt;br /&gt;
     ....&lt;br /&gt;
     ....&lt;br /&gt;
у файлі admin.py:&lt;br /&gt;
 from django.core.cache import cache&lt;br /&gt;
 from django.conf import settings&lt;br /&gt;
 ....     &lt;br /&gt;
 def save_model(self, request, obj, form, change):&lt;br /&gt;
     #cache.delete('views.decorators.cache.cache_header.%s./%s/' % (settings.CACHE_MIDDLEWARE_KEY_PREFIX, obj.url))&lt;br /&gt;
     '''cache._cache.flush_all()''' # ось так для memcache!!! &lt;br /&gt;
     obj.save()&lt;br /&gt;
&lt;br /&gt;
== Корзина ==&lt;br /&gt;
&lt;br /&gt;
 def delete(self, trash=True):&lt;br /&gt;
     if not self.trashed_at and trash:&lt;br /&gt;
         self.trashed_at = datetime.now()&lt;br /&gt;
         self.save()&lt;br /&gt;
     else:&lt;br /&gt;
         super(SomeModel, self).delete()&lt;br /&gt;
&lt;br /&gt;
== Використання unordered_list ==&lt;br /&gt;
&amp;lt;pre&amp;gt;['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']], then {{ var|unordered_list }} would return:&lt;br /&gt;
&amp;amp;lt;li&amp;amp;gt;States&lt;br /&gt;
&amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;li&amp;amp;gt;Kansas&lt;br /&gt;
        &amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;li&amp;amp;gt;Lawrence&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;li&amp;amp;gt;Topeka&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;li&amp;amp;gt;Illinois&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Використання календаря ==&lt;br /&gt;
&amp;lt;pre&amp;gt;class EventSplitDateTime(forms.SplitDateTimeWidget):&lt;br /&gt;
    def __init__(self, attrs=None):&lt;br /&gt;
        widgets = [forms.TextInput(attrs={'class': 'vDateField'}), &lt;br /&gt;
                   forms.TextInput(attrs={'class': 'vTimeField'})]&lt;br /&gt;
        # Note that we're calling MultiWidget, not SplitDateTimeWidget, because&lt;br /&gt;
        # we want to define widgets.&lt;br /&gt;
        forms.MultiWidget.__init__(self, widgets, attrs)&lt;br /&gt;
&lt;br /&gt;
    def format_output(self, rendered_widgets):&lt;br /&gt;
        return mark_safe(u'%s&amp;lt;br /&amp;gt;%s' % (rendered_widgets[0], rendered_widgets[1]))&lt;br /&gt;
&lt;br /&gt;
class EventForm(forms.Form):&lt;br /&gt;
    start = forms.DateTimeField(label=ugettext(&amp;quot;Start&amp;quot;), widget=EventSplitDateTime())&lt;br /&gt;
    end = forms.DateTimeField(label=ugettext(&amp;quot;End&amp;quot;), widget=EventSplitDateTime())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Рестарт WSGI без апача ==&lt;br /&gt;
&amp;lt;pre&amp;gt;@never_cache&lt;br /&gt;
def restart(request):&lt;br /&gt;
    ''' Перезапуск демона '''&lt;br /&gt;
    if request.META['mod_wsgi.process_group'] != '':&lt;br /&gt;
        import signal, os&lt;br /&gt;
        os.kill(os.getpid(), signal.SIGINT)&lt;br /&gt;
        ret = 'restarted'&lt;br /&gt;
    else:&lt;br /&gt;
        ret = 'not find porcess_group'&lt;br /&gt;
        &lt;br /&gt;
    return HttpResponse(ret, mimetype='text/plain')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Фільтрація в моделі в зовнішньому ключі ==&lt;br /&gt;
 models.ForeignKey(Test, limit_choices_to = {'pub_date__lte': datetime.now})&lt;br /&gt;
&lt;br /&gt;
== Django &amp;amp; Cron ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import sys&lt;br /&gt;
import settings&lt;br /&gt;
from django.core.management import setup_environ&lt;br /&gt;
setup_environ(settings)&lt;br /&gt;
module_name = sys.argv[1]&lt;br /&gt;
exec('import %s' % module_name)&lt;br /&gt;
exec('%s.%s' % (module_name, ' '.join(sys.argv[2:])))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И теперь при помощи этого скрипта мы можем вызывать функции наших “вьюшек” из командной строки и из cron:&lt;br /&gt;
 # python /path/to/project/run.py report.views &amp;quot;send_emails()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Багато з'єднань з базою ==&lt;br /&gt;
 from django.db import load_backend&lt;br /&gt;
 myBackend = load_backend('postgresql_psycopg2') # or 'mysql', 'sqlite3', 'oracle'&lt;br /&gt;
 myConnection = myBackend.DatabaseWrapper({&lt;br /&gt;
     'DATABASE_HOST': '192.168.1.1',&lt;br /&gt;
     'DATABASE_NAME': 'my_database',&lt;br /&gt;
     'DATABASE_OPTIONS': {},&lt;br /&gt;
     'DATABASE_PASSWORD': &amp;quot;&amp;quot;,&lt;br /&gt;
     'DATABASE_PORT': &amp;quot;&amp;quot;,&lt;br /&gt;
     'DATABASE_USER': &amp;quot;my_user&amp;quot;,&lt;br /&gt;
     'TIME_ZONE': &amp;quot;America/New_York&amp;quot;,})&lt;br /&gt;
 # Now we can do all the standard raw sql stuff with myConnection.&lt;br /&gt;
 myCursor = myConnection.cursor()&lt;br /&gt;
 myCursor.execute(&amp;quot;SELECT COUNT(1) FROM my_table;&amp;quot;)&lt;br /&gt;
 myCursor.fetchone()&lt;br /&gt;
&lt;br /&gt;
== Автоматична перегрузка коду (для Apache) ==&lt;br /&gt;
в конфіг добавляємо&lt;br /&gt;
 WSGIScriptReloading On&lt;br /&gt;
 WSGIReloadMechanism Process&lt;br /&gt;
&lt;br /&gt;
 $ touch my_project.wsgi&lt;br /&gt;
== Доступ до url адмінки ==&lt;br /&gt;
 from django.core import urlresolvers&lt;br /&gt;
 url = urlresolvers.reverse('admin:mysite_product_change', args=(obj.id,))&lt;br /&gt;
&lt;br /&gt;
== Фільтрація по датам ==&lt;br /&gt;
 extra_data = {&amp;quot;d&amp;quot;: &amp;quot;date(created)&amp;quot;}&lt;br /&gt;
 result = MyModel.objects.extra(extra_data).values('d').annotate(cnt=Count('pk')).order_by()&lt;br /&gt;
== RAW SQL ==&lt;br /&gt;
 authors = Author.objects.raw(&amp;quot;SELECT *, age(birth_date) as age FROM library_authors&amp;quot;)&lt;br /&gt;
 for author in authors:&lt;br /&gt;
     print &amp;quot;%s is %s.&amp;quot; % (author.first_name, author.age)&lt;br /&gt;
== Тестовий поштовий сервер ==&lt;br /&gt;
 python -m smtpd -n -c DebuggingServer localhost:1025&lt;/div&gt;</summary>
		<author><name>95.133.12.5</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.welard.com/index.php?title=Django_FAQ&amp;diff=2013</id>
		<title>Django FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.welard.com/index.php?title=Django_FAQ&amp;diff=2013"/>
		<updated>2010-07-26T13:01:46Z</updated>

		<summary type="html">&lt;p&gt;95.133.12.5: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Основні команди та нюанси при роботі з системою [[Django]]  ==&lt;br /&gt;
 django-admin.py startproject mysite&lt;br /&gt;
 python manage.py startapp books&lt;br /&gt;
 python manage.py validate&lt;br /&gt;
 python manage.py sqlall books&lt;br /&gt;
 python manage.py syncdb&lt;br /&gt;
 python manage.py inspectdb&lt;br /&gt;
== Модуль для роботи із зображеннями ==&lt;br /&gt;
 http://www.pythonware.com/products/pil/ &lt;br /&gt;
== Створення бази даних ==&lt;br /&gt;
 create database exam2 charset=utf8;&lt;br /&gt;
 ALTER DATABASE exam2 DEFAULT CHARACTER SET 'utf8'&lt;br /&gt;
== Циклічний перебір ==&lt;br /&gt;
 {% cycle 'row1' 'row2'&amp;amp;nbsp;%} &lt;br /&gt;
== Перегрупування в шаблоні ==&lt;br /&gt;
&amp;lt;pre&amp;gt;     {% regroup people by gender as gender_list&amp;amp;nbsp;%}&lt;br /&gt;
     {% regroup people|dictsort:&amp;quot;gender&amp;quot; by gender as gender_list&amp;amp;nbsp;%}&lt;br /&gt;
     &amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
     {% for gender in gender_list&amp;amp;nbsp;%}&lt;br /&gt;
        &amp;amp;lt;li&amp;amp;gt;{{ gender.grouper }}&lt;br /&gt;
        &amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
            {% for item in gender.list&amp;amp;nbsp;%}&lt;br /&gt;
            &amp;amp;lt;li&amp;amp;gt;{{ item.first_name }} {{ item.last_name }}&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
            {% endfor&amp;amp;nbsp;%}&lt;br /&gt;
        &amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
     {% endfor&amp;amp;nbsp;%}&lt;br /&gt;
     &amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
== Шаблон форми == &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;quot;&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;dl&amp;amp;gt;&lt;br /&gt;
{% for field in form %}&lt;br /&gt;
    &amp;amp;lt;dt&amp;amp;gt;{{ field.label_tag }}{% if field.field.required %}*{% endif %}&amp;amp;lt;/dt&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;dd&amp;amp;gt;{{ field }}&amp;amp;lt;/dd&amp;amp;gt;&lt;br /&gt;
    {% if field.help_text %}&amp;amp;lt;dd&amp;amp;gt;{{ field.help_text }}&amp;amp;lt;/dd&amp;amp;gt;{% endif %}&lt;br /&gt;
    {% if field.errors %}&amp;amp;lt;dd class=&amp;quot;myerrors&amp;quot;&amp;amp;gt;{{ field.errors }}&amp;amp;lt;/dd&amp;amp;gt;{% endif %}&lt;br /&gt;
{% endfor %}&lt;br /&gt;
&amp;amp;lt;/dl&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/form&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
== Робота з формою в views.py ==&lt;br /&gt;
 instance = Instance(required_field='value')&lt;br /&gt;
 form = InstanceForm(request.POST, instance=instance)&lt;br /&gt;
 new_instance = form.save()&lt;br /&gt;
&lt;br /&gt;
 instance = form.save(commit=False)&lt;br /&gt;
 instance.required_field = 'new value'&lt;br /&gt;
 new_instance = instance.save()&lt;br /&gt;
&lt;br /&gt;
== Збереження в змінній форми ==&lt;br /&gt;
allNodes = Form.serialize(&amp;quot;myform&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
== Профілі користувачів  ==&lt;br /&gt;
 in settings.py:&lt;br /&gt;
 AUTH_PROFILE_MODULE = 'projectname.UserProfile'&lt;br /&gt;
в інших відповідних файлах&lt;br /&gt;
 class UserProfile(models.Model):&lt;br /&gt;
     user = models.OneToOneField(User, related_name='%(class)s', primary_key=True)&lt;br /&gt;
&lt;br /&gt;
 from django.contrib.auth.models import User&lt;br /&gt;
 u = User.objects.get(username='test')&lt;br /&gt;
 user_profile = u.profile.get()&lt;br /&gt;
&lt;br /&gt;
== Pagination - розбиття на сторінки ==&lt;br /&gt;
 from django.core.paginator import Paginator&lt;br /&gt;
 objects = ['john', 'paul', 'george', 'ringo']&lt;br /&gt;
 p = Paginator(objects, 2)&lt;br /&gt;
 page1 = p.page(1)&lt;br /&gt;
 page1.object_list&lt;br /&gt;
&lt;br /&gt;
== Багатомовність ==&lt;br /&gt;
    django-admin.py makemessages -l uk&lt;br /&gt;
    django-admin.py compilemessages&lt;br /&gt;
&lt;br /&gt;
== Групування в SQL ==&lt;br /&gt;
 &lt;br /&gt;
 qs = Schedule.objects.select_related().filter(pub_date__gte=datetime.now())&lt;br /&gt;
 qs.query.group_by = ['country_id'] #!!!!!!&lt;br /&gt;
 return {'schedule': qs}&lt;br /&gt;
&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; qs = TumbleItem.objects.all()&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; qs.query.group_by = ['item_type']&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; qs.query.having = ['COUNT(item_type) &amp;amp;gt; 1']&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; item_types = [i.item_type for i in qs]&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; item_types&lt;br /&gt;
&lt;br /&gt;
== Дописування методів в адмінку ==&lt;br /&gt;
    def remove(self):&lt;br /&gt;
        from django.core.urlresolvers import reverse&lt;br /&gt;
        return '&amp;amp;lt;a href=&amp;quot;%s&amp;quot; class=&amp;quot;deletelink&amp;quot;&amp;amp;gt;Delete&amp;amp;lt;/a&amp;amp;gt;'&amp;amp;nbsp;% reverse( &amp;quot;django.contrib.admin.views.main.delete_stage&amp;quot;,&lt;br /&gt;
            args = ( self.__class__._meta.app_label, self.__class__.__name__.lower(), self._get_pk_val(), ) )&lt;br /&gt;
    remove.allow_tags = True&lt;br /&gt;
&lt;br /&gt;
== Приклад WSGI ==&lt;br /&gt;
&lt;br /&gt;
 sys.stdout = sys.stderr&lt;br /&gt;
 import os, sys&lt;br /&gt;
 sys.path.append('/usr/lib/python2.4/site-packages/django')&lt;br /&gt;
 sys.path.append('/var/www/paradise/paradise')&lt;br /&gt;
 sys.path.append('/var/www/paradise')&lt;br /&gt;
 os.environ['DJANGO_SETTINGS_MODULE'] = 'paradise.settings'&lt;br /&gt;
 import django.core.handlers.wsgi&lt;br /&gt;
 application = django.core.handlers.wsgi.WSGIHandler()&lt;br /&gt;
&lt;br /&gt;
== Профілі користувачів ==&lt;br /&gt;
&lt;br /&gt;
 from django.contrib import admin&lt;br /&gt;
 from profile.models import UserProfile&lt;br /&gt;
 from django.contrib.auth.models import User&lt;br /&gt;
 class ProfileInline(admin.StackedInline):&lt;br /&gt;
     model = UserProfile&lt;br /&gt;
     extra = 1&lt;br /&gt;
     max_num = 1&lt;br /&gt;
&lt;br /&gt;
 class ProfileAdmin(admin.ModelAdmin):&lt;br /&gt;
     inlines = (ProfileInline,)&lt;br /&gt;
     admin.site.unregister(User)  #!!!&lt;br /&gt;
     admin.site.register(User, ProfileAdmin)&lt;br /&gt;
&lt;br /&gt;
== Профілі 2 ==&lt;br /&gt;
&lt;br /&gt;
 from django.contrib.auth.models import User&lt;br /&gt;
 User.add_to_class('department',models.CharField(max_length=250,blank=True))&lt;br /&gt;
 User.add_to_class('position',models.CharField(max_length=250,blank=True))&lt;br /&gt;
 User._meta.admin.fields += (('Custom', {'fields': ('department','position',)}),)&lt;br /&gt;
 User._meta.admin.list_display += ('department','position',)&lt;br /&gt;
 def get_user_name(self):&lt;br /&gt;
     if self.first_name or self.last_name:&lt;br /&gt;
         return self.first_name + &amp;quot; &amp;quot; + self.last_name&lt;br /&gt;
     return self.username&lt;br /&gt;
 User.add_to_class(&amp;quot;get_user_name&amp;quot;,get_user_name)&lt;br /&gt;
&lt;br /&gt;
== Якщо є яйця в пітоні ==&lt;br /&gt;
&lt;br /&gt;
 /etc/sysconfig/httpd&lt;br /&gt;
 export PYTHON_EGG_CACHE=&amp;quot;/var/cache/python-eggs&amp;quot; &lt;br /&gt;
&lt;br /&gt;
== Кеш в Апачі ==&lt;br /&gt;
добавити в апач конфігурацію&lt;br /&gt;
 &amp;lt;IfModule mod_expires.c&amp;gt;&lt;br /&gt;
     &amp;lt;FilesMatch &amp;quot;\.(jpg|gif|png|css|js)$&amp;quot;&amp;gt;&lt;br /&gt;
          ExpiresActive on&lt;br /&gt;
          ExpiresDefault &amp;quot;access plus 3 days&amp;quot;&lt;br /&gt;
     &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Кеш в Django ==&lt;br /&gt;
 from django.views.decorators.cache import cache_page&lt;br /&gt;
 ....&lt;br /&gt;
 @cache_page(60 * 15)&lt;br /&gt;
 def show_page(request, url=None, page_num=0):&lt;br /&gt;
     ....&lt;br /&gt;
     ....&lt;br /&gt;
у файлі admin.py:&lt;br /&gt;
 from django.core.cache import cache&lt;br /&gt;
 from django.conf import settings&lt;br /&gt;
 ....     &lt;br /&gt;
 def save_model(self, request, obj, form, change):&lt;br /&gt;
     #cache.delete('views.decorators.cache.cache_header.%s./%s/' % (settings.CACHE_MIDDLEWARE_KEY_PREFIX, obj.url))&lt;br /&gt;
     '''cache._cache.flush_all()''' # ось так для memcache!!! &lt;br /&gt;
     obj.save()&lt;br /&gt;
&lt;br /&gt;
== Корзина ==&lt;br /&gt;
&lt;br /&gt;
 def delete(self, trash=True):&lt;br /&gt;
     if not self.trashed_at and trash:&lt;br /&gt;
         self.trashed_at = datetime.now()&lt;br /&gt;
         self.save()&lt;br /&gt;
     else:&lt;br /&gt;
         super(SomeModel, self).delete()&lt;br /&gt;
&lt;br /&gt;
== Використання unordered_list ==&lt;br /&gt;
&amp;lt;pre&amp;gt;['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']], then {{ var|unordered_list }} would return:&lt;br /&gt;
&amp;amp;lt;li&amp;amp;gt;States&lt;br /&gt;
&amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;li&amp;amp;gt;Kansas&lt;br /&gt;
        &amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;li&amp;amp;gt;Lawrence&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;li&amp;amp;gt;Topeka&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;li&amp;amp;gt;Illinois&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Використання календаря ==&lt;br /&gt;
&amp;lt;pre&amp;gt;class EventSplitDateTime(forms.SplitDateTimeWidget):&lt;br /&gt;
    def __init__(self, attrs=None):&lt;br /&gt;
        widgets = [forms.TextInput(attrs={'class': 'vDateField'}), &lt;br /&gt;
                   forms.TextInput(attrs={'class': 'vTimeField'})]&lt;br /&gt;
        # Note that we're calling MultiWidget, not SplitDateTimeWidget, because&lt;br /&gt;
        # we want to define widgets.&lt;br /&gt;
        forms.MultiWidget.__init__(self, widgets, attrs)&lt;br /&gt;
&lt;br /&gt;
    def format_output(self, rendered_widgets):&lt;br /&gt;
        return mark_safe(u'%s&amp;lt;br /&amp;gt;%s' % (rendered_widgets[0], rendered_widgets[1]))&lt;br /&gt;
&lt;br /&gt;
class EventForm(forms.Form):&lt;br /&gt;
    start = forms.DateTimeField(label=ugettext(&amp;quot;Start&amp;quot;), widget=EventSplitDateTime())&lt;br /&gt;
    end = forms.DateTimeField(label=ugettext(&amp;quot;End&amp;quot;), widget=EventSplitDateTime())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Рестарт WSGI без апача ==&lt;br /&gt;
&amp;lt;pre&amp;gt;@never_cache&lt;br /&gt;
def restart(request):&lt;br /&gt;
    ''' Перезапуск демона '''&lt;br /&gt;
    if request.META['mod_wsgi.process_group'] != '':&lt;br /&gt;
        import signal, os&lt;br /&gt;
        os.kill(os.getpid(), signal.SIGINT)&lt;br /&gt;
        ret = 'restarted'&lt;br /&gt;
    else:&lt;br /&gt;
        ret = 'not find porcess_group'&lt;br /&gt;
        &lt;br /&gt;
    return HttpResponse(ret, mimetype='text/plain')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Фільтрація в моделі в зовнішньому ключі ==&lt;br /&gt;
 models.ForeignKey(Test, limit_choices_to = {'pub_date__lte': datetime.now})&lt;br /&gt;
&lt;br /&gt;
== Django &amp;amp; Cron ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import sys&lt;br /&gt;
import settings&lt;br /&gt;
from django.core.management import setup_environ&lt;br /&gt;
setup_environ(settings)&lt;br /&gt;
module_name = sys.argv[1]&lt;br /&gt;
exec('import %s' % module_name)&lt;br /&gt;
exec('%s.%s' % (module_name, ' '.join(sys.argv[2:])))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И теперь при помощи этого скрипта мы можем вызывать функции наших “вьюшек” из командной строки и из cron:&lt;br /&gt;
 # python /path/to/project/run.py report.views &amp;quot;send_emails()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Багато з'єднань з базою ==&lt;br /&gt;
 from django.db import load_backend&lt;br /&gt;
 myBackend = load_backend('postgresql_psycopg2') # or 'mysql', 'sqlite3', 'oracle'&lt;br /&gt;
 myConnection = myBackend.DatabaseWrapper({&lt;br /&gt;
     'DATABASE_HOST': '192.168.1.1',&lt;br /&gt;
     'DATABASE_NAME': 'my_database',&lt;br /&gt;
     'DATABASE_OPTIONS': {},&lt;br /&gt;
     'DATABASE_PASSWORD': &amp;quot;&amp;quot;,&lt;br /&gt;
     'DATABASE_PORT': &amp;quot;&amp;quot;,&lt;br /&gt;
     'DATABASE_USER': &amp;quot;my_user&amp;quot;,&lt;br /&gt;
     'TIME_ZONE': &amp;quot;America/New_York&amp;quot;,})&lt;br /&gt;
 # Now we can do all the standard raw sql stuff with myConnection.&lt;br /&gt;
 myCursor = myConnection.cursor()&lt;br /&gt;
 myCursor.execute(&amp;quot;SELECT COUNT(1) FROM my_table;&amp;quot;)&lt;br /&gt;
 myCursor.fetchone()&lt;br /&gt;
&lt;br /&gt;
23. Автоматична перегрузка коду (для Apache)&lt;br /&gt;
&lt;br /&gt;
в конфіг добавляємо&lt;br /&gt;
 WSGIScriptReloading On&lt;br /&gt;
 WSGIReloadMechanism Process&lt;br /&gt;
&lt;br /&gt;
 $ touch my_project.wsgi&lt;br /&gt;
24. Доступ до url адмінки&lt;br /&gt;
 from django.core import urlresolvers&lt;br /&gt;
 url = urlresolvers.reverse('admin:mysite_product_change', args=(obj.id,))&lt;br /&gt;
&lt;br /&gt;
25. Фільтрація по датам&lt;br /&gt;
 extra_data = {&amp;quot;d&amp;quot;: &amp;quot;date(created)&amp;quot;}&lt;br /&gt;
 result = MyModel.objects.extra(extra_data).values('d').annotate(cnt=Count('pk')).order_by()&lt;br /&gt;
26. RAW SQL&lt;br /&gt;
 authors = Author.objects.raw(&amp;quot;SELECT *, age(birth_date) as age FROM library_authors&amp;quot;)&lt;br /&gt;
 for author in authors:&lt;br /&gt;
     print &amp;quot;%s is %s.&amp;quot; % (author.first_name, author.age)&lt;br /&gt;
27. Тестовий поштовий сервер&lt;br /&gt;
 python -m smtpd -n -c DebuggingServer localhost:1025&lt;/div&gt;</summary>
		<author><name>95.133.12.5</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.welard.com/index.php?title=Django_FAQ&amp;diff=2012</id>
		<title>Django FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.welard.com/index.php?title=Django_FAQ&amp;diff=2012"/>
		<updated>2010-07-26T12:55:05Z</updated>

		<summary type="html">&lt;p&gt;95.133.12.5: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Основні команди та нюанси при роботі з системою [[Django]]  ==&lt;br /&gt;
 django-admin.py startproject mysite&lt;br /&gt;
 python manage.py startapp books&lt;br /&gt;
 python manage.py validate&lt;br /&gt;
 python manage.py sqlall books&lt;br /&gt;
 python manage.py syncdb&lt;br /&gt;
 python manage.py inspectdb&lt;br /&gt;
== Модуль для роботи із зображеннями ==&lt;br /&gt;
 http://www.pythonware.com/products/pil/ &lt;br /&gt;
== Створення бази даних ==&lt;br /&gt;
 create database exam2 charset=utf8;&lt;br /&gt;
 ALTER DATABASE exam2 DEFAULT CHARACTER SET 'utf8'&lt;br /&gt;
== Циклічний перебір ==&lt;br /&gt;
 {% cycle 'row1' 'row2'&amp;amp;nbsp;%} &lt;br /&gt;
== Перегрупування в шаблоні ==&lt;br /&gt;
&amp;lt;pre&amp;gt;     {% regroup people by gender as gender_list&amp;amp;nbsp;%}&lt;br /&gt;
     {% regroup people|dictsort:&amp;quot;gender&amp;quot; by gender as gender_list&amp;amp;nbsp;%}&lt;br /&gt;
     &amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
     {% for gender in gender_list&amp;amp;nbsp;%}&lt;br /&gt;
        &amp;amp;lt;li&amp;amp;gt;{{ gender.grouper }}&lt;br /&gt;
        &amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
            {% for item in gender.list&amp;amp;nbsp;%}&lt;br /&gt;
            &amp;amp;lt;li&amp;amp;gt;{{ item.first_name }} {{ item.last_name }}&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
            {% endfor&amp;amp;nbsp;%}&lt;br /&gt;
        &amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
     {% endfor&amp;amp;nbsp;%}&lt;br /&gt;
     &amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
== Шаблон форми == &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;quot;&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;dl&amp;amp;gt;&lt;br /&gt;
{% for field in form %}&lt;br /&gt;
    &amp;amp;lt;dt&amp;amp;gt;{{ field.label_tag }}{% if field.field.required %}*{% endif %}&amp;amp;lt;/dt&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;dd&amp;amp;gt;{{ field }}&amp;amp;lt;/dd&amp;amp;gt;&lt;br /&gt;
    {% if field.help_text %}&amp;amp;lt;dd&amp;amp;gt;{{ field.help_text }}&amp;amp;lt;/dd&amp;amp;gt;{% endif %}&lt;br /&gt;
    {% if field.errors %}&amp;amp;lt;dd class=&amp;quot;myerrors&amp;quot;&amp;amp;gt;{{ field.errors }}&amp;amp;lt;/dd&amp;amp;gt;{% endif %}&lt;br /&gt;
{% endfor %}&lt;br /&gt;
&amp;amp;lt;/dl&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/form&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
== Робота з формою в views.py ==&lt;br /&gt;
 instance = Instance(required_field='value')&lt;br /&gt;
 form = InstanceForm(request.POST, instance=instance)&lt;br /&gt;
 new_instance = form.save()&lt;br /&gt;
&lt;br /&gt;
 instance = form.save(commit=False)&lt;br /&gt;
 instance.required_field = 'new value'&lt;br /&gt;
 new_instance = instance.save()&lt;br /&gt;
&lt;br /&gt;
== Збереження в змінній форми ==&lt;br /&gt;
allNodes = Form.serialize(&amp;quot;myform&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Профілі користувачів  ==&lt;br /&gt;
 in settings.py:&lt;br /&gt;
 AUTH_PROFILE_MODULE = 'projectname.UserProfile'&lt;br /&gt;
в інших відповідних файлах&lt;br /&gt;
 class UserProfile(models.Model):&lt;br /&gt;
     user = models.OneToOneField(User, related_name='%(class)s', primary_key=True)&lt;br /&gt;
&lt;br /&gt;
 from django.contrib.auth.models import User&lt;br /&gt;
 u = User.objects.get(username='test')&lt;br /&gt;
 user_profile = u.profile.get()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pagination - розбиття на сторінки ==&lt;br /&gt;
 from django.core.paginator import Paginator&lt;br /&gt;
 objects = ['john', 'paul', 'george', 'ringo']&lt;br /&gt;
 p = Paginator(objects, 2)&lt;br /&gt;
 page1 = p.page(1)&lt;br /&gt;
 page1.object_list&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; 8. Багатомовність &lt;br /&gt;
&lt;br /&gt;
    django-admin.py makemessages -l uk&lt;br /&gt;
    django-admin.py compilemessages&lt;br /&gt;
&lt;br /&gt;
9. Групиування в SQL &lt;br /&gt;
&lt;br /&gt;
 qs = Schedule.objects.select_related().filter(pub_date__gte=datetime.now())&lt;br /&gt;
 qs.query.group_by = ['country_id'] #!!!!!!&lt;br /&gt;
 return {'schedule': qs}&lt;br /&gt;
&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; qs = TumbleItem.objects.all()&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; qs.query.group_by = ['item_type']&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; qs.query.having = ['COUNT(item_type) &amp;amp;gt; 1']&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; item_types = [i.item_type for i in qs]&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; item_types&lt;br /&gt;
&lt;br /&gt;
10. Кешування процедури &lt;br /&gt;
&lt;br /&gt;
 @cached( trigger = { &amp;quot;signal&amp;quot;&amp;amp;nbsp;: ( signals.post_save, signals.post_delete ),&amp;quot;sender&amp;quot;&amp;amp;nbsp;: Post  } )&lt;br /&gt;
 def get_latest_posts():&lt;br /&gt;
     return list( Post.objects.all().order_by( &amp;quot;-date&amp;quot; )[:5] )&lt;br /&gt;
&lt;br /&gt;
11. Дописування методів в адмінку &lt;br /&gt;
&lt;br /&gt;
    def remove(self):&lt;br /&gt;
        from django.core.urlresolvers import reverse&lt;br /&gt;
        return '&amp;amp;lt;a href=&amp;quot;%s&amp;quot; class=&amp;quot;deletelink&amp;quot;&amp;amp;gt;Delete&amp;amp;lt;/a&amp;amp;gt;'&amp;amp;nbsp;% reverse( &amp;quot;django.contrib.admin.views.main.delete_stage&amp;quot;,&lt;br /&gt;
            args = ( self.__class__._meta.app_label, self.__class__.__name__.lower(), self._get_pk_val(), ) )&lt;br /&gt;
    remove.allow_tags = True&lt;br /&gt;
&lt;br /&gt;
12. Приклад WSGI &lt;br /&gt;
&lt;br /&gt;
 sys.stdout = sys.stderr&lt;br /&gt;
 import os, sys&lt;br /&gt;
 sys.path.append('/usr/lib/python2.4/site-packages/django')&lt;br /&gt;
 sys.path.append('/var/www/paradise/paradise')&lt;br /&gt;
 sys.path.append('/var/www/paradise')&lt;br /&gt;
 os.environ['DJANGO_SETTINGS_MODULE'] = 'paradise.settings'&lt;br /&gt;
 import django.core.handlers.wsgi&lt;br /&gt;
 application = django.core.handlers.wsgi.WSGIHandler()&lt;br /&gt;
&lt;br /&gt;
13. Профілі користувачів &lt;br /&gt;
&lt;br /&gt;
 from django.contrib import admin&lt;br /&gt;
 from profile.models import UserProfile&lt;br /&gt;
 from django.contrib.auth.models import User&lt;br /&gt;
 class ProfileInline(admin.StackedInline):&lt;br /&gt;
     model = UserProfile&lt;br /&gt;
     extra = 1&lt;br /&gt;
     max_num = 1&lt;br /&gt;
&lt;br /&gt;
 class ProfileAdmin(admin.ModelAdmin):&lt;br /&gt;
     inlines = (ProfileInline,)&lt;br /&gt;
     admin.site.unregister(User)  #!!!&lt;br /&gt;
     admin.site.register(User, ProfileAdmin)&lt;br /&gt;
&lt;br /&gt;
14. Профілі 2 &lt;br /&gt;
&lt;br /&gt;
 from django.contrib.auth.models import User&lt;br /&gt;
 User.add_to_class('department',models.CharField(max_length=250,blank=True))&lt;br /&gt;
 User.add_to_class('position',models.CharField(max_length=250,blank=True))&lt;br /&gt;
 User._meta.admin.fields += (('Custom', {'fields': ('department','position',)}),)&lt;br /&gt;
 User._meta.admin.list_display += ('department','position',)&lt;br /&gt;
 def get_user_name(self):&lt;br /&gt;
     if self.first_name or self.last_name:&lt;br /&gt;
         return self.first_name + &amp;quot; &amp;quot; + self.last_name&lt;br /&gt;
     return self.username&lt;br /&gt;
 User.add_to_class(&amp;quot;get_user_name&amp;quot;,get_user_name)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; 15. Якщо є яйця в пітоні &lt;br /&gt;
&lt;br /&gt;
 /etc/sysconfig/httpd&lt;br /&gt;
 export PYTHON_EGG_CACHE=&amp;quot;/var/cache/python-eggs&amp;quot; &lt;br /&gt;
&lt;br /&gt;
16. Кеш в Django &lt;br /&gt;
добавити в апач конфігурацію&lt;br /&gt;
 &amp;lt;IfModule mod_expires.c&amp;gt;&lt;br /&gt;
     &amp;lt;FilesMatch &amp;quot;\.(jpg|gif|png|css|js)$&amp;quot;&amp;gt;&lt;br /&gt;
          ExpiresActive on&lt;br /&gt;
          ExpiresDefault &amp;quot;access plus 3 days&amp;quot;&lt;br /&gt;
     &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
у файлі views.py:&lt;br /&gt;
 from django.views.decorators.cache import cache_page&lt;br /&gt;
 ....&lt;br /&gt;
 @cache_page(60 * 15)&lt;br /&gt;
 def show_page(request, url=None, page_num=0):&lt;br /&gt;
     ....&lt;br /&gt;
     ....&lt;br /&gt;
у файлі admin.py:&lt;br /&gt;
 from django.core.cache import cache&lt;br /&gt;
 from django.conf import settings&lt;br /&gt;
 ....     &lt;br /&gt;
 def save_model(self, request, obj, form, change):&lt;br /&gt;
     #cache.delete('views.decorators.cache.cache_header.%s./%s/' % (settings.CACHE_MIDDLEWARE_KEY_PREFIX, obj.url))&lt;br /&gt;
     '''cache._cache.flush_all()''' # ось так для memcache!!! &lt;br /&gt;
     obj.save()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
17. Корзина &lt;br /&gt;
&lt;br /&gt;
 def delete(self, trash=True):&lt;br /&gt;
     if not self.trashed_at and trash:&lt;br /&gt;
         self.trashed_at = datetime.now()&lt;br /&gt;
         self.save()&lt;br /&gt;
     else:&lt;br /&gt;
         super(SomeModel, self).delete()&lt;br /&gt;
&lt;br /&gt;
18. Використання unordered_list &lt;br /&gt;
&amp;lt;pre&amp;gt;['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']], then {{ var|unordered_list }} would return:&lt;br /&gt;
&amp;amp;lt;li&amp;amp;gt;States&lt;br /&gt;
&amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;li&amp;amp;gt;Kansas&lt;br /&gt;
        &amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;li&amp;amp;gt;Lawrence&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;li&amp;amp;gt;Topeka&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;li&amp;amp;gt;Illinois&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
18. Використання календаря&lt;br /&gt;
&amp;lt;pre&amp;gt;class EventSplitDateTime(forms.SplitDateTimeWidget):&lt;br /&gt;
    def __init__(self, attrs=None):&lt;br /&gt;
        widgets = [forms.TextInput(attrs={'class': 'vDateField'}), &lt;br /&gt;
                   forms.TextInput(attrs={'class': 'vTimeField'})]&lt;br /&gt;
        # Note that we're calling MultiWidget, not SplitDateTimeWidget, because&lt;br /&gt;
        # we want to define widgets.&lt;br /&gt;
        forms.MultiWidget.__init__(self, widgets, attrs)&lt;br /&gt;
&lt;br /&gt;
    def format_output(self, rendered_widgets):&lt;br /&gt;
        return mark_safe(u'%s&amp;lt;br /&amp;gt;%s' % (rendered_widgets[0], rendered_widgets[1]))&lt;br /&gt;
&lt;br /&gt;
class EventForm(forms.Form):&lt;br /&gt;
    start = forms.DateTimeField(label=ugettext(&amp;quot;Start&amp;quot;), widget=EventSplitDateTime())&lt;br /&gt;
    end = forms.DateTimeField(label=ugettext(&amp;quot;End&amp;quot;), widget=EventSplitDateTime())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
19. Рестарт WSGI без апача&lt;br /&gt;
&amp;lt;pre&amp;gt;@never_cache&lt;br /&gt;
def restart(request):&lt;br /&gt;
    ''' Перезапуск демона '''&lt;br /&gt;
    if request.META['mod_wsgi.process_group'] != '':&lt;br /&gt;
        import signal, os&lt;br /&gt;
        os.kill(os.getpid(), signal.SIGINT)&lt;br /&gt;
        ret = 'restarted'&lt;br /&gt;
    else:&lt;br /&gt;
        ret = 'not find porcess_group'&lt;br /&gt;
        &lt;br /&gt;
    return HttpResponse(ret, mimetype='text/plain')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
20. Фільтрація в моделі в зовнішньому ключі&lt;br /&gt;
 models.ForeignKey(Test, limit_choices_to = {'pub_date__lte': datetime.now})&lt;br /&gt;
21. Django &amp;amp; Cron&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import sys&lt;br /&gt;
import settings&lt;br /&gt;
from django.core.management import setup_environ&lt;br /&gt;
setup_environ(settings)&lt;br /&gt;
module_name = sys.argv[1]&lt;br /&gt;
exec('import %s' % module_name)&lt;br /&gt;
exec('%s.%s' % (module_name, ' '.join(sys.argv[2:])))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И теперь при помощи этого скрипта мы можем вызывать функции наших “вьюшек” из командной строки и из cron:&lt;br /&gt;
 # python /path/to/project/run.py report.views &amp;quot;send_emails()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
22. Багато з'єднань з базою&lt;br /&gt;
 from django.db import load_backend&lt;br /&gt;
 myBackend = load_backend('postgresql_psycopg2') # or 'mysql', 'sqlite3', 'oracle'&lt;br /&gt;
 myConnection = myBackend.DatabaseWrapper({&lt;br /&gt;
     'DATABASE_HOST': '192.168.1.1',&lt;br /&gt;
     'DATABASE_NAME': 'my_database',&lt;br /&gt;
     'DATABASE_OPTIONS': {},&lt;br /&gt;
     'DATABASE_PASSWORD': &amp;quot;&amp;quot;,&lt;br /&gt;
     'DATABASE_PORT': &amp;quot;&amp;quot;,&lt;br /&gt;
     'DATABASE_USER': &amp;quot;my_user&amp;quot;,&lt;br /&gt;
     'TIME_ZONE': &amp;quot;America/New_York&amp;quot;,})&lt;br /&gt;
 # Now we can do all the standard raw sql stuff with myConnection.&lt;br /&gt;
 myCursor = myConnection.cursor()&lt;br /&gt;
 myCursor.execute(&amp;quot;SELECT COUNT(1) FROM my_table;&amp;quot;)&lt;br /&gt;
 myCursor.fetchone()&lt;br /&gt;
&lt;br /&gt;
23. Автоматична перегрузка коду (для Apache)&lt;br /&gt;
&lt;br /&gt;
в конфіг добавляємо&lt;br /&gt;
 WSGIScriptReloading On&lt;br /&gt;
 WSGIReloadMechanism Process&lt;br /&gt;
&lt;br /&gt;
 $ touch my_project.wsgi&lt;br /&gt;
24. Доступ до url адмінки&lt;br /&gt;
 from django.core import urlresolvers&lt;br /&gt;
 url = urlresolvers.reverse('admin:mysite_product_change', args=(obj.id,))&lt;br /&gt;
&lt;br /&gt;
25. Фільтрація по датам&lt;br /&gt;
 extra_data = {&amp;quot;d&amp;quot;: &amp;quot;date(created)&amp;quot;}&lt;br /&gt;
 result = MyModel.objects.extra(extra_data).values('d').annotate(cnt=Count('pk')).order_by()&lt;br /&gt;
26. RAW SQL&lt;br /&gt;
 authors = Author.objects.raw(&amp;quot;SELECT *, age(birth_date) as age FROM library_authors&amp;quot;)&lt;br /&gt;
 for author in authors:&lt;br /&gt;
     print &amp;quot;%s is %s.&amp;quot; % (author.first_name, author.age)&lt;br /&gt;
27. Тестовий поштовий сервер&lt;br /&gt;
 python -m smtpd -n -c DebuggingServer localhost:1025&lt;/div&gt;</summary>
		<author><name>95.133.12.5</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.welard.com/index.php?title=Django_FAQ&amp;diff=2011</id>
		<title>Django FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.welard.com/index.php?title=Django_FAQ&amp;diff=2011"/>
		<updated>2010-07-26T12:53:07Z</updated>

		<summary type="html">&lt;p&gt;95.133.12.5: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Основні команди та нюанси при роботі з системою [[Django]]  ==&lt;br /&gt;
 django-admin.py startproject mysite&lt;br /&gt;
 python manage.py startapp books&lt;br /&gt;
 python manage.py validate&lt;br /&gt;
 python manage.py sqlall books&lt;br /&gt;
 python manage.py syncdb&lt;br /&gt;
 python manage.py inspectdb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Модуль для роботи із зображеннями ==&lt;br /&gt;
 &lt;br /&gt;
 http://www.pythonware.com/products/pil/ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Створення бази даних ==&lt;br /&gt;
 create database exam2 charset=utf8;&lt;br /&gt;
 ALTER DATABASE exam2 DEFAULT CHARACTER SET 'utf8'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 1. Циклічний перебір ==&lt;br /&gt;
 {% cycle 'row1' 'row2'&amp;amp;nbsp;%} &lt;br /&gt;
&lt;br /&gt;
== 2. Перегрупування в шаблоні ==&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;     {% regroup people by gender as gender_list&amp;amp;nbsp;%}&lt;br /&gt;
     {% regroup people|dictsort:&amp;quot;gender&amp;quot; by gender as gender_list&amp;amp;nbsp;%}&lt;br /&gt;
     &amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
     {% for gender in gender_list&amp;amp;nbsp;%}&lt;br /&gt;
        &amp;amp;lt;li&amp;amp;gt;{{ gender.grouper }}&lt;br /&gt;
        &amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
            {% for item in gender.list&amp;amp;nbsp;%}&lt;br /&gt;
            &amp;amp;lt;li&amp;amp;gt;{{ item.first_name }} {{ item.last_name }}&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
            {% endfor&amp;amp;nbsp;%}&lt;br /&gt;
        &amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
     {% endfor&amp;amp;nbsp;%}&lt;br /&gt;
     &amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== 3. Шаблон форми == &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;quot;&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;dl&amp;amp;gt;&lt;br /&gt;
{% for field in form %}&lt;br /&gt;
    &amp;amp;lt;dt&amp;amp;gt;{{ field.label_tag }}{% if field.field.required %}*{% endif %}&amp;amp;lt;/dt&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;dd&amp;amp;gt;{{ field }}&amp;amp;lt;/dd&amp;amp;gt;&lt;br /&gt;
    {% if field.help_text %}&amp;amp;lt;dd&amp;amp;gt;{{ field.help_text }}&amp;amp;lt;/dd&amp;amp;gt;{% endif %}&lt;br /&gt;
    {% if field.errors %}&amp;amp;lt;dd class=&amp;quot;myerrors&amp;quot;&amp;amp;gt;{{ field.errors }}&amp;amp;lt;/dd&amp;amp;gt;{% endif %}&lt;br /&gt;
{% endfor %}&lt;br /&gt;
&amp;amp;lt;/dl&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/form&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== 4. Робота з формою в views.py ==&lt;br /&gt;
&lt;br /&gt;
 instance = Instance(required_field='value')&lt;br /&gt;
 form = InstanceForm(request.POST, instance=instance)&lt;br /&gt;
 new_instance = form.save()&lt;br /&gt;
&lt;br /&gt;
 instance = form.save(commit=False)&lt;br /&gt;
 instance.required_field = 'new value'&lt;br /&gt;
 new_instance = instance.save()&lt;br /&gt;
&lt;br /&gt;
5. allNodes = Form.serialize(&amp;quot;myform&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
6. Профілі користувачів &lt;br /&gt;
 &lt;br /&gt;
in settings.py:&lt;br /&gt;
 AUTH_PROFILE_MODULE = 'projectname.UserProfile'&lt;br /&gt;
в інших відповідних файлах&lt;br /&gt;
 class UserProfile(models.Model):&lt;br /&gt;
     user = models.OneToOneField(User, related_name='%(class)s', primary_key=True)&lt;br /&gt;
&lt;br /&gt;
 from django.contrib.auth.models import User&lt;br /&gt;
 u = User.objects.get(username='test')&lt;br /&gt;
 user_profile = u.profile.get()&lt;br /&gt;
&lt;br /&gt;
7. Pagination - розбиття на сторінки &lt;br /&gt;
&lt;br /&gt;
 from django.core.paginator import Paginator&lt;br /&gt;
 objects = ['john', 'paul', 'george', 'ringo']&lt;br /&gt;
 p = Paginator(objects, 2)&lt;br /&gt;
 page1 = p.page(1)&lt;br /&gt;
 page1.object_list&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; 8. Багатомовність &lt;br /&gt;
&lt;br /&gt;
    django-admin.py makemessages -l uk&lt;br /&gt;
    django-admin.py compilemessages&lt;br /&gt;
&lt;br /&gt;
9. Групиування в SQL &lt;br /&gt;
&lt;br /&gt;
 qs = Schedule.objects.select_related().filter(pub_date__gte=datetime.now())&lt;br /&gt;
 qs.query.group_by = ['country_id'] #!!!!!!&lt;br /&gt;
 return {'schedule': qs}&lt;br /&gt;
&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; qs = TumbleItem.objects.all()&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; qs.query.group_by = ['item_type']&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; qs.query.having = ['COUNT(item_type) &amp;amp;gt; 1']&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; item_types = [i.item_type for i in qs]&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; item_types&lt;br /&gt;
&lt;br /&gt;
10. Кешування процедури &lt;br /&gt;
&lt;br /&gt;
 @cached( trigger = { &amp;quot;signal&amp;quot;&amp;amp;nbsp;: ( signals.post_save, signals.post_delete ),&amp;quot;sender&amp;quot;&amp;amp;nbsp;: Post  } )&lt;br /&gt;
 def get_latest_posts():&lt;br /&gt;
     return list( Post.objects.all().order_by( &amp;quot;-date&amp;quot; )[:5] )&lt;br /&gt;
&lt;br /&gt;
11. Дописування методів в адмінку &lt;br /&gt;
&lt;br /&gt;
    def remove(self):&lt;br /&gt;
        from django.core.urlresolvers import reverse&lt;br /&gt;
        return '&amp;amp;lt;a href=&amp;quot;%s&amp;quot; class=&amp;quot;deletelink&amp;quot;&amp;amp;gt;Delete&amp;amp;lt;/a&amp;amp;gt;'&amp;amp;nbsp;% reverse( &amp;quot;django.contrib.admin.views.main.delete_stage&amp;quot;,&lt;br /&gt;
            args = ( self.__class__._meta.app_label, self.__class__.__name__.lower(), self._get_pk_val(), ) )&lt;br /&gt;
    remove.allow_tags = True&lt;br /&gt;
&lt;br /&gt;
12. Приклад WSGI &lt;br /&gt;
&lt;br /&gt;
 sys.stdout = sys.stderr&lt;br /&gt;
 import os, sys&lt;br /&gt;
 sys.path.append('/usr/lib/python2.4/site-packages/django')&lt;br /&gt;
 sys.path.append('/var/www/paradise/paradise')&lt;br /&gt;
 sys.path.append('/var/www/paradise')&lt;br /&gt;
 os.environ['DJANGO_SETTINGS_MODULE'] = 'paradise.settings'&lt;br /&gt;
 import django.core.handlers.wsgi&lt;br /&gt;
 application = django.core.handlers.wsgi.WSGIHandler()&lt;br /&gt;
&lt;br /&gt;
13. Профілі користувачів &lt;br /&gt;
&lt;br /&gt;
 from django.contrib import admin&lt;br /&gt;
 from profile.models import UserProfile&lt;br /&gt;
 from django.contrib.auth.models import User&lt;br /&gt;
 class ProfileInline(admin.StackedInline):&lt;br /&gt;
     model = UserProfile&lt;br /&gt;
     extra = 1&lt;br /&gt;
     max_num = 1&lt;br /&gt;
&lt;br /&gt;
 class ProfileAdmin(admin.ModelAdmin):&lt;br /&gt;
     inlines = (ProfileInline,)&lt;br /&gt;
     admin.site.unregister(User)  #!!!&lt;br /&gt;
     admin.site.register(User, ProfileAdmin)&lt;br /&gt;
&lt;br /&gt;
14. Профілі 2 &lt;br /&gt;
&lt;br /&gt;
 from django.contrib.auth.models import User&lt;br /&gt;
 User.add_to_class('department',models.CharField(max_length=250,blank=True))&lt;br /&gt;
 User.add_to_class('position',models.CharField(max_length=250,blank=True))&lt;br /&gt;
 User._meta.admin.fields += (('Custom', {'fields': ('department','position',)}),)&lt;br /&gt;
 User._meta.admin.list_display += ('department','position',)&lt;br /&gt;
 def get_user_name(self):&lt;br /&gt;
     if self.first_name or self.last_name:&lt;br /&gt;
         return self.first_name + &amp;quot; &amp;quot; + self.last_name&lt;br /&gt;
     return self.username&lt;br /&gt;
 User.add_to_class(&amp;quot;get_user_name&amp;quot;,get_user_name)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; 15. Якщо є яйця в пітоні &lt;br /&gt;
&lt;br /&gt;
 /etc/sysconfig/httpd&lt;br /&gt;
 export PYTHON_EGG_CACHE=&amp;quot;/var/cache/python-eggs&amp;quot; &lt;br /&gt;
&lt;br /&gt;
16. Кеш в Django &lt;br /&gt;
добавити в апач конфігурацію&lt;br /&gt;
 &amp;lt;IfModule mod_expires.c&amp;gt;&lt;br /&gt;
     &amp;lt;FilesMatch &amp;quot;\.(jpg|gif|png|css|js)$&amp;quot;&amp;gt;&lt;br /&gt;
          ExpiresActive on&lt;br /&gt;
          ExpiresDefault &amp;quot;access plus 3 days&amp;quot;&lt;br /&gt;
     &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
у файлі views.py:&lt;br /&gt;
 from django.views.decorators.cache import cache_page&lt;br /&gt;
 ....&lt;br /&gt;
 @cache_page(60 * 15)&lt;br /&gt;
 def show_page(request, url=None, page_num=0):&lt;br /&gt;
     ....&lt;br /&gt;
     ....&lt;br /&gt;
у файлі admin.py:&lt;br /&gt;
 from django.core.cache import cache&lt;br /&gt;
 from django.conf import settings&lt;br /&gt;
 ....     &lt;br /&gt;
 def save_model(self, request, obj, form, change):&lt;br /&gt;
     #cache.delete('views.decorators.cache.cache_header.%s./%s/' % (settings.CACHE_MIDDLEWARE_KEY_PREFIX, obj.url))&lt;br /&gt;
     '''cache._cache.flush_all()''' # ось так для memcache!!! &lt;br /&gt;
     obj.save()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
17. Корзина &lt;br /&gt;
&lt;br /&gt;
 def delete(self, trash=True):&lt;br /&gt;
     if not self.trashed_at and trash:&lt;br /&gt;
         self.trashed_at = datetime.now()&lt;br /&gt;
         self.save()&lt;br /&gt;
     else:&lt;br /&gt;
         super(SomeModel, self).delete()&lt;br /&gt;
&lt;br /&gt;
18. Використання unordered_list &lt;br /&gt;
&amp;lt;pre&amp;gt;['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']], then {{ var|unordered_list }} would return:&lt;br /&gt;
&amp;amp;lt;li&amp;amp;gt;States&lt;br /&gt;
&amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;li&amp;amp;gt;Kansas&lt;br /&gt;
        &amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;li&amp;amp;gt;Lawrence&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;li&amp;amp;gt;Topeka&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;li&amp;amp;gt;Illinois&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
18. Використання календаря&lt;br /&gt;
&amp;lt;pre&amp;gt;class EventSplitDateTime(forms.SplitDateTimeWidget):&lt;br /&gt;
    def __init__(self, attrs=None):&lt;br /&gt;
        widgets = [forms.TextInput(attrs={'class': 'vDateField'}), &lt;br /&gt;
                   forms.TextInput(attrs={'class': 'vTimeField'})]&lt;br /&gt;
        # Note that we're calling MultiWidget, not SplitDateTimeWidget, because&lt;br /&gt;
        # we want to define widgets.&lt;br /&gt;
        forms.MultiWidget.__init__(self, widgets, attrs)&lt;br /&gt;
&lt;br /&gt;
    def format_output(self, rendered_widgets):&lt;br /&gt;
        return mark_safe(u'%s&amp;lt;br /&amp;gt;%s' % (rendered_widgets[0], rendered_widgets[1]))&lt;br /&gt;
&lt;br /&gt;
class EventForm(forms.Form):&lt;br /&gt;
    start = forms.DateTimeField(label=ugettext(&amp;quot;Start&amp;quot;), widget=EventSplitDateTime())&lt;br /&gt;
    end = forms.DateTimeField(label=ugettext(&amp;quot;End&amp;quot;), widget=EventSplitDateTime())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
19. Рестарт WSGI без апача&lt;br /&gt;
&amp;lt;pre&amp;gt;@never_cache&lt;br /&gt;
def restart(request):&lt;br /&gt;
    ''' Перезапуск демона '''&lt;br /&gt;
    if request.META['mod_wsgi.process_group'] != '':&lt;br /&gt;
        import signal, os&lt;br /&gt;
        os.kill(os.getpid(), signal.SIGINT)&lt;br /&gt;
        ret = 'restarted'&lt;br /&gt;
    else:&lt;br /&gt;
        ret = 'not find porcess_group'&lt;br /&gt;
        &lt;br /&gt;
    return HttpResponse(ret, mimetype='text/plain')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
20. Фільтрація в моделі в зовнішньому ключі&lt;br /&gt;
 models.ForeignKey(Test, limit_choices_to = {'pub_date__lte': datetime.now})&lt;br /&gt;
21. Django &amp;amp; Cron&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import sys&lt;br /&gt;
import settings&lt;br /&gt;
from django.core.management import setup_environ&lt;br /&gt;
setup_environ(settings)&lt;br /&gt;
module_name = sys.argv[1]&lt;br /&gt;
exec('import %s' % module_name)&lt;br /&gt;
exec('%s.%s' % (module_name, ' '.join(sys.argv[2:])))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И теперь при помощи этого скрипта мы можем вызывать функции наших “вьюшек” из командной строки и из cron:&lt;br /&gt;
 # python /path/to/project/run.py report.views &amp;quot;send_emails()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
22. Багато з'єднань з базою&lt;br /&gt;
 from django.db import load_backend&lt;br /&gt;
 myBackend = load_backend('postgresql_psycopg2') # or 'mysql', 'sqlite3', 'oracle'&lt;br /&gt;
 myConnection = myBackend.DatabaseWrapper({&lt;br /&gt;
     'DATABASE_HOST': '192.168.1.1',&lt;br /&gt;
     'DATABASE_NAME': 'my_database',&lt;br /&gt;
     'DATABASE_OPTIONS': {},&lt;br /&gt;
     'DATABASE_PASSWORD': &amp;quot;&amp;quot;,&lt;br /&gt;
     'DATABASE_PORT': &amp;quot;&amp;quot;,&lt;br /&gt;
     'DATABASE_USER': &amp;quot;my_user&amp;quot;,&lt;br /&gt;
     'TIME_ZONE': &amp;quot;America/New_York&amp;quot;,})&lt;br /&gt;
 # Now we can do all the standard raw sql stuff with myConnection.&lt;br /&gt;
 myCursor = myConnection.cursor()&lt;br /&gt;
 myCursor.execute(&amp;quot;SELECT COUNT(1) FROM my_table;&amp;quot;)&lt;br /&gt;
 myCursor.fetchone()&lt;br /&gt;
&lt;br /&gt;
23. Автоматична перегрузка коду (для Apache)&lt;br /&gt;
&lt;br /&gt;
в конфіг добавляємо&lt;br /&gt;
 WSGIScriptReloading On&lt;br /&gt;
 WSGIReloadMechanism Process&lt;br /&gt;
&lt;br /&gt;
 $ touch my_project.wsgi&lt;br /&gt;
24. Доступ до url адмінки&lt;br /&gt;
 from django.core import urlresolvers&lt;br /&gt;
 url = urlresolvers.reverse('admin:mysite_product_change', args=(obj.id,))&lt;br /&gt;
&lt;br /&gt;
25. Фільтрація по датам&lt;br /&gt;
 extra_data = {&amp;quot;d&amp;quot;: &amp;quot;date(created)&amp;quot;}&lt;br /&gt;
 result = MyModel.objects.extra(extra_data).values('d').annotate(cnt=Count('pk')).order_by()&lt;br /&gt;
26. RAW SQL&lt;br /&gt;
 authors = Author.objects.raw(&amp;quot;SELECT *, age(birth_date) as age FROM library_authors&amp;quot;)&lt;br /&gt;
 for author in authors:&lt;br /&gt;
     print &amp;quot;%s is %s.&amp;quot; % (author.first_name, author.age)&lt;br /&gt;
27. Тестовий поштовий сервер&lt;br /&gt;
 python -m smtpd -n -c DebuggingServer localhost:1025&lt;/div&gt;</summary>
		<author><name>95.133.12.5</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.welard.com/index.php?title=Django_FAQ&amp;diff=2010</id>
		<title>Django FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.welard.com/index.php?title=Django_FAQ&amp;diff=2010"/>
		<updated>2010-07-26T12:50:53Z</updated>

		<summary type="html">&lt;p&gt;95.133.12.5: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Основні команди та нюанси при роботі з системою [[Django]]  ==&lt;br /&gt;
&lt;br /&gt;
 django-admin.py startproject mysite&lt;br /&gt;
 python manage.py startapp books&lt;br /&gt;
 python manage.py validate&lt;br /&gt;
 python manage.py sqlall books&lt;br /&gt;
 python manage.py syncdb&lt;br /&gt;
 python manage.py inspectdb&lt;br /&gt;
&lt;br /&gt;
Модуль для роботи із зобраденнями на python http://www.pythonware.com/products/pil/ &lt;br /&gt;
&lt;br /&gt;
Створення бази даних &lt;br /&gt;
&lt;br /&gt;
 create database exam2 charset=utf8;&lt;br /&gt;
 ALTER DATABASE exam2 DEFAULT CHARACTER SET 'utf8'&lt;br /&gt;
&lt;br /&gt;
Замінити в базі до полів типу varchar &lt;br /&gt;
&lt;br /&gt;
 &amp;quot;character set utf8 collate utf8_unicode_ci&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Куски коду  ==&lt;br /&gt;
&lt;br /&gt;
1. {% cycle 'row1' 'row2'&amp;amp;nbsp;%} &lt;br /&gt;
&lt;br /&gt;
2. Перегрупування в шаблоні&amp;amp;nbsp;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;pre&amp;gt;     {% regroup people by gender as gender_list&amp;amp;nbsp;%}&lt;br /&gt;
     {% regroup people|dictsort:&amp;quot;gender&amp;quot; by gender as gender_list&amp;amp;nbsp;%}&lt;br /&gt;
     &amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
     {% for gender in gender_list&amp;amp;nbsp;%}&lt;br /&gt;
        &amp;amp;lt;li&amp;amp;gt;{{ gender.grouper }}&lt;br /&gt;
        &amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
            {% for item in gender.list&amp;amp;nbsp;%}&lt;br /&gt;
            &amp;amp;lt;li&amp;amp;gt;{{ item.first_name }} {{ item.last_name }}&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
            {% endfor&amp;amp;nbsp;%}&lt;br /&gt;
        &amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
     {% endfor&amp;amp;nbsp;%}&lt;br /&gt;
     &amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
3. Шаблон форми &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;quot;&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;dl&amp;amp;gt;&lt;br /&gt;
{% for field in form %}&lt;br /&gt;
    &amp;amp;lt;dt&amp;amp;gt;{{ field.label_tag }}{% if field.field.required %}*{% endif %}&amp;amp;lt;/dt&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;dd&amp;amp;gt;{{ field }}&amp;amp;lt;/dd&amp;amp;gt;&lt;br /&gt;
    {% if field.help_text %}&amp;amp;lt;dd&amp;amp;gt;{{ field.help_text }}&amp;amp;lt;/dd&amp;amp;gt;{% endif %}&lt;br /&gt;
    {% if field.errors %}&amp;amp;lt;dd class=&amp;quot;myerrors&amp;quot;&amp;amp;gt;{{ field.errors }}&amp;amp;lt;/dd&amp;amp;gt;{% endif %}&lt;br /&gt;
{% endfor %}&lt;br /&gt;
&amp;amp;lt;/dl&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/form&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
4. Робота з формою в views.py &lt;br /&gt;
&lt;br /&gt;
 instance = Instance(required_field='value')&lt;br /&gt;
 form = InstanceForm(request.POST, instance=instance)&lt;br /&gt;
 new_instance = form.save()&lt;br /&gt;
&lt;br /&gt;
 instance = form.save(commit=False)&lt;br /&gt;
 instance.required_field = 'new value'&lt;br /&gt;
 new_instance = instance.save()&lt;br /&gt;
&lt;br /&gt;
5. allNodes = Form.serialize(&amp;quot;myform&amp;quot;); &lt;br /&gt;
&lt;br /&gt;
6. Профілі користувачів &lt;br /&gt;
 &lt;br /&gt;
in settings.py:&lt;br /&gt;
 AUTH_PROFILE_MODULE = 'projectname.UserProfile'&lt;br /&gt;
в інших відповідних файлах&lt;br /&gt;
 class UserProfile(models.Model):&lt;br /&gt;
     user = models.OneToOneField(User, related_name='%(class)s', primary_key=True)&lt;br /&gt;
&lt;br /&gt;
 from django.contrib.auth.models import User&lt;br /&gt;
 u = User.objects.get(username='test')&lt;br /&gt;
 user_profile = u.profile.get()&lt;br /&gt;
&lt;br /&gt;
7. Pagination - розбиття на сторінки &lt;br /&gt;
&lt;br /&gt;
 from django.core.paginator import Paginator&lt;br /&gt;
 objects = ['john', 'paul', 'george', 'ringo']&lt;br /&gt;
 p = Paginator(objects, 2)&lt;br /&gt;
 page1 = p.page(1)&lt;br /&gt;
 page1.object_list&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; 8. Багатомовність &lt;br /&gt;
&lt;br /&gt;
    django-admin.py makemessages -l uk&lt;br /&gt;
    django-admin.py compilemessages&lt;br /&gt;
&lt;br /&gt;
9. Групиування в SQL &lt;br /&gt;
&lt;br /&gt;
 qs = Schedule.objects.select_related().filter(pub_date__gte=datetime.now())&lt;br /&gt;
 qs.query.group_by = ['country_id'] #!!!!!!&lt;br /&gt;
 return {'schedule': qs}&lt;br /&gt;
&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; qs = TumbleItem.objects.all()&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; qs.query.group_by = ['item_type']&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; qs.query.having = ['COUNT(item_type) &amp;amp;gt; 1']&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; item_types = [i.item_type for i in qs]&lt;br /&gt;
    &amp;amp;gt;&amp;amp;gt;&amp;amp;gt; item_types&lt;br /&gt;
&lt;br /&gt;
10. Кешування процедури &lt;br /&gt;
&lt;br /&gt;
 @cached( trigger = { &amp;quot;signal&amp;quot;&amp;amp;nbsp;: ( signals.post_save, signals.post_delete ),&amp;quot;sender&amp;quot;&amp;amp;nbsp;: Post  } )&lt;br /&gt;
 def get_latest_posts():&lt;br /&gt;
     return list( Post.objects.all().order_by( &amp;quot;-date&amp;quot; )[:5] )&lt;br /&gt;
&lt;br /&gt;
11. Дописування методів в адмінку &lt;br /&gt;
&lt;br /&gt;
    def remove(self):&lt;br /&gt;
        from django.core.urlresolvers import reverse&lt;br /&gt;
        return '&amp;amp;lt;a href=&amp;quot;%s&amp;quot; class=&amp;quot;deletelink&amp;quot;&amp;amp;gt;Delete&amp;amp;lt;/a&amp;amp;gt;'&amp;amp;nbsp;% reverse( &amp;quot;django.contrib.admin.views.main.delete_stage&amp;quot;,&lt;br /&gt;
            args = ( self.__class__._meta.app_label, self.__class__.__name__.lower(), self._get_pk_val(), ) )&lt;br /&gt;
    remove.allow_tags = True&lt;br /&gt;
&lt;br /&gt;
12. Приклад WSGI &lt;br /&gt;
&lt;br /&gt;
 sys.stdout = sys.stderr&lt;br /&gt;
 import os, sys&lt;br /&gt;
 sys.path.append('/usr/lib/python2.4/site-packages/django')&lt;br /&gt;
 sys.path.append('/var/www/paradise/paradise')&lt;br /&gt;
 sys.path.append('/var/www/paradise')&lt;br /&gt;
 os.environ['DJANGO_SETTINGS_MODULE'] = 'paradise.settings'&lt;br /&gt;
 import django.core.handlers.wsgi&lt;br /&gt;
 application = django.core.handlers.wsgi.WSGIHandler()&lt;br /&gt;
&lt;br /&gt;
13. Профілі користувачів &lt;br /&gt;
&lt;br /&gt;
 from django.contrib import admin&lt;br /&gt;
 from profile.models import UserProfile&lt;br /&gt;
 from django.contrib.auth.models import User&lt;br /&gt;
 class ProfileInline(admin.StackedInline):&lt;br /&gt;
     model = UserProfile&lt;br /&gt;
     extra = 1&lt;br /&gt;
     max_num = 1&lt;br /&gt;
&lt;br /&gt;
 class ProfileAdmin(admin.ModelAdmin):&lt;br /&gt;
     inlines = (ProfileInline,)&lt;br /&gt;
     admin.site.unregister(User)  #!!!&lt;br /&gt;
     admin.site.register(User, ProfileAdmin)&lt;br /&gt;
&lt;br /&gt;
14. Профілі 2 &lt;br /&gt;
&lt;br /&gt;
 from django.contrib.auth.models import User&lt;br /&gt;
 User.add_to_class('department',models.CharField(max_length=250,blank=True))&lt;br /&gt;
 User.add_to_class('position',models.CharField(max_length=250,blank=True))&lt;br /&gt;
 User._meta.admin.fields += (('Custom', {'fields': ('department','position',)}),)&lt;br /&gt;
 User._meta.admin.list_display += ('department','position',)&lt;br /&gt;
 def get_user_name(self):&lt;br /&gt;
     if self.first_name or self.last_name:&lt;br /&gt;
         return self.first_name + &amp;quot; &amp;quot; + self.last_name&lt;br /&gt;
     return self.username&lt;br /&gt;
 User.add_to_class(&amp;quot;get_user_name&amp;quot;,get_user_name)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; 15. Якщо є яйця в пітоні &lt;br /&gt;
&lt;br /&gt;
 /etc/sysconfig/httpd&lt;br /&gt;
 export PYTHON_EGG_CACHE=&amp;quot;/var/cache/python-eggs&amp;quot; &lt;br /&gt;
&lt;br /&gt;
16. Кеш в Django &lt;br /&gt;
добавити в апач конфігурацію&lt;br /&gt;
 &amp;lt;IfModule mod_expires.c&amp;gt;&lt;br /&gt;
     &amp;lt;FilesMatch &amp;quot;\.(jpg|gif|png|css|js)$&amp;quot;&amp;gt;&lt;br /&gt;
          ExpiresActive on&lt;br /&gt;
          ExpiresDefault &amp;quot;access plus 3 days&amp;quot;&lt;br /&gt;
     &amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;
 &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
у файлі views.py:&lt;br /&gt;
 from django.views.decorators.cache import cache_page&lt;br /&gt;
 ....&lt;br /&gt;
 @cache_page(60 * 15)&lt;br /&gt;
 def show_page(request, url=None, page_num=0):&lt;br /&gt;
     ....&lt;br /&gt;
     ....&lt;br /&gt;
у файлі admin.py:&lt;br /&gt;
 from django.core.cache import cache&lt;br /&gt;
 from django.conf import settings&lt;br /&gt;
 ....     &lt;br /&gt;
 def save_model(self, request, obj, form, change):&lt;br /&gt;
     #cache.delete('views.decorators.cache.cache_header.%s./%s/' % (settings.CACHE_MIDDLEWARE_KEY_PREFIX, obj.url))&lt;br /&gt;
     '''cache._cache.flush_all()''' # ось так для memcache!!! &lt;br /&gt;
     obj.save()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
17. Корзина &lt;br /&gt;
&lt;br /&gt;
 def delete(self, trash=True):&lt;br /&gt;
     if not self.trashed_at and trash:&lt;br /&gt;
         self.trashed_at = datetime.now()&lt;br /&gt;
         self.save()&lt;br /&gt;
     else:&lt;br /&gt;
         super(SomeModel, self).delete()&lt;br /&gt;
&lt;br /&gt;
18. Використання unordered_list &lt;br /&gt;
&amp;lt;pre&amp;gt;['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']], then {{ var|unordered_list }} would return:&lt;br /&gt;
&amp;amp;lt;li&amp;amp;gt;States&lt;br /&gt;
&amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;li&amp;amp;gt;Kansas&lt;br /&gt;
        &amp;amp;lt;ul&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;li&amp;amp;gt;Lawrence&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
                &amp;amp;lt;li&amp;amp;gt;Topeka&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
        &amp;amp;lt;li&amp;amp;gt;Illinois&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/ul&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/li&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
18. Використання календаря&lt;br /&gt;
&amp;lt;pre&amp;gt;class EventSplitDateTime(forms.SplitDateTimeWidget):&lt;br /&gt;
    def __init__(self, attrs=None):&lt;br /&gt;
        widgets = [forms.TextInput(attrs={'class': 'vDateField'}), &lt;br /&gt;
                   forms.TextInput(attrs={'class': 'vTimeField'})]&lt;br /&gt;
        # Note that we're calling MultiWidget, not SplitDateTimeWidget, because&lt;br /&gt;
        # we want to define widgets.&lt;br /&gt;
        forms.MultiWidget.__init__(self, widgets, attrs)&lt;br /&gt;
&lt;br /&gt;
    def format_output(self, rendered_widgets):&lt;br /&gt;
        return mark_safe(u'%s&amp;lt;br /&amp;gt;%s' % (rendered_widgets[0], rendered_widgets[1]))&lt;br /&gt;
&lt;br /&gt;
class EventForm(forms.Form):&lt;br /&gt;
    start = forms.DateTimeField(label=ugettext(&amp;quot;Start&amp;quot;), widget=EventSplitDateTime())&lt;br /&gt;
    end = forms.DateTimeField(label=ugettext(&amp;quot;End&amp;quot;), widget=EventSplitDateTime())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
19. Рестарт WSGI без апача&lt;br /&gt;
&amp;lt;pre&amp;gt;@never_cache&lt;br /&gt;
def restart(request):&lt;br /&gt;
    ''' Перезапуск демона '''&lt;br /&gt;
    if request.META['mod_wsgi.process_group'] != '':&lt;br /&gt;
        import signal, os&lt;br /&gt;
        os.kill(os.getpid(), signal.SIGINT)&lt;br /&gt;
        ret = 'restarted'&lt;br /&gt;
    else:&lt;br /&gt;
        ret = 'not find porcess_group'&lt;br /&gt;
        &lt;br /&gt;
    return HttpResponse(ret, mimetype='text/plain')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
20. Фільтрація в моделі в зовнішньому ключі&lt;br /&gt;
 models.ForeignKey(Test, limit_choices_to = {'pub_date__lte': datetime.now})&lt;br /&gt;
21. Django &amp;amp; Cron&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import sys&lt;br /&gt;
import settings&lt;br /&gt;
from django.core.management import setup_environ&lt;br /&gt;
setup_environ(settings)&lt;br /&gt;
module_name = sys.argv[1]&lt;br /&gt;
exec('import %s' % module_name)&lt;br /&gt;
exec('%s.%s' % (module_name, ' '.join(sys.argv[2:])))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И теперь при помощи этого скрипта мы можем вызывать функции наших “вьюшек” из командной строки и из cron:&lt;br /&gt;
 # python /path/to/project/run.py report.views &amp;quot;send_emails()&amp;quot;&lt;br /&gt;
&lt;br /&gt;
22. Багато з'єднань з базою&lt;br /&gt;
 from django.db import load_backend&lt;br /&gt;
 myBackend = load_backend('postgresql_psycopg2') # or 'mysql', 'sqlite3', 'oracle'&lt;br /&gt;
 myConnection = myBackend.DatabaseWrapper({&lt;br /&gt;
     'DATABASE_HOST': '192.168.1.1',&lt;br /&gt;
     'DATABASE_NAME': 'my_database',&lt;br /&gt;
     'DATABASE_OPTIONS': {},&lt;br /&gt;
     'DATABASE_PASSWORD': &amp;quot;&amp;quot;,&lt;br /&gt;
     'DATABASE_PORT': &amp;quot;&amp;quot;,&lt;br /&gt;
     'DATABASE_USER': &amp;quot;my_user&amp;quot;,&lt;br /&gt;
     'TIME_ZONE': &amp;quot;America/New_York&amp;quot;,})&lt;br /&gt;
 # Now we can do all the standard raw sql stuff with myConnection.&lt;br /&gt;
 myCursor = myConnection.cursor()&lt;br /&gt;
 myCursor.execute(&amp;quot;SELECT COUNT(1) FROM my_table;&amp;quot;)&lt;br /&gt;
 myCursor.fetchone()&lt;br /&gt;
&lt;br /&gt;
23. Автоматична перегрузка коду (для Apache)&lt;br /&gt;
&lt;br /&gt;
в конфіг добавляємо&lt;br /&gt;
 WSGIScriptReloading On&lt;br /&gt;
 WSGIReloadMechanism Process&lt;br /&gt;
&lt;br /&gt;
 $ touch my_project.wsgi&lt;br /&gt;
24. Доступ до url адмінки&lt;br /&gt;
 from django.core import urlresolvers&lt;br /&gt;
 url = urlresolvers.reverse('admin:mysite_product_change', args=(obj.id,))&lt;br /&gt;
&lt;br /&gt;
25. Фільтрація по датам&lt;br /&gt;
 extra_data = {&amp;quot;d&amp;quot;: &amp;quot;date(created)&amp;quot;}&lt;br /&gt;
 result = MyModel.objects.extra(extra_data).values('d').annotate(cnt=Count('pk')).order_by()&lt;br /&gt;
26. RAW SQL&lt;br /&gt;
 authors = Author.objects.raw(&amp;quot;SELECT *, age(birth_date) as age FROM library_authors&amp;quot;)&lt;br /&gt;
 for author in authors:&lt;br /&gt;
     print &amp;quot;%s is %s.&amp;quot; % (author.first_name, author.age)&lt;br /&gt;
27. Тестовий поштовий сервер&lt;br /&gt;
 python -m smtpd -n -c DebuggingServer localhost:1025&lt;/div&gt;</summary>
		<author><name>95.133.12.5</name></author>
		
	</entry>
</feed>