quinta-feira, agosto 29, 2013

Creating Django permissions using South Datamigrations.

After a long time away I'm back to post (for my own information and for everybody who needs it) how to create django permissions using South datamigrations. For understanding what is Django, South and Python, follow the links in the end of this post.

First step, create a Data Migration:
python manage.py datamigration app_name name_describing_your_permission_creation

This command will generate a file like XXXX_name_describing_your_permission_creation.py. Open and edit this file. It will have a "fowards" method. Change it to be like this:

     def forwards(self, orm):
        ct = orm['contenttypes.ContentType'].objects.get(
            model='model_name', app_label='app_label')
        orm['auth.permission'].objects.get_or_create(
            content_type=ct, codename='permission_codename',
            defaults=dict(name=u'Permission Label')
        )

After create this, run this command:
python manage.py migrate your_app_name

It will apply your data migration creating permissions. You can add the backwards for your datamigration deleting the permissions:

    def backwards(self, orm):
        ct = orm['contenttypes.ContentType'].objects.get(
            model='nome_do_model', app_label='label_da_app')
        orm['auth.permission'].objects.filter(
            content_type=ct, codename='permission_codename',
        ).delete()

I found it on this page on Stack Overflow:
http://stackoverflow.com/questions/1742021/adding-new-custom-permissions-in-django

More interesting links:
[1] http://south.aeracode.org/
[2] https://www.djangoproject.com/
[3] http://www.python.org.br/wiki
[4] https://docs.djangoproject.com/en/dev/ref/django-admin/#syncdb
[5] https://docs.djangoproject.com/en/dev/topics/auth/

Criando permissões Django com South

Após muito tempo sem postar volto aqui pra registrar (pra mim mesmo e a quem interessar), como criar permissões usando South. Obviamente para entender este post é necessário conhecer o South[1], Django[2] e Python[3]. Se não preenche nenhum dos requisitos provavelmente isso vai parecer grego.

Quando criamos um model no Django e adicionamos permissões (seja no Meta ou as permissões automáticas) o comando syncdb[4] as adiciona ao .model Permission [5]. Apesar disso, quem usa o South não usa syncdb e o south, muito simpático não cria as permissões. Explicado o problema, acredito...

Com isso frequentemente acabava criando as permissões manualmente via django admin porém em um grupo de desenvolvedores isso acaba sendo trabalhoso demais por que as bases deveriam ser o mais semelhantes possível Enfim, precisava de forma simples atualizar as permissões com o South. Obviamente uma datamigration seria a solução obvia, e procurando quais seriam os dados necessários encontrei no Stack Overflow[6] a resposta:

Primeiro vamos criar a datamigration:
python manage.py datamigration nome_da_app nome_que_quiser_descrevendo_a_data_migration

Esse comando vai gerar um arquivo XXXX_nome_que_quiser_descrevendo_a_data_migration.py. Abra o arquivo para edição. Vai haver um método fowards que deve ficar assim:

    def forwards(self, orm):
        ct = orm['contenttypes.ContentType'].objects.get(
            model='nome_do_model', app_label='label_da_app')
        orm['auth.permission'].objects.get_or_create(
            content_type=ct, codename='codename_da_permission',
            defaults=dict(name=u'Label da Permission')
        )

Se quiser pode adicionar também o backwards:

    def backwards(self, orm):
        ct = orm['contenttypes.ContentType'].objects.get(
            model='nome_do_model', app_label='label_da_app')
        orm['auth.permission'].objects.filter(
            content_type=ct, codename='codename_da_permission',
        ).delete()

Espero que ajude!

[1] http://south.aeracode.org/
[2] https://www.djangoproject.com/
[3] http://www.python.org.br/wiki
[4] https://docs.djangoproject.com/en/dev/ref/django-admin/#syncdb
[5] https://docs.djangoproject.com/en/dev/topics/auth/
[6]http://stackoverflow.com/questions/1742021/adding-new-custom-permissions-in-django

terça-feira, setembro 14, 2010

Cidades do Brasil para Mysql+Spaghetti*

Recentemente precisei da lista de cidades do brasil e encontrei esse link com elas formatadas para firebird. Como precisava usar com Mysql+php com spaghetti, alterei o arquivo, que pode ser visualizado em: www.guimesmo.com/cidades.html.

Qualquer Bug, comentae (as chaves estrangeiras não foram definidas na estrutura sql. O Spaghetti faz isso no php, me livrando do DB).

Qualquer dúvida:
http://spaghettiphp.org
http://forum.spaghettiphp.org

(fiz o html pra ninguem precisar fazer download do sql. Se for interessante, ve a estrutura e copia do navegador direto. Quem quiser o .sql clica aqui.)
.
.

domingo, agosto 30, 2009

Habilitar Python em servidor apache (Mandriva)

Estou começando agora a me aprofundar na linguagem python pra web. Obviamente, preciso testar meus scripts, mas a tarefa fica complicada sem documentação. Depois de procurar bastante, encontrei esta página que ensina os passos para várias distros, e o mandriva está entre elas. Não vou entrar em detalhes nem me aprofundar muito no assunto, mas pra quem não manja de inglês é só executar os comandos que a coisa vai estar funcionando. Abraço.

http://www.howtoforge.com/embedding-python-in-apache2-with-mod_python-debian-ubuntu-fedora-centos-mandriva-opensuse-p2

domingo, novembro 30, 2008

Instalar Aptana Studio no Mandriva Linux

Depois de um tempão sem postar nada (como de costume), venho trazer um tutorial curto de instalação do Aptana (IDE pra desenvolvimento web baseada no Eclipse) no mandriva.
Não sei se outras formas de instalação funcionam, tentei de tudo, mas somente agora consegui fazê-lo funcionar sem erros.

