App: accounts¶
Responsavel por autenticacao, User customizado, permissoes por role, perfil e compra de creditos.
Model: User¶
Estende AbstractUser. Campo email e o identificador unico (nao username).
class User(AbstractUser):
email = models.EmailField(unique=True)
role = models.CharField(choices=[('admin','Admin'),('student','Aluno')])
@property
def is_admin(self): return self.role == 'admin'
@property
def is_student(self): return self.role == 'student'
EmailBackend¶
Autentica por email em vez de username:
class EmailBackend(ModelBackend):
def authenticate(self, request, email=None, password=None, **kwargs):
user = User.objects.filter(email=email).first()
if user and user.check_password(password):
return user
URLs¶
| URL | View | Descricao |
|---|---|---|
/conta/registrar/ | RegisterView | Registro de novo usuario |
/conta/escola/registrar/ | SchoolRegisterView | Registro combinado admin + escola |
/conta/login/ | LoginView | Login por email |
/conta/logout/ | LogoutView | Logout |
/conta/perfil/ | StudentProfileView | Perfil do aluno com tempo economizado |
/conta/perfil/analytics/ | StudentProfileAnalyticsView | API JSON com tempo economizado por periodo |
/conta/minha-conta/ | AdminAccountView | Pagina "Minha Conta" do admin |
/conta/alterar-senha/ | ChangePasswordView | Alterar senha (aluno ou admin) |
/conta/recuperar-senha/ | PasswordResetView | Solicitar reset de senha por email |
/conta/recuperar-senha/enviado/ | PasswordResetDoneView | Confirmacao de envio do email |
/conta/recuperar-senha/<uidb64>/<token>/ | PasswordResetConfirmView | Definir nova senha |
/conta/recuperar-senha/concluido/ | PasswordResetCompleteView | Reset concluido |
/conta/creditos/ | PurchaseCreditsView | Compra de pacotes de creditos por agente |
/conta/dashboard/ | DashboardRedirectView | Redireciona por role |
Perfil do Aluno¶
A StudentProfileView exibe: - Formulario de edicao de dados pessoais - Tempo economizado com filtro de periodo (this_month, last_month, last_3_months) - Matriculas ativas
A StudentProfileAnalyticsView retorna JSON com time_saved_hours, total_messages e total_tokens para atualizacao via AJAX.
Compra de Creditos¶
A PurchaseCreditsView permite que o aluno compre pacotes avulsos de creditos vinculados a um agente especifico: 1. Exibe pacotes disponiveis e saldo atual por agente 2. O aluno seleciona pacote, escola e agente 3. MessagePurchase e criado com FK para o agente 4. extra_credits do StudentMessageCredit do agente e incrementado
Alteracao de Senha¶
A ChangePasswordView aceita POST com senha atual e nova senha. Atualiza a sessao para manter o usuario logado apos a troca.
Recuperacao de Senha¶
Fluxo padrao do Django com 4 views: 1. PasswordResetView -- formulario com email 2. PasswordResetDoneView -- confirmacao de envio 3. PasswordResetConfirmView -- definir nova senha via link 4. PasswordResetCompleteView -- conclusao