Entradas

Localización española para OpenERP 8

Hasta este momento se han migrado y testeado los siguientes módulos:

  • l10n_es
  • l10n_es_account
  • l10n_es_account_invoice_sequence
  • l10n_es_fiscal_year_closing
  • l10n_es_toponyms
  • l10n_es_partner
  • l10n_es_partner_seq
  • l10n_es_account_balance_report
  • account_balance_reporting
  • l10n_es_bank_statement
  • l10n_es_payment_order
  • l10n_es_aeat
  • l10n_es_aeat_mod340
  • l10n_es_aeat_mod347

Para la instalación de l10n_es_toponyms, l10n_es_partner y l10n_es_partner_seq es necesario instalar el módulo base_location de la rama partner-contact-management, que es compatible en su versión 7.

Para la instalación de l10n_es_payment_order es necesario instalar el módulo account_payment_extension, pero el disponible en la rama account-payment no es instalable en la versión 8, así que hemos actualizado el módulo, los cambios están en la rama lp:~domatix/account-payment/8.0.

Para la instalación de l10n_es_aeat, l10n_es_aeat_mod340 y l10n_es_aeat_mod347 es necesario instalar el módulo account_chart_update de la rama account-financial-tools, que es compatibble en su versión 7. También es necesario instalar el módulo refund_original cuya versión mas actualizada se encuentra en repositorios de Acysos, pero que no es instalable en la versión 8, por lo que lo hemos migrado y está disponible en lp:~domatix/acysos/8.0.

Integración Django-CMS y REST Framework

1. SISTEMAS

Xubuntu-12.04.3-desktop-i386

2. INSTALACION DJANGO-CMS

2.1 Instalando requerimientos de Django-CMS (todos los requerimientos):

$ sudo apt-get install python2.7
$ sudo apt-get install python-pip
$ sudo pip install django-cms south

Debemos obtener algo tal que así:

Successfully installed django-cms south Django django-classy-tags html5lib django-mptt django-sekizai six
Cleaning up...

Asegurarnos de que no falta ningún requerimiento.

Creamos un proyecto de prueba y vemos que todo funciona correctamente, para ello

 $ cd ~/workspace
 $ django-admin.py startproject myproject
 $ cd myproject
 $ python manage.py runserver

Probamos que se está escuchando redireccionando 127.0.0.1:8000

django-cms-introduction

2.2 Instalar y configurar POSTGRES

Primero instalar Postgres y PGadmin

$ sudo apt-get install postgresql pgadmin3

Continuamos instalando el Driver de la base de datos

$ sudo apt-get install python-psycopg2

Creamos el usuario Postgres

developer@developer-VirtualBox:~$ sudo su postgres -c psql

psql (9.1.3)
Type "help" for help.
postgres=# ALTER USER postgres WITH PASSWORD 'your_password';

A continuación en el sistema operativo:

$ sudo passwd -d postgres
$ sudo su postgres
$ passwd

Reiniciamos el servicio y comprobamos que todo va bien:

developer@developer-VirtualBox:~$ sudo /etc/init.d/postgresql restart
* Restarting PostgreSQL 9.1 database server [ OK ]

Configurar postgres añadiendo al archivo pg_hba.conf esta configuración:

$ sudo gedit /etc/postgresql/9.1/main/pg_hba.conf

Añadir esta lí­nea al final del archivo:

local all all md5

Finalmente se volverá a  reinicar postgres

$ sudo /etc/init.d/postgresql restart

A continuación creamos el usuario propietario de la base de datos de django_cms

$ sudo -u postgres createuser --createdb --no-superuser --no-createrole --pwprompt django
$ sudo -u postgres psql -d postgres
$ postgres=# ALTER USER django WITH PASSWORD 'django_password';

A continuación la base de datos con el propietario creado

postgres=# CREATE DATABASE django_cms OWNER django;
postgres=# q

Ya sería posible añadir al archivo settings.py del CMS todo lo relativo a la base de datos que va a utilizar:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_p$
'NAME': 'django_cms', # Or path to database file i$
'USER': 'django', # Not used with sqlite3.
'PASSWORD': 'django_password', # Not used with sqlite3.
'HOST': '192.168.0.122', # Set to empty string for 192.168.0.122. N$
'PORT': '', # Set to empty string for default. Not$
 }

2.3 Configurar Django-CMS

Modificamos la cabecera del archivo settings.py

# -*- coding: utf-8 -*-
 import os
 gettext = lambda s: s
 PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))

Añadimos las siguientes aplicaciones a la sección INSTALLED_APPS:

INSTALLED_APPS = (
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'cms',
 'mptt',
 'menus',
 'south',
 'sekizai',
 'django.contrib.admin',
 # Uncomment the next line to enable admin documentation:
 # 'django.contrib.admindocs',
 )

También añadimos los plugins que sean necesarios:

-'cms.plugins.file'
 'cms.plugins.flash'
 'cms.plugins.googlemap'
 'cms.plugins.link'
 'cms.plugins.picture'
 'cms.plugins.snippet'
 'cms.plugins.teaser'
 'cms.plugins.text'
 'cms.plugins.video'
 'cms.plugins.twitter'

