Customizei meus códigos para os demostrados no curso do Gileno Alves Santa
Cruz Filho e ficou muito mais limpo e organizado a parte de customização da
minha model User. O que falta pra mim? Eu criei mais um atributo(campo) de
nome "Role" na minha models.py "Class User" e gostaria de gravar um ou mais
valores, via minha views.py. Para minha views.py eu passo um parâmetro de
nome "origin" que contém por vezes o valor 'Client' ou 'Provider' e é esta
informação que quero atribiu a 'role'. Não consigo!
E anexo os arquivos citados acima. Acredito que uma passada de olho na
views.py vocês vão poder me ajudar
*Marcos Alves*
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/CAMwkWTP96FRW-BBNtb3uL4j1wDgnCE3EvM6Nhcxhs1JHZnb2zQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
from django.test import TestCase
# Create your tests here.
from django.contrib import admin
from django.urls import path, include
from django.contrib.auth.views import LoginView,LogoutView
from . import views
app_name = 'qnow_user'
urlpatterns = [
#Trabalhando com a view de login do django
path('login_client/', LoginView.as_view(template_name='../templates/login.html',
extra_context={'next':'qnow_client:client',
'origin':'client',
'active_page_client_provider':'active'
}
), name="login_client"),
path('login_provider/', LoginView.as_view(template_name='../templates/login.html',
extra_context={'next':'qnow_provider:provider',
'origin':'provider',
'active_page_client_provider':'active'
}
), name="login_provider"),
path('logout/', LogoutView.as_view(template_name='../templates/index.html',
extra_context={'next_page':'qnow_site:site',
'active_page_site': 'active',
}),name='logout'),
path('register_client/', views.register, kwargs={'origin': 'client' }, name='register_client'),
path('register_provider/', views.register, kwargs={'origin': 'provider' }, name='register_provider'),
]
from django.contrib import admin
from qnow_user.models import User
admin.site.register(User)
from django.apps import AppConfig
class QnowUserConfig(AppConfig):
name = 'qnow_user'
from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm, PasswordChangeForm
from django.contrib.auth import authenticate, login
from django.contrib.auth.decorators import login_required
from django.conf import settings
from .forms import RegisterForm, EditAccountForm
def register(request, origin, *args, **kwargs):
template_name = '../templates/register.html'
if request.method == 'POST':
form = RegisterForm(request.POST)
if form.is_valid():
user = form.save()
user = authenticate(
username=user.username, password=form.cleaned_data['password1']
)
login(request, user)
return redirect('qnow_client:quotation_client')
else:
form = RegisterForm()
context = {
'active_page_client_provider':'active',
'origin': origin,
'form': form
}
return render(request, template_name, context)
import re
from django.db import models
#from django.contrib.localflavor.br.forms import BRStateSelect
from django.core import validators
from django.contrib.auth.models import (AbstractBaseUser, PermissionsMixin,
UserManager)
class User(AbstractBaseUser, PermissionsMixin):
username = models.CharField(
'Usuário', max_length=30, unique=True,
validators=[validators.RegexValidator(re.compile('^[\w.@+-]+$'),
'O nome de usuário só pode conter letras, digitos ou os '
'seguintes caracteres: @/./+/-/_', 'invalid')]
)
email = models.EmailField('E-mail', unique=True)
name = models.CharField('Nome de Contato', unique=True, max_length=100, blank=False)
is_active = models.BooleanField('Está ativo?', blank=True, default=True)
is_staff = models.BooleanField('É da equipe?', blank=True, default=False)
date_joined = models.DateTimeField('Data de Entrada', auto_now_add=True)
role = models.CharField('Role', max_length=10, blank=True, default='Indefinido')
phone = models.CharField('Telefone', max_length=50, blank=False)
city = models.CharField('Cidade', max_length=50, blank=False)
state = models.CharField('Estado', max_length=50, blank=False)
objects = UserManager()
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
def __str__(self):
return self.name or self.username
def get_short_name(self):
return self.username
def get_full_name(self):
return str(self)
class Meta:
verbose_name = 'Usuário'
verbose_name_plural = 'Usuários'from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import get_user_model
User = get_user_model()
class RegisterForm(forms.ModelForm):
password1 = forms.CharField(label='Senha', widget=forms.PasswordInput)
password2 = forms.CharField(
label='Confirmação de Senha', widget=forms.PasswordInput
)
def clean_password2(self):
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
raise forms.ValidationError('A confirmação não está correta')
return password2
def save(self, commit=True):
user = super(RegisterForm, self).save(commit=False)
user.set_password(self.cleaned_data['password1'])
if commit:
user.save()
return user
class Meta:
model = User
fields = ['username', 'email', 'name','phone','city','state']
class EditAccountForm(forms.ModelForm):
class Meta:
model = User
fields = ['username', 'email', 'name','phone','city','state']