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 diferentes y una contraseña que infringe las reglas de AUTH_PASSWORD_VALIDATORS (demasiado corta, demasiado común, solo dígitos). Su save() almacena la contraseña cifrada mediante hash, nunca como texto sin formato. 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

Permite que los visitantes creen una cuenta.

  1. En notes/views.py, escribe una vista signup que muestre un UserCreationForm en notes/signup.html (ya preparado para ti). Cuando el formulario sea válido, guárdalo y redirige a login.
  2. En notes/urls.py, agrega signup/ con el nombre signup.
  3. En base.html, junto a Log in, enlaza Sign up con {% url 'notes:signup' %}.

Crea una cuenta en /signup/ y luego 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