-
Notifications
You must be signed in to change notification settings - Fork 1
App Users
Angel riera edited this page Apr 1, 2022
·
3 revisions
models.py
from django.contrib.auth.models import AbstractUser, BaseUserManager
from django.db import models
from django.utils.translation import gettext_lazy as _
# administra al customuser
class CustomUserManager(BaseUserManager):
"""Define a model manager for User model with no username field."""
def _create_user(self, email, password=None, **extra_fields):
"""Create and save a User with the given email and password."""
if not email:
raise ValueError("The given email must be set")
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, password=None, **extra_fields):
extra_fields.setdefault("is_staff", False)
extra_fields.setdefault("is_superuser", False)
return self._create_user(email, password, **extra_fields)
def create_superuser(self, email, password=None, **extra_fields):
"""Create and save a SuperUser with the given email and password."""
extra_fields.setdefault("is_staff", True)
extra_fields.setdefault("is_superuser", True)
if extra_fields.get("is_staff") is not True:
raise ValueError("Superuser must have is_staff=True.")
if extra_fields.get("is_superuser") is not True:
raise ValueError("Superuser must have is_superuser=True.")
return self._create_user(email, password, **extra_fields)
# user general que se autenticará con email
class CustomUser(AbstractUser):
username = None
email = models.EmailField(_("email address"), unique=True)
USERNAME_FIELD = "email"
REQUIRED_FIELDS = []
# necesita de un manager que lo administre para crearlo con ciertos campos
objects = CustomUserManager()forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from .models import CustomUser, Seller
class UserForm(UserCreationForm):
class Meta:
model = CustomUser
fields = ("first_name", "last_name", "email", "password1", "password2")
class UserEditForm(forms.ModelForm):
class Meta:
model = CustomUser
fields = ("first_name", "last_name", "email")decorators.py
from django.shortcuts import redirect
def unauthenticated_user(view_func):
def wrapper_func(request, *args, **kwargs):
if request.user.is_authenticated:
return redirect("ecommerce:home")
else:
return view_func(request, *args, **kwargs)
return wrapper_func
# Todas las importaciones
from django.contrib import messages
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect, render
from ecommerce.decorators import unauthenticated_user
from ecommerce.models import Product
from users.models import Seller
from .forms import SellerForm, UserEditForm, UserForm@unauthenticated_user
def register_view(request):
form = UserForm
if request.method == "POST":
form = UserForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user)
useremail = form.cleaned_data.get("email")
messages.success(request, f"{useremail} was succesfully created")
return redirect("users:login")
return render(request, "users/register.html", {"user_registration": form})@unauthenticated_user
def login_view(request):
if request.method == "POST":
email = request.POST.get("email")
password = request.POST.get("password")
user = authenticate(request, email=email, password=password)
if user is not None:
login(request, user)
return redirect("ecommerce:home")
else:
messages.info(request, "Email or password is incorrect.")
return render(request, "users/login.html")def logout_view(request): logout(request) return redirect("users:login")
footer
siderbar