Hi, my problem insert captcha in login, register, password-reset , impossible implemented.
My code:
urls.py:
from django.contrib.auth.views import *
from django.urls import path
from .views import *
urlpatterns = [
path('register/', SignupPageView.as_view(), name ='register'),
path('login/', LoginView.as_view(), name='login'),
path('logout/', LogoutView.as_view(), name='logout'),
path('change-password/', PasswordChangeView.as_view(), name='change-password'),
path('password_change_done/', PasswordChangeDoneView.as_view(), name='password_change_done'),
path('password-reset/', PasswordResetView.as_view( ), name='password_reset'),
path('password-reset/done/', PasswordResetDoneView.as_view( ), name='password_reset_done'),
path('password-reset-confirm/<uidb64>/<token>/', PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
path('password-reset-complete/', PasswordResetCompleteView.as_view( ), name='password_reset_complete'),
path('profile/', ProfiloUtente.as_view(), name='profile'),
]
models.py
from django.db import models
from django.utils.translation import gettext as _
from core.utils import *
from django.contrib.auth.models import AbstractUser, PermissionsMixin
from .managers import CustomUserManager
from django.utils import timezone
from stdimage import StdImageField
GENDER_CHOICES = (
(0,"Uomo"),
(1,"Donna")
)
from precise_bbcode.fields import BBCodeTextField
class CustomUser(AbstractUser, PermissionsMixin):
objects = CustomUserManager()
id = models.AutoField(primary_key=True)
last_name = models.CharField(_('Last name'), null=True, blank=True, max_length=255)
first_name = models.CharField(_('First name'), null=True, blank=True, max_length=255, )
country = models.CharField(_('Country'), null=True, blank=True, max_length=255)
location = models.CharField(_('Location'), null=True, blank=True, max_length=255)
home_address = models.CharField(_('Home address'), null=True, blank=True, max_length=255)
Postal_code = models.CharField(_('Postal code'), null=True, blank=True, max_length=255)
city = models.CharField(_('City'), null=True, blank=True, max_length=255)
username = models.CharField(_('Username'), unique=True, null=True, blank=True, max_length=255, error_messages={'unique':"Nome utente già in uso."} )
email = models.EmailField(_('Email'), unique=True, error_messages={'unique':"Email già in uso."})
sex = models.IntegerField(choices=GENDER_CHOICES, default=0, verbose_name=_('Sex'))
birth_date=models.DateField(null=True, blank=True, verbose_name=_('birth date'))
information = BBCodeTextField(_("Information"), blank=True, null=True)
image = StdImageField(upload_to=PathRename('profile'), render_variations= resize_and_autorotate, blank=True , variations={
'avatar': (120, 120, True),
}, delete_orphans=True, verbose_name=_('Photo'))
is_superuser = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(default=timezone.now)
USERNAME_FIELD = 'username'
EMAIL_FIELD = 'email'
REQUIRED_FIELDS = ['email']
def __str__(self):
return f'{self.username}'.lower()
# Override the save method of the model
def save(self, *args, **kwargs):
self.username = self.username.lower()
super(CustomUser, self).save(*args, **kwargs)
forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.utils.translation import gettext as _
from django.forms.widgets import DateInput
from .models import CustomUser
from django.forms.widgets import NumberInput
from django.conf import settings
class UserRegisterForm(UserCreationForm):
def __init__(self, *args, **kwargs):
super(UserRegisterForm, self).__init__(*args, **kwargs)
self.fields['username'].required = True
self.fields['email'].required = True
self.fields['information'].required = False
self.fields['sex'].required = False
self.fields['birth_date'].required = False
class Meta:
model = CustomUser
fields = ['username', 'email', 'password1', 'password2', 'first_name','last_name','information', 'image', 'sex' , 'birth_date']
username = forms.CharField(required=True, max_length=100, label=_('Username'))
first_name = forms.CharField(required=True, label=_("First name"),)
last_name = forms.CharField(required=True, label=_("Last name"),)
email = forms.EmailField(required=True, max_length=100)
sex = forms.ChoiceField(required=True, label=_("Sex"),)
information = forms.Textarea(attrs={'rows': 30, 'cols': 10})
birth_date = forms.DateField(widget=NumberInput(attrs={'type': 'date'}))
widgets = {
'sex' : forms.RadioSelect(attrs={'class': 'list-unstyled'}),
'information' : forms.Textarea(),
'birth_date': DateInput(format=('%Y-%m-%d'), attrs={'type': 'date'})
}
class ProfileUpdateForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ProfileUpdateForm, self).__init__(*args, **kwargs)
self.fields['information'].required = False
self.fields['image'].required = False
self.fields['sex'].required = False
self.fields['birth_date'].required = False
class Meta:
model = CustomUser
first_name = forms.CharField(required=True, label=_("First name"),)
last_name = forms.CharField(required=True, label=_("Last name"),)
email = forms.EmailField(required=True, max_length=100)
sex = forms.ChoiceField(required=True, label=_("Sex"),)
information = forms.Textarea(attrs={'rows': 30, 'cols': 10})
birth_date = forms.DateField(input_formats=settings.DATE_INPUT_FORMATS)
fields = ['first_name', 'last_name', 'email','image', 'sex', 'information', 'birth_date']
widgets = {
'sex' : forms.RadioSelect(attrs={'class': 'list-unstyled'}),
'information' : forms.Textarea(),
'birth_date': DateInput(format=('%Y-%m-%d'), attrs={'type': 'date'})
}
class ProfileUpdateFormAdmin(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ProfileUpdateFormAdmin, self).__init__(*args, **kwargs)
self.fields['information'].required = False
self.fields['image'].required = False
self.fields['sex'].required = False
self.fields['birth_date'].required = False
class Meta:
model = CustomUser
first_name = forms.CharField(required=True, label=_("First name"),)
last_name = forms.CharField(required=True, label=_("Last name"),)
email = forms.EmailField(required=True, max_length=100)
sex = forms.ChoiceField(required=True, label=_("Sex"),)
information = forms.Textarea(attrs={'rows': 30, 'cols': 10})
birth_date = forms.DateField(widget=NumberInput(attrs={'type': 'date'}))
fields = ['first_name', 'last_name', 'email','image', 'sex', 'information', 'is_staff', 'is_superuser', 'birth_date']
widgets = {
'sex' : forms.RadioSelect(attrs={'class': 'list-unstyled'}),
'information' : forms.Textarea(),
'birth_date': DateInput(format=('%Y-%m-%d'), attrs={'type': 'date'})
}
my use module:
use module from contact form no problem.
How to implemented login, register, password-reset ?
Thanks.