Django Profile – Como usar

oraculum

Tagged:


Procurei um pouco esses dias sobre como utilizar o Profile no django, mas a documentação dele deixou muito a desejar, não temos ali exemplos de como incluir os dados do profile no banco, bem ao menos como recuperá-los. O único problema que vejo sobre os Profiles em django é que quando o usuário é criado o mesmo também não pode ser criado junto, os modelos não fazem parte um do outro. O que leva a nós desenvolvedores a criar manualmente esses profiles e se por algum motivo você esquecer podemos recuperar um erro no meio do programa.

Primeiramente vamos criar um modelo para o profile, veja abaixo como fiz a minha estrutura:

Código do Model:

1
2
3
4
5
6
7
8
9
10
11
12
#-*- coding: utf-8 -*-
from django.db import models
from django.contrib.auth.models import User
 
class UserProfile(models.Model):
    # This is the only required field
    user = models.ForeignKey(User, unique=True)
 
    # The rest is completely up to you...
    empresa = models.IntegerField()
    karma = models.IntegerField(default=1)
    url = models.URLField(default="")

Depois disso temos que configurar em nosso setings.py do projeto o seguinte atributo:

1
AUTH_PROFILE_MODULE = 'usuario.profile.UserProfile'

Obs: Não coloque o nome do projeto use apenas o nome da aplicação e o nome do Model no nosso caso o UserProfile

Instale também o aplicativo no Installed Apps: ‘galileu.usuario.profile’,

Veja o código para você criar o profile ao criar o usuário:
Você pode inserir o código abaixo na view que cria os usuários em seu projeto.

1
2
3
4
5
6
            new_user = UsuarioForm(request.POST)
            userinstancia = new_user.UsuarioAdd()
 
            #aqui nós criamos o profile, insira nos parâmetros abaixo os dados de acordo com a sua necessidade
            profile = UserProfile(user=userinstancia, empresa=instancia.id)
            profile.save()

Veja como pegar o Profile:

1
2
user = User.objects.get(pk = user_id)
profile = user.get_profile()
Share Button

2 Comments

  1. Valdinei dos Santos

    Gostei do seu tutorial e suas dicas, com uma ressalva. Não entendi essa parte do código
    “””
    # O que é UsuarioAdd()? O que ele faz?
    userinstancia = new_user.UsuarioAdd()

    #aqui nós criamos o profile, insira nos parâmetros abaixo os dados de acordo com a sua necessidade
    #UserProfile é sua classe de modelo com o atributo user, correto? o que vem a ser instancia.id?
    profile = UserProfile(user=userinstancia, empresa=instancia.id)
    #Porque você esta salvando se ainda não foi renderizado para o preenchimento?
    profile.save()

    Desculpe tantas perguntas é que estou fazendo um cadastro e preciso colocar mais dados e o google + a lista de django apontam para a documentação que para mim nao esta muito clara…
    Caso você responda por favor me mande um email notificando para que eu veja a resposta?

    Reply

    • oraculum

      @Valdinei dos Santos, Blz man nós estamos aqui para ajudar mesmo eu já passei por todas essas dores de cabeça que você está passando e elas não param aí django vale muito a pena aprender pois é uma linguagem maravilhosa.

      vamos a primeira dúvida:

      1 – UsuarioAdd() é um metodo do meu form Usuario que é onde faço a inserção do usuário “manualmente” ao invés de deixar a cargo do django eu não vou inserir todos os dados na minha classe usuario então eu manipulo no UsuarioAdd aquilo que me é conveniente, veja minha classe como é:

      #-*- coding: utf-8 -*-
      from django.contrib.auth.models import User
      from django import forms
      from django.forms.fields import *
      from django.forms.widgets import *
       
      class UsuarioForm(forms.Form):
          id = forms.CharField()
          username = forms.CharField()
          password1 = forms.CharField()
          email = forms.EmailField()
          first_name = forms.CharField()
       
          def UsuarioAdd(self):
              user = User.objects.create_user(username=self.data["username"], 
                              email=self.data["email"]
                              )
              id = user.id
              user.first_name = self.data["first_name"]
              user.is_active = True
              user.set_password(self.data["password1"])
              user.save()
       
              # retorna com o usuario recem criado
              return user

      2 – Ela é uma classe model e tem os atributos mostrados acima: user, empresa, karma e url e no caso do instancia.id é uma instancia de outra parte de código do galileu (projeto que estou desenvolvendo).

      Ela na verdade é uma instancia tipo a userinstancia que eu mostrei acima só que ele recebe o model Empresa daí eu pego o id da Empresa em que o usuário que está sendo inserido.

      Por exemplo caso queira preencher além da empresa o url eu faria assim

      profile = UserProfile(user=userinstancia, empresa=instancia.id, url=’http://www.oraculum.blog.br’)

      Depois apenas chamo o metodo Save da model UserProfile e o django se encarrega de inserir no banco :)

      Qualquer dúvida post aqui novamente.

      ps. Caso queira ter uma ideia de alguns códigos que eu já fiz baixe via svn o projeto galileu (http://sourceforge.net/projects/galileu/develop) ele é open source e livre.

      Reply

Leave a Reply