Primeiro, baixe o Aptana, em www.aptana.com/studio/download/

Depois de baixar, descompacte o arquivo (aqui descompactei em /usr/local/). Se tentar rodar o arquivo AptanaStudio agora ele não vai funcionar. Na página do desenvolvedor ele mostra o que fazer... mas não da certo. Para executar o aptana, crie o seguinte escript:

#!/bin/sh
MOZILLA_FIVE_HOME=/usr/lib/xulrunner
if [ $LD_LIBRARY_PATH ]; then
LD_LIBRARY_PATH=$MOZILLA_FIVE_HOME:$LD_LIBRARY_PATH
else
LD_LIBRARY_PATH=$MOZILLA_FIVE_HOME
fi
export MOZILLA_FIVE_HOME LD_LIBRARY_PATH
/usr/local/aptana/AptanaStudio

Eu Criei o Scrip como /usr/bin/aptana, assim posso chamá-lo com um comando "aptana", mas isso fica a seu gosto. o endereço "/usr/local/aptana/AptanaStudio" também deve conter o endereço onde está o aptana. De permissão de execução ao script com chmod +x, no meu caso:

chmod +x /usr/bin/aptana

Depois disso você testa e... não funciona... eu tentei de tudo... alterei para a pasta do xulrunner, mas não deu certo... enfim, procurando encontrei Este Link que foi o que funcionou, então segue:

Baixe Este Arquivo

Descompacte e mova para /usr/lib/:

mv xulrunner/ /usr/lib/

Obviamente, isso deve ser feito como root. Depois execute o aptana. Aqui funcionou lindamente depois de dois dias tentando.

O Tutorial foi feito as pressas, então peço desculpas por eventuais erros. Caso Não tenha conseguido executar, comente. Caso encontre erros, faça o mesmo.

Agora eu vou testar o tal editor, ja que o quanta plus me abandonou quando migrei para o KDE4


PS: aqui instalei o JDK da sun para para fazer a instalação. Caso sua instalação seja diferente, pode ser que os cominhos precisem ser alterados.

segunda-feira, outubro 13, 2008

Instalando o Mandriva Linux 2009 sem DVD

O mandriva linux 2009 free, assim como o 2008.1 vem em duas versões: em 3 CDs ou1 DVD. A versão em DVD é mais completa, e incomoda menos na instalação, com inserção e remoção do CD. Apesar disso, alguns computadores (como o meu) não têm leitor ou gravador de DVDs, o que acaba obrigando a instalação por meio de CDs. Ou obrigava. Este tutorial ensina como instalar o mandriva linux pelo disco rígido e sem grandes complicações. Vamos ao Tutorial:

Baixe o Mandriva Linux 2009 versão em DVD;


Crie um diretório na raíz de alguma partição do seu disco rígido, que não seja a partição onde será instalado o sistema. Por exemplo, se o seu disco tem uma partição para o sistema e outra para a home, crie a pasta com:

mkdir /home/mdv2009

, sendo que mdv2009 é um nome alternativo somente para a montagem da imagem do DVD. (faça isso como root).
crie um diretório temporario para receber os arquivos do DVD. este pode ser em qualquer lugar, mas, para facilitar, eu crio na /home também:

mkdir /home/temporario

Depois de criado o diretório para os arquivos, vamos montar a imagem do dvd no diretório criado

mount -o loop /caminha/do/arquivo.iso /home/temporario

Depois disso, copie os arquivos para o diretório que será usado na instalação

cp -R /home/temporario/* /home/mdv2009

o argumento "-R" é para que ele copie também os diretórios (recursivamente). Este processo pode demorar um pouco, são 4gbs de informação sendo copiados. Não cancele ou feche o terminal.

Após a cópia dos arquivos, basta criar uma entrada no grub para bootar pela imagem do dvd para iniciar a instalação. Para isso você pode usar um editor qualquer. O comando inclui o kwrite:

kwrite /boot/grub/menu.lst

No fim do arquivo inclua:

title Mandriva_2009.0
kernel (hd1,0)/mdv2009/i586/isolinux/alt0/vmlinuz
initrd (hd1,0)/mdv2009/i586/isolinux/alt0/all.rdz

sendo que 1,0 deve ser substituido pelo correspondente de suas partições, lembrando que:
0,x: zero é o numero do disco;
x,0: zero é o numero da partição.
No meu caso, o diretório está no segundo disco (1), na primeira partição (0).

/mdv2009/tmp/i586/isolinux/alt0/vmlinuz e /mdv2009/i586/isolinux/alt0/all.rdz são os arquivos que o sistema irá utilizar para bootar o instalador. /mdv2009 é o diretório que criamos para receber os arquivos, lembra?

Salve o arquivo e para iniciar a instalação reinicie o computador usando a opção criada para o boot.
Iniciando o instalador, ele mostrara um menu que contem opções de instalação. selecione HD. Ele vai perguntar qual disco e partição. Selecione segundo as suas configurações (identico ao grub). Em partição, caso tenha seguido o que disse acima, após selecionado o disco, coloque /mdv2009, ou o nome que você deu ao diretório que contem os arquivos.pressione enter e, caso esteja tudo certo, ele deverá abrir o instalador tradicional. Quando a numeração das partições está correta, o processo de configuração para a instalação a partir do disco rígido não leva mais que 10 minutos (salvo a espera pela cópia dos arquivos). Este mesmo período é ganho na instalação, bem mais rápida pelo disco ao inves do CD. Tome o cuidado de não deixar os arquivos do DVD na mesma partição do sistema, senõa o processo irá falhar. Dúvidas ou correções adicionem por favor por comentário.



ps: desculpem a ausencia de imagens... sem VM fica difícil.