Я создаю веб-приложение Django, использующее версию 1.11.2, в которой администратор регистрирует пользователей с использованием представлений аутентификации django по умолчанию и настроенных HTML-шаблонов. , пароль и подтвержденный пароль) одновременно на адрес электронной почты пользователя отправляется электронное письмо, в котором есть ссылка для сброса пароля, чтобы пользователь мог сбросить свой пароль. Я не хочу явно использовать представление password_reset_view и password_reset_done, если я не являюсь пользователем используя опцию забытого пароля.
Вот что я кодировал.
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>