Menu
CoddyTech

Registrarse

Parte de la sección Usuarios y cuentas del Journey de Django de Coddy. Lección 4 de 16.

Solo ada puede iniciar sesión: un visitante no tiene forma de crear una cuenta. Django no tiene una página de registro, pero sí tiene el formulario para ello, UserCreationForm en django.contrib.auth.forms.

Es un ModelForm para User con tres campos: username, password1 y password2. Rechaza un nombre que ya está en uso, dos contraseñas que no coinciden y una contraseña que infringe las reglas de AUTH_PASSWORD_VALIDATORS (demasiado corta, demasiado común o compuesta solo por dígitos). Su save() almacena la contraseña cifrada, nunca en texto plano. Pruébalo en la pestaña Shell:

>>> from django.contrib.auth.forms import UserCreationForm
>>> form = UserCreationForm({"username": "kim", "password1": "tea-kettle-42", "password2": "tea-kettle-42"})
>>> form.is_valid()
True
>>> user = form.save()
>>> user.password == "tea-kettle-42"
False

En una vista funciona como NoteForm: una rama para el POST y otra para el formulario vacío.

challenge icon

Desafío

Fácil
  • Una página /signup/ llamada signup muestra un UserCreationForm. Su plantilla, notes/signup.html, está lista.
  • Un registro válido crea la cuenta y redirige a la página de inicio de sesión.
  • En el encabezado, junto a Log in, hay un enlace Sign up.

Pulsa Ejecutar, abre /signup/, crea una cuenta y después inicia sesión con ella.

Pruébalo tú mismo

from django.shortcuts import get_object_or_404, redirect, render

from .forms import NoteForm
from .models import Note


def note_list(request):
    notes = Note.objects.all()
    return render(request, "notes/note_list.html", {"notes": notes})


def note_detail(request, pk):
    note = get_object_or_404(Note, pk=pk)
    return render(request, "notes/note_detail.html", {"note": note})


def note_create(request):
    if request.method == "POST":
        form = NoteForm(request.POST)
        if form.is_valid():
            note = form.save()
            return redirect("notes:detail", pk=note.pk)
    else:
        form = NoteForm()
    return render(request, "notes/note_form.html", {"form": form})


def note_edit(request, pk):
    note = get_object_or_404(Note, pk=pk)
    if request.method == "POST":
        form = NoteForm(request.POST, instance=note)
        if form.is_valid():
            form.save()
            return redirect("notes:detail", pk=note.pk)
    else:
        form = NoteForm(instance=note)
    return render(request, "notes/note_form.html", {"form": form, "note": note})


def note_delete(request, pk):
    note = get_object_or_404(Note, pk=pk)
    if request.method == "POST":
        note.delete()
        return redirect("notes:list")
    return render(request, "notes/note_confirm_delete.html", {"note": note})

Todas las lecciones de Usuarios y cuentas

Practica por tu cuenta: Playground de Django