Por tanto, la sección de aplicaciones instaladas para el CMS quedaría tal que así:

INSTALLED_APPS = (
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'cms',
 'mptt',
 'menus',
 'south',
 'sekizai',
 'django.contrib.admin',
 'cms.plugins.file',
 'cms.plugins.flash',
 'cms.plugins.googlemap',
 'cms.plugins.link',
 'cms.plugins.picture',
 'cms.plugins.snippet',
 'cms.plugins.teaser',
 'cms.plugins.text',
 'cms.plugins.video',
 'cms.plugins.twitter',
# Uncomment the next line to enable admin documentation:
 # 'django.contrib.admindocs',
 )

Añadir las clases que hacen de Middleware:

MIDDLEWARE_CLASSES = (
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.middleware.doc.XViewMiddleware',
 'django.middleware.common.CommonMiddleware',
 'cms.middleware.page.CurrentPageMiddleware',
 'cms.middleware.user.CurrentUserMiddleware',
 'cms.middleware.toolbar.ToolbarMiddleware',
 'cms.middleware.language.LanguageCookieMiddleware',
 )

y de procesadores:

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

Referenciamos los futuros archivos estáticos, y no olvidar crear dicho directorio en el proyecto con permiso de escritura

STATIC_ROOT = os.path.join(PROJECT_PATH, "static")
STATIC_URL = "/static/"

Los mismo para los archivos multimedia:

MEDIA_ROOT = os.path.join(PROJECT_PATH, "media")
MEDIA_URL = "/media/"

De igual forma en lo relativo al directorio que contendrá los Templates:

TEMPLATE_DIRS = (
 # The docs say it should be absolute path: PROJECT_PATH is precisely one.
 # Life is wonderful!
 os.path.join(PROJECT_PATH, "templates"),
 )

Añadimos un template en la configuración:

CMS_TEMPLATES = (
 ('template_1.html', 'Template One'),
 )

Creamos dicho template a partir de un template base:

base.html

{% load cms_tags sekizai_tags %}
 <html>
 <head>
 {% render_block "css" %}
 </head>
 <body>
 {% cms_toolbar %}
 {% placeholder base_content %}
 {% block base_content %}{% endblock %}
 {% render_block "js" %}
 </body>
 </html>

template1.html

{% extends "base.html" %}
 {% load cms_tags %}
{% block base_content %}
 {% placeholder template_1_content %}
 {% endblock %}

Sincronizar la base de datos y crear usuario administrador de Django:

sincronizacion django

 

3. Django-Rest Framework

3.1 Instalación

 $ sudo pip install djangorestframework
 $ sudo pip install markdown # Markdown support for the browsable API.
 $ sudo pip install django-filter # Filtering support

A continuación, añadir al settings la aplicación rest-framework

INSTALLED_APPS = (
 ...
 'rest_framework',
 )

Añadir los permisos, en mi caso decidí no añadir los hyperlinked por un problema que tuve así que quedaría tal que así:

REST_FRAMEWORK = {
 # Use hyperlinked styles by default.
 # Only used if the `serializer_class` attribute is not set on a view.
 #'DEFAULT_MODEL_SERIALIZER_CLASS':
 # 'rest_framework.serializers.HyperlinkedModelSerializer',
# Use Django's standard `django.contrib.auth` permissions,
 # or allow read-only access for unauthenticated users.
 'DEFAULT_PERMISSION_CLASSES': [
 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
 ]
 }

Configurar el archivo urls.py obteniendo finalmente la url por defecto del cms, la de administrador /admin, y la escucha en /rest

urls.py

 from django.conf.urls.i18n import i18n_patterns
 from django.contrib import admin
 from django.conf.urls import patterns, url, include
 from django.contrib.auth.models import User
 from rest_framework import routers,viewsets
 from django.conf import settings
admin.autodiscover()
urlpatterns = i18n_patterns('',
 url(r'^admin/', include(admin.site.urls)),
 url(r'^', include('cms.urls')),
 )
# ViewSets define the view behavior.
 class UserViewSet(viewsets.ModelViewSet):
 model = User
router = routers.DefaultRouter()
 router.register(r'users', UserViewSet)
# Wire up our API using automatic URL routing.
 # Additionally, we include login URLs for the browseable API.
 urlpatterns += patterns('',
 url(r'^rest/', include(router.urls)),
 url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
 )
if settings.DEBUG:
 urlpatterns = patterns('',
 url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
 {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
 url(r'', include('django.contrib.staticfiles.urls')),
 ) + urlpatterns

Podemos comprobar el web-service 192.168.0.122:8000/rest

rest-example

3.2 Explotación del Servicio REST

En caso de no disponer del comando curl lo instalamos

$ sudo apt-get install curl

Por último hacemos la prueba, enviando una parte de un formulario y utilizando el usuario administrador de django_cms que creamos previamente:

curl -X POST -H "Content-Type: application/json" -d '
 {
 "username": "PedroOERP",
 "password": "password"
 }' -u usuario:password http://127.0.0.1:8000/rest/users/

Y este sería el resultado del método GET

rest-get-example

 

 

4. LINKS:

Django
http://django-cms.readthedocs.org/en/latest/getting_started/tutorial.html

Rest
http://django-rest-framework.org/