I am making a Django web app using 1.11.2 version in which admin is registering users using default django authentication views and customized html templates.I want that when admin clicks on 'Register' and submits the details (like username,email,password and confirmed password) an email is simultaneously sent to user's email-id in which there is a link to reset password so that user can reset his/her password.I don't want to explicitly use password_reset_view and password_reset_done view unless i am using forgot password option.
Here what i have coded.
views.py
from django.contrib.auth import get_user_model
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.models import Permission, User
from django.contrib.auth.views import RegisterView
class RegisterView(SuccessMessageMixin, CreateView):
form_class = RegisterForm
template_name = 'registration/register.html'
success_message = "Your account was created successfully."
def dispatch(self, *args, **kwargs):
return super(RegisterView, self).dispatch(*args, **kwargs)
register.html
{% extends "base.html" %}
{% block nav_people %}
class="active"
{% endblock %}
{% block content %}
{% load static %}
<!DOCTYPE html>
<html lang=en>
<head>
<link rel="stylesheet" href="{% static "dashboard/css/login.css" %}"/>
</head>
<body>
<title>Register</title>
<div class="reg">
<div class="regbox">
<h1>Register</h1>
<br>
<form class='text-left' method="post" action="{% url 'register' %}">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Register" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
</div>
</div>
</body>
</html>
{% endblock %}
forms.py
class RegisterForm(forms.ModelForm):
"""A form for creating new users. Includes all the required
fields, plus a repeated password."""
password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Password confirmation',
widget=forms.PasswordInput)
class Meta:
model = User
fields = ('username', 'email',)
def clean_email(self):
email = self.cleaned_data.get("email")
qs = User.objects.filter(email__iexact=email)
if qs.exists():
raise forms.ValidationError("Cannot use this email. It's already
registered")
return email
def clean_password2(self):
# Check that the two password entries match
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
raise forms.ValidationError("Passwords don't match")
return password2
def save(self, commit=True):
# Save the provided password in hashed format
user = super(RegisterForm, self).save(commit=False)
user.set_password(self.cleaned_data["password1"])
#user.password = "asdfasd"
user.is_active = True
if commit:
user.save()
# user.profile.send_activation_email()
# create a new user hash for activating email.
return user
login.html
{% load static %}
<!DOCTYPE html>
<html lang=en>
<head>
<title>Login</title>
<link rel="stylesheet" href="{% static "dashboard/css/login.css" %}"/>
</head>
<body>
<div class="login">
<div class="loginbox">
{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}
{% if next %}
{% if user.is_authenticated %}
<p> To proceed,
please login with an account that has access.</p>
{% else %}
{% if not form.errors %}
<p>Please login to see this page.</p>
{% endif %}
{% endif %}
{% endif %}
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<label>USER NAME </label>{{ form.username }}<br>
<label>PASSWORD </label>{{ form.password }}<br>
<input type="submit" value="Login" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
<a href='{% url "reset_password" %}' class="btn">Forgot Password</a>
</div>
</div>
</body>
</html>