<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Техно-логи &#187; python</title>
	<atom:link href="http://www.kurdyukov.com/tag/python/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kurdyukov.com</link>
	<description>Заметки о разработке и прочей жизни</description>
	<lastBuildDate>Sat, 04 Feb 2012 01:34:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Простой REST для Django</title>
		<link>http://www.kurdyukov.com/2009/02/16/rest-django/</link>
		<comments>http://www.kurdyukov.com/2009/02/16/rest-django/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 11:32:53 +0000</pubDate>
		<dc:creator>alik</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.kurdyukov.com/?p=23</guid>
		<description><![CDATA[Для одного прототипа понадобилось сделать быстренько REST сервис для стандартного набора действий типа Create, Read, Update, Delete (CRUD). Писать специальный код для этого не хотелось, поэтому мировой разум подсказал решение в виде django-rest-interface. Сама по себе библиотечка проста и изящна. Единственно НО &#8211; у нее нет классического setup.py, поэтому через easy_install установить не получится. Использовать [...]]]></description>
			<content:encoded><![CDATA[<p>Для одного прототипа понадобилось сделать быстренько <a href="http://en.wikipedia.org/wiki/REST">REST</a> сервис для стандартного набора действий типа Create, Read, Update, Delete (CRUD).</p>
<p>Писать специальный код для этого не хотелось, поэтому мировой разум подсказал решение в виде <a href="http://code.google.com/p/django-rest-interface/">django-rest-interface</a>.</p>
<p><span id="more-23"></span><br />
Сама по себе библиотечка проста и изящна. Единственно НО &#8211; у нее нет классического setup.py, поэтому через easy_install установить не получится.</p>
<p>Использовать сервис надо будет из Flex приложения, что тоже имеет особенности, а именно:</p>
<ul>
<li>Flex плохо дружит с XML тэгами с символом &laquo;-&raquo; в названии. А корневой элемент xml сериализатора для REST такой символ содержит</li>
<li>Flex использует теги для обозначения полей, название тега &#8211; это название поля. Сериализатор для полей создает тег field с атрибутом name.</li>
</ul>
<p>Для устранения этих проблем было сделано следующее:<br />
<strong>Создаем свой сериализатор</strong><br />
Сериализатор был сделать на основе стандартного сериализатора xml из поставки Python:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://www.kurdyukov.com/wp-content/plugins/wp-codebox/wp-codebox.php?p=23&amp;download=flexserializer.py">flexserializer.py</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p235"><td class="code" id="p23code5"><pre class="python" style="font-family:monospace;"><span style="color: #483d8b;">&quot;&quot;&quot;
Flex serializer. Based on XML serializer.
&quot;&quot;&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">conf</span> <span style="color: #ff7700;font-weight:bold;">import</span> settings
<span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">core</span>.<span style="color: black;">serializers</span> <span style="color: #ff7700;font-weight:bold;">import</span> base
<span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">db</span> <span style="color: #ff7700;font-weight:bold;">import</span> models
<span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">utils</span>.<span style="color: black;">xmlutils</span> <span style="color: #ff7700;font-weight:bold;">import</span> SimplerXMLGenerator
<span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">utils</span>.<span style="color: black;">encoding</span> <span style="color: #ff7700;font-weight:bold;">import</span> smart_unicode
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">xml</span>.<span style="color: black;">dom</span> <span style="color: #ff7700;font-weight:bold;">import</span> pulldom
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> Serializer<span style="color: black;">&#40;</span>base.<span style="color: black;">Serializer</span><span style="color: black;">&#41;</span>:
	<span style="color: #483d8b;">&quot;&quot;&quot;
	Serializes a QuerySet to XML.
	&quot;&quot;&quot;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> indent<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, level<span style="color: black;">&#41;</span>:
		<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">options</span>.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'indent'</span>, <span style="color: #008000;">None</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #008000;">None</span>:
			<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">ignorableWhitespace</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\n</span>'</span> + <span style="color: #483d8b;">' '</span> <span style="color: #66cc66;">*</span> <span style="color: #008000;">self</span>.<span style="color: black;">options</span>.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'indent'</span>, <span style="color: #008000;">None</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">*</span> level<span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> start_serialization<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
		<span style="color: #483d8b;">&quot;&quot;&quot;
		Start serialization -- open the XML document and the root element.
		&quot;&quot;&quot;</span>
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span> = SimplerXMLGenerator<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">stream</span>, <span style="color: #008000;">self</span>.<span style="color: black;">options</span>.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;encoding&quot;</span>, settings.<span style="color: black;">DEFAULT_CHARSET</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">startDocument</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">startElement</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;objects&quot;</span>, <span style="color: black;">&#123;</span><span style="color: #483d8b;">&quot;version&quot;</span> : <span style="color: #483d8b;">&quot;1.0&quot;</span><span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> end_serialization<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
		<span style="color: #483d8b;">&quot;&quot;&quot;
		End serialization -- end the document.
		&quot;&quot;&quot;</span>
		<span style="color: #008000;">self</span>.<span style="color: black;">indent</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">endElement</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;objects&quot;</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">endDocument</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> start_object<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, obj<span style="color: black;">&#41;</span>:
		<span style="color: #483d8b;">&quot;&quot;&quot;
		Called as each object is handled.
		&quot;&quot;&quot;</span>
		<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #008000;">hasattr</span><span style="color: black;">&#40;</span>obj, <span style="color: #483d8b;">&quot;_meta&quot;</span><span style="color: black;">&#41;</span>:
			<span style="color: #ff7700;font-weight:bold;">raise</span> base.<span style="color: black;">SerializationError</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Non-model object (%s) encountered during serialization&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: #008000;">type</span><span style="color: black;">&#40;</span>obj<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
		<span style="color: #008000;">self</span>.<span style="color: black;">indent</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">startElement</span><span style="color: black;">&#40;</span>obj.__class__.__name__, <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: black;">indent</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">startElement</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;pk&quot;</span>, <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">characters</span><span style="color: black;">&#40;</span>smart_unicode<span style="color: black;">&#40;</span>obj._get_pk_val<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">endElement</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;pk&quot;</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">startElement</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;model&quot;</span>, <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">characters</span><span style="color: black;">&#40;</span>smart_unicode<span style="color: black;">&#40;</span>obj._meta<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">endElement</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;model&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> end_object<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, obj<span style="color: black;">&#41;</span>:
		<span style="color: #483d8b;">&quot;&quot;&quot;
		Called after handling all fields for an object.
		&quot;&quot;&quot;</span>
		<span style="color: #008000;">self</span>.<span style="color: black;">indent</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">endElement</span><span style="color: black;">&#40;</span>obj.__class__.__name__<span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> handle_field<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, obj, field<span style="color: black;">&#41;</span>:
		<span style="color: #483d8b;">&quot;&quot;&quot;
		Called to handle each field on an object (except for ForeignKeys and
		ManyToManyFields)
		&quot;&quot;&quot;</span>
		<span style="color: #008000;">self</span>.<span style="color: black;">indent</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">startElement</span><span style="color: black;">&#40;</span>field.<span style="color: black;">name</span>, <span style="color: black;">&#123;</span>
			<span style="color: #483d8b;">&quot;type&quot;</span> : field.<span style="color: black;">get_internal_type</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
		<span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>
&nbsp;
		<span style="color: #808080; font-style: italic;"># Get a &quot;string version&quot; of the object's data (this is handled by the</span>
		<span style="color: #808080; font-style: italic;"># serializer base class).</span>
		<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">getattr</span><span style="color: black;">&#40;</span>obj, field.<span style="color: black;">name</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #008000;">None</span>:
			value = <span style="color: #008000;">self</span>.<span style="color: black;">get_string_value</span><span style="color: black;">&#40;</span>obj, field<span style="color: black;">&#41;</span>
			<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">characters</span><span style="color: black;">&#40;</span>smart_unicode<span style="color: black;">&#40;</span>value<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">else</span>:
			<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">addQuickElement</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;None&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">endElement</span><span style="color: black;">&#40;</span>field.<span style="color: black;">name</span><span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> handle_fk_field<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, obj, field<span style="color: black;">&#41;</span>:
		<span style="color: #483d8b;">&quot;&quot;&quot;
		Called to handle a ForeignKey (we need to treat them slightly
		differently from regular fields).
		&quot;&quot;&quot;</span>
		<span style="color: #008000;">self</span>._start_relational_field<span style="color: black;">&#40;</span>field<span style="color: black;">&#41;</span>
		related = <span style="color: #008000;">getattr</span><span style="color: black;">&#40;</span>obj, field.<span style="color: black;">name</span><span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">if</span> related <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #008000;">None</span>:
			<span style="color: #ff7700;font-weight:bold;">if</span> field.<span style="color: black;">rel</span>.<span style="color: black;">field_name</span> == related._meta.<span style="color: black;">pk</span>.<span style="color: black;">name</span>:
				<span style="color: #808080; font-style: italic;"># Related to remote object via primary key</span>
				related = related._get_pk_val<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
			<span style="color: #ff7700;font-weight:bold;">else</span>:
				<span style="color: #808080; font-style: italic;"># Related to remote object via other field</span>
				related = <span style="color: #008000;">getattr</span><span style="color: black;">&#40;</span>related, field.<span style="color: black;">rel</span>.<span style="color: black;">field_name</span><span style="color: black;">&#41;</span>
			<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">characters</span><span style="color: black;">&#40;</span>smart_unicode<span style="color: black;">&#40;</span>related<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">else</span>:
			<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">addQuickElement</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;None&quot;</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">endElement</span><span style="color: black;">&#40;</span>field.<span style="color: black;">name</span><span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> handle_m2m_field<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, obj, field<span style="color: black;">&#41;</span>:
		<span style="color: #483d8b;">&quot;&quot;&quot;
		Called to handle a ManyToManyField. Related objects are only
		serialized as references to the object's PK (i.e. the related *data*
		is not dumped, just the relation).
		&quot;&quot;&quot;</span>
		<span style="color: #ff7700;font-weight:bold;">if</span> field.<span style="color: black;">creates_table</span>:
			<span style="color: #008000;">self</span>._start_relational_field<span style="color: black;">&#40;</span>field<span style="color: black;">&#41;</span>
			<span style="color: #ff7700;font-weight:bold;">for</span> relobj <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">getattr</span><span style="color: black;">&#40;</span>obj, field.<span style="color: black;">name</span><span style="color: black;">&#41;</span>.<span style="color: black;">iterator</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
				<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">addQuickElement</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;object&quot;</span>, attrs=<span style="color: black;">&#123;</span><span style="color: #483d8b;">&quot;pk&quot;</span> : smart_unicode<span style="color: black;">&#40;</span>relobj._get_pk_val<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>
			<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">endElement</span><span style="color: black;">&#40;</span>field.<span style="color: black;">name</span><span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> _start_relational_field<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, field<span style="color: black;">&#41;</span>:
		<span style="color: #483d8b;">&quot;&quot;&quot;
		Helper to output the  element for relational fields
		&quot;&quot;&quot;</span>
		<span style="color: #008000;">self</span>.<span style="color: black;">indent</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">xml</span>.<span style="color: black;">startElement</span><span style="color: black;">&#40;</span>field.<span style="color: black;">name</span>, <span style="color: black;">&#123;</span>
			<span style="color: #483d8b;">&quot;rel&quot;</span>  : field.<span style="color: black;">rel</span>.__class__.__name__,
			<span style="color: #483d8b;">&quot;to&quot;</span>   : smart_unicode<span style="color: black;">&#40;</span>field.<span style="color: black;">rel</span>.<span style="color: black;">to</span>._meta<span style="color: black;">&#41;</span>,
		<span style="color: black;">&#125;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>2. Создаем сериализатор для django-rest</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p23code6'); return false;">View Code</a> PYTHON</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p236"><td class="code" id="p23code6"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">class</span> FlexResponder<span style="color: black;">&#40;</span>SerializeResponder<span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, paginate_by=<span style="color: #008000;">None</span>, allow_empty=<span style="color: #008000;">False</span><span style="color: black;">&#41;</span>:
		SerializeResponder.<span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, <span style="color: #483d8b;">'flex'</span>, <span style="color: #483d8b;">'application/xml'</span>,
					paginate_by=paginate_by, allow_empty=allow_empty<span style="color: black;">&#41;</span>
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">def</span> error<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, request, status_code, error_dict=<span style="color: #008000;">None</span><span style="color: black;">&#41;</span>:
		<span style="color: #483d8b;">&quot;&quot;&quot;
		Return XML error response that includes a human readable error
		message, application-specific errors and a machine readable
		status code.
		&quot;&quot;&quot;</span>
		<span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">conf</span> <span style="color: #ff7700;font-weight:bold;">import</span> settings
		<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> error_dict:
			error_dict = ErrorDict<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
		response = HttpResponse<span style="color: black;">&#40;</span>mimetype = <span style="color: #008000;">self</span>.<span style="color: black;">mimetype</span><span style="color: black;">&#41;</span>
		response.<span style="color: black;">status_code</span> = status_code
		<span style="color: #dc143c;">xml</span> = SimplerXMLGenerator<span style="color: black;">&#40;</span>response, settings.<span style="color: black;">DEFAULT_CHARSET</span><span style="color: black;">&#41;</span>
		<span style="color: #dc143c;">xml</span>.<span style="color: black;">startDocument</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
		<span style="color: #dc143c;">xml</span>.<span style="color: black;">startElement</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;django-error&quot;</span>, <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>
		<span style="color: #dc143c;">xml</span>.<span style="color: black;">addQuickElement</span><span style="color: black;">&#40;</span>name=<span style="color: #483d8b;">&quot;error-message&quot;</span>, contents=<span style="color: #483d8b;">'%d %s'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>status_code, STATUS_CODE_TEXT<span style="color: black;">&#91;</span>status_code<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
		<span style="color: #dc143c;">xml</span>.<span style="color: black;">addQuickElement</span><span style="color: black;">&#40;</span>name=<span style="color: #483d8b;">&quot;status-code&quot;</span>, contents=<span style="color: #008000;">str</span><span style="color: black;">&#40;</span>status_code<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">if</span> error_dict:
			<span style="color: #dc143c;">xml</span>.<span style="color: black;">startElement</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;model-errors&quot;</span>, <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>
			<span style="color: #ff7700;font-weight:bold;">for</span> <span style="color: black;">&#40;</span>model_field, errors<span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">in</span> error_dict.<span style="color: black;">items</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
				<span style="color: #ff7700;font-weight:bold;">for</span> error <span style="color: #ff7700;font-weight:bold;">in</span> errors:
					<span style="color: #dc143c;">xml</span>.<span style="color: black;">addQuickElement</span><span style="color: black;">&#40;</span>name=model_field, contents=error<span style="color: black;">&#41;</span>
			<span style="color: #dc143c;">xml</span>.<span style="color: black;">endElement</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;model-errors&quot;</span><span style="color: black;">&#41;</span>
		<span style="color: #dc143c;">xml</span>.<span style="color: black;">endElement</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;django-error&quot;</span><span style="color: black;">&#41;</span>
		<span style="color: #dc143c;">xml</span>.<span style="color: black;">endDocument</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">return</span> response</pre></td></tr></table></div>

<p>3. Подключаем сериализатор в Python через settings.py:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p23code7'); return false;">View Code</a> PYTHON</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p237"><td class="code" id="p23code7"><pre class="python" style="font-family:monospace;">SERIALIZATION_MODULES = <span style="color: black;">&#123;</span>
	<span style="color: #483d8b;">'flex'</span>: <span style="color: #483d8b;">'myserver.flex_serializer'</span>
<span style="color: black;">&#125;</span></pre></td></tr></table></div>

<p>4. Подключаем сериализатор к коллекции:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p23code8'); return false;">View Code</a> PYTHON</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p238"><td class="code" id="p23code8"><pre class="python" style="font-family:monospace;">test_resource = Collection<span style="color: black;">&#40;</span>
	queryset = models.<span style="color: black;">Test</span>.<span style="color: black;">objects</span>.<span style="color: #008000;">all</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>,
	responder = FlexResponder<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#41;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.kurdyukov.com/2009/02/16/rest-django/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

