Commit 25d9dbe9 authored by ibuler's avatar ibuler

Merge with cmdb

parents 02b5483d 3c6f50b7
...@@ -16,7 +16,7 @@ class AssetForm(forms.ModelForm): ...@@ -16,7 +16,7 @@ class AssetForm(forms.ModelForm):
] ]
widgets = { widgets = {
'groups': forms.SelectMultiple(attrs={'class': 'select2', 'data-placeholder': _('Join assetgroups')}), 'groups': forms.SelectMultiple(attrs={'class': 'select2', 'data-placeholder': _('Select asset groups')}),
} }
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
<td class="text-center">{{ asset_group.assets.count }}</td> <td class="text-center">{{ asset_group.assets.count }}</td>
<td class="text-center">{{ asset_group.comment }}</td> <td class="text-center">{{ asset_group.comment }}</td>
<td class="text-center"> <td class="text-center">
<a href="{% url 'assets:asset-group-update' pk=asset_group.id %}" class="btn btn-xs btn-info">{% trans 'Edit' %}</a> <a href="{% url 'assets:asset-group-update' pk=asset_group.id %}" class="btn btn-xs btn-info">{% trans 'Update' %}</a>
<a href="{% url 'assets:asset-group-delete' pk=asset_group.id %}" class="btn btn-xs btn-danger del">{% trans 'Delete' %}</a> <a href="{% url 'assets:asset-group-delete' pk=asset_group.id %}" class="btn btn-xs btn-danger del">{% trans 'Delete' %}</a>
</td> </td>
</tr> </tr>
......
This diff is collapsed.
...@@ -19,9 +19,15 @@ ...@@ -19,9 +19,15 @@
</a> </a>
</li> </li>
<li> <li>
{% if user.is_authenticated %}
<a href="{% url 'users:logout' %}"> <a href="{% url 'users:logout' %}">
<i class="fa fa-sign-out"></i> Log out <i class="fa fa-sign-out"></i>{% trans 'Logout' %}
</a> </a>
{% else %}
<a href="{% url 'users:login' %}">
<i class="fa fa-sign-in"></i>{% trans 'Login' %}
</a>
{% endif %}
</li> </li>
</ul> </ul>
</nav> </nav>
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
<a data-toggle="dropdown" class="dropdown-toggle" href="#"> <a data-toggle="dropdown" class="dropdown-toggle" href="#">
<span class="clear"> <span class="clear">
<span class="block m-t-xs"> <span class="block m-t-xs">
<strong class="font-bold"> {{ request.user.name }}<span style="color: #8095a8"></span></strong> <strong class="font-bold"> {{ user.name }}<span style="color: #8095a8"></span></strong>
</span> </span>
<span class="text-muted text-xs block"> <span class="text-muted text-xs block">
{{ request.user.get_role_display | default:_('User') }}<b class="caret"></b> {{ request.user.get_role_display | default:_('User') }}<b class="caret"></b>
......
# ~*~ coding: utf-8 ~*~ # ~*~ coding: utf-8 ~*~
from django.forms import ModelForm
from django import forms from django import forms
from captcha.fields import CaptchaField from django.contrib.auth.forms import AuthenticationForm
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from captcha.fields import CaptchaField
from .models import User, UserGroup from .models import User, UserGroup
class UserLoginForm(forms.Form): class UserLoginForm(AuthenticationForm):
username = forms.CharField(label=_('Username'), max_length=100) username = forms.CharField(label=_('Username'), max_length=100)
password = forms.CharField(label=_('Password'), widget=forms.PasswordInput, max_length=100) password = forms.CharField(
label=_('Password'), widget=forms.PasswordInput, max_length=100,
strip=False)
captcha = CaptchaField() captcha = CaptchaField()
class UserCreateForm(ModelForm): class UserCreateForm(forms.ModelForm):
class Meta: class Meta:
model = User model = User
fields = [ fields = [
...@@ -32,7 +35,8 @@ class UserCreateForm(ModelForm): ...@@ -32,7 +35,8 @@ class UserCreateForm(ModelForm):
} }
class UserUpdateForm(ModelForm): class UserUpdateForm(forms.ModelForm):
class Meta: class Meta:
model = User model = User
fields = [ fields = [
...@@ -47,11 +51,12 @@ class UserUpdateForm(ModelForm): ...@@ -47,11 +51,12 @@ class UserUpdateForm(ModelForm):
} }
widgets = { widgets = {
'groups': forms.SelectMultiple(attrs={'class': 'select2', 'data-placeholder': _('Join usergroups')}), 'groups': forms.SelectMultiple(attrs={'class': 'select2', 'data-placeholder': _('Join user groups')}),
} }
class UserGroupForm(ModelForm): class UserGroupForm(forms.ModelForm):
class Meta: class Meta:
model = UserGroup model = UserGroup
......
...@@ -106,7 +106,7 @@ class User(AbstractUser): ...@@ -106,7 +106,7 @@ class User(AbstractUser):
username = models.CharField(max_length=20, unique=True, verbose_name=_('Username')) username = models.CharField(max_length=20, unique=True, verbose_name=_('Username'))
name = models.CharField(max_length=20, blank=True, verbose_name=_('Name')) name = models.CharField(max_length=20, blank=True, verbose_name=_('Name'))
email = models.EmailField(max_length=30, unique=True, verbose_name=_('Email')) email = models.EmailField(max_length=30, unique=True, verbose_name=_('Email'))
groups = models.ManyToManyField(UserGroup, related_name='users', blank=True, verbose_name=_('Usergroup')) groups = models.ManyToManyField(UserGroup, related_name='users', blank=True, verbose_name=_('User group'))
role = models.CharField(choices=ROLE_CHOICES, default='User', max_length=10, blank=True, verbose_name=_('Role')) role = models.CharField(choices=ROLE_CHOICES, default='User', max_length=10, blank=True, verbose_name=_('Role'))
avatar = models.ImageField(upload_to="avatar", verbose_name=_('Avatar')) avatar = models.ImageField(upload_to="avatar", verbose_name=_('Avatar'))
wechat = models.CharField(max_length=30, blank=True, verbose_name=_('Wechat')) wechat = models.CharField(max_length=30, blank=True, verbose_name=_('Wechat'))
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
<div class="col-sm-12"> <div class="col-sm-12">
<div class="ibox float-e-margins"> <div class="ibox float-e-margins">
<div class="ibox-title"> <div class="ibox-title">
<h5>{% trans 'Create user' %}</h5> <h5>{% block user_template_title %}{% trans 'Create user' %}{% endblock %}</h5>
<div class="ibox-tools"> <div class="ibox-tools">
<a class="collapse-link"> <a class="collapse-link">
<i class="fa fa-chevron-up"></i> <i class="fa fa-chevron-up"></i>
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
<div class="ibox-content"> <div class="ibox-content">
<img src="{% static 'img/logo.png' %}" style="margin: auto" width="82" height="82"> <img src="{% static 'img/logo.png' %}" style="margin: auto" width="82" height="82">
<h2 class="font-bold" style="display: inline">{% trans 'Forget password' %} ?</h2> <h2 class="font-bold" style="display: inline">{% trans 'Forgot password' %} ?</h2>
<h1></h1> <h1></h1>
{% if errors %} {% if errors %}
......
...@@ -45,11 +45,10 @@ ...@@ -45,11 +45,10 @@
{% if form.errors %} {% if form.errors %}
{% if 'captcha' in form.errors %} {% if 'captcha' in form.errors %}
<p class="red-fonts">{% trans 'Captcha invalid' %}</p> <p class="red-fonts">{% trans 'Captcha invalid' %}</p>
{% else %}
<p class="red-fonts">{{ form.non_field_errors.as_text }}</p>
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if errors %}
<p class="red-fonts">{{ errors }}</p>
{% endif %}
<div class="form-group"> <div class="form-group">
<input type="text" class="form-control" name="{{ form.username.html_name }}" placeholder="{% trans 'Username' %}" required=""> <input type="text" class="form-control" name="{{ form.username.html_name }}" placeholder="{% trans 'Username' %}" required="">
</div> </div>
...@@ -61,8 +60,8 @@ ...@@ -61,8 +60,8 @@
</div> </div>
<button type="submit" class="btn btn-primary block full-width m-b">{% trans 'Login' %}</button> <button type="submit" class="btn btn-primary block full-width m-b">{% trans 'Login' %}</button>
<a href="{% url 'users:forget-password' %}"> <a href="{% url 'users:forgot-password' %}">
<small>Forgot password?</small> <small>{% trans 'Forgot password' %}?</small>
</a> </a>
<p class="text-muted text-center"> <p class="text-muted text-center">
...@@ -84,7 +83,4 @@ ...@@ -84,7 +83,4 @@
</div> </div>
</div> </div>
</body> </body>
</html> </html>
...@@ -178,7 +178,7 @@ ...@@ -178,7 +178,7 @@
<div class="panel panel-info"> <div class="panel panel-info">
<div class="panel-heading"> <div class="panel-heading">
<i class="fa fa-info-circle"></i> {% trans 'Usergroup' %} <i class="fa fa-info-circle"></i> {% trans 'User group' %}
</div> </div>
<div class="panel-body"> <div class="panel-body">
<table class="table"> <table class="table">
...@@ -186,7 +186,7 @@ ...@@ -186,7 +186,7 @@
<form> <form>
<tr> <tr>
<td colspan="2" class="no-borders"> <td colspan="2" class="no-borders">
<select data-placeholder="{% trans 'Select usergroups' %}" class="select2" style="width: 100%" multiple="" tabindex="4"> <select data-placeholder="{% trans 'Join user groups' %}" class="select2" style="width: 100%" multiple="" tabindex="4">
{% for group in groups %} {% for group in groups %}
<option value="{{ group.id }}">{{ group.name }}</option> <option value="{{ group.id }}">{{ group.name }}</option>
{% endfor %} {% endfor %}
...@@ -195,7 +195,7 @@ ...@@ -195,7 +195,7 @@
</tr> </tr>
<tr> <tr>
<td colspan="2" class="no-borders"> <td colspan="2" class="no-borders">
<button type="button" class="btn btn-info btn-small">{% trans 'Add' %}</button> <button type="button" class="btn btn-info btn-small">{% trans 'Join' %}</button>
</td> </td>
</tr> </tr>
</form> </form>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<th class="text-center"><a href="{% url 'users:user-list' %}?sort=name">{% trans 'Name' %}</a></th> <th class="text-center"><a href="{% url 'users:user-list' %}?sort=name">{% trans 'Name' %}</a></th>
<th class="text-center"><a href="{% url 'users:user-list' %}?sort=username">{% trans 'Username' %}</a></th> <th class="text-center"><a href="{% url 'users:user-list' %}?sort=username">{% trans 'Username' %}</a></th>
<th class="text-center">{% trans 'Role' %}</th> <th class="text-center">{% trans 'Role' %}</th>
<th class="text-center">{% trans 'Usergroup' %}</th> <th class="text-center">{% trans 'User group' %}</th>
<th class="text-center">{% trans 'Asset num' %}</th> <th class="text-center">{% trans 'Asset num' %}</th>
<th class="text-center"><a href="{% url 'users:user-list' %}?sort=date_expired">{% trans 'Active' %}</a></th> <th class="text-center"><a href="{% url 'users:user-list' %}?sort=date_expired">{% trans 'Active' %}</a></th>
<th class="text-center"></th> <th class="text-center"></th>
...@@ -34,14 +34,14 @@ ...@@ -34,14 +34,14 @@
<td class="text-center" title="{% for user_group in user.group.all %} {{ user_group.name }} {% endfor %}"> {{ user.groups.all|join_queryset_attr:"name" }} </td> <td class="text-center" title="{% for user_group in user.group.all %} {{ user_group.name }} {% endfor %}"> {{ user.groups.all|join_queryset_attr:"name" }} </td>
<th class="text-center">{{ user.name }}</th> <th class="text-center">{{ user.name }}</th>
<td class="text-center"> <td class="text-center">
{% if user.is_expired %} {% if user.is_expired and user.is_active %}
<i class="fa fa-times text-danger"></i> <i class="fa fa-times text-danger"></i>
{% else %} {% else %}
<i class="fa fa-check text-navy"></i> <i class="fa fa-check text-navy"></i>
{% endif %} {% endif %}
</td> </td>
<td class="text-center"> <td class="text-center">
<a href="{% url 'users:user-update' pk=user.id %}" class="btn btn-xs btn-info">{% trans 'Edit' %}</a> <a href="{% url 'users:user-update' pk=user.id %}" class="btn btn-xs btn-info">{% trans 'Update' %}</a>
<a href="{% url 'users:user-delete' pk=user.id %}" class="btn btn-xs btn-danger del {% if user.id == request.user.id or user.username == 'admin' %} disabled {% endif %}">{% trans 'Delete' %}</a> <a href="{% url 'users:user-delete' pk=user.id %}" class="btn btn-xs btn-danger del {% if user.id == request.user.id or user.username == 'admin' %} disabled {% endif %}">{% trans 'Delete' %}</a>
</td> </td>
</tr> </tr>
......
{% extends 'users/_user.html' %} {% extends 'users/_user.html' %}
{% load i18n %} {% load i18n %}
{% block user_template_title %}{% trans "Update user" %}{% endblock %}
{% block username %} {% block username %}
<div class="form-group"> <div class="form-group">
<label for="{{ form.username.id_for_label }}" class="col-sm-2 control-label">{% trans 'Username' %}</label> <label for="{{ form.username.id_for_label }}" class="col-sm-2 control-label">{% trans 'Username' %}</label>
......
from django.conf.urls import url, include from django.conf.urls import url
from django.contrib.auth import views as auth_views from django.contrib.auth import views as auth_views
from django.urls import reverse_lazy from django.utils.translation import ugettext as _
import views import views
import api import api
from .forms import UserLoginForm
app_name = 'users' app_name = 'users'
urlpatterns = [ urlpatterns = [
url(r'^login$', views.UserLoginView.as_view(), name='login'), url(r'^login$',
url(r'^logout$', views.UserLogoutView.as_view(), name='logout'), auth_views.login,
url(r'^password/forget$', views.UserForgetPasswordView.as_view(), name='forget-password'), {'template_name': "users/login.html",
url(r'^password/forget/sendmail-success$', 'authentication_form': UserLoginForm,
views.UserForgetPasswordSendmailSuccessView.as_view(), name='forget-password-sendmail-success'), 'redirect_authenticated_user': True},
name='login'),
url(r'^logout$',
auth_views.logout,
{
"template_name": "common/flash_message_standalone.html",
"extra_context": {
'title': _('Logout success'),
'messages': _('Logout success, return login page'),
'redirect_url': '/users/login',
'auto_redirect': True,
}
},
name='logout'),
url(r'^password/forgot$', views.UserForgotPasswordView.as_view(), name='forgot-password'),
url(r'^password/forgot/sendmail-success$',
views.UserForgotPasswordSendmailSuccessView.as_view(), name='forgot-password-sendmail-success'),
url(r'^password/reset$', views.UserResetPasswordView.as_view(), name='reset-password'), url(r'^password/reset$', views.UserResetPasswordView.as_view(), name='reset-password'),
url(r'^password/reset/success$', views.UserResetPasswordSuccessView.as_view(), name='reset-password-success'), url(r'^password/reset/success$', views.UserResetPasswordSuccessView.as_view(),
name='reset-password-success'),
url(r'^user$', views.UserListView.as_view(), name='user-list'), url(r'^user$', views.UserListView.as_view(), name='user-list'),
url(r'^user/(?P<pk>[0-9]+)$', views.UserDetailView.as_view(), name='user-detail'), url(r'^user/(?P<pk>[0-9]+)$', views.UserDetailView.as_view(), name='user-detail'),
url(r'^user/create$', views.UserCreateView.as_view(), name='user-create'), url(r'^user/create$', views.UserCreateView.as_view(), name='user-create'),
...@@ -30,8 +48,10 @@ urlpatterns = [ ...@@ -30,8 +48,10 @@ urlpatterns = [
urlpatterns += [ urlpatterns += [
url(r'^v1/users$', api.UserListAddApi.as_view(), name='user-list-api'), url(r'^v1/users$', api.UserListAddApi.as_view(), name='user-list-api'),
url(r'^v1/users/(?P<pk>[0-9]+)$', api.UserDetailDeleteUpdateApi.as_view(), name='user-detail-api'), url(r'^v1/users/(?P<pk>[0-9]+)$',
api.UserDetailDeleteUpdateApi.as_view(), name='user-detail-api'),
url(r'^v1/users/(?P<pk>[0-9]+)/active$', api.UserActiveApi.as_view(), name='user-active-api'), url(r'^v1/users/(?P<pk>[0-9]+)/active$', api.UserActiveApi.as_view(), name='user-active-api'),
url(r'^v1/usergroups$', api.UserGroupListAddApi.as_view(), name='user-group-list-api'), url(r'^v1/user-groups$', api.UserGroupListAddApi.as_view(), name='user-group-list-api'),
url(r'^v1/usergroups/(?P<pk>[0-9]+)$', api.UserGroupDetailDeleteUpdateApi.as_view(), name='user-group-detail-api'), url(r'^v1/user-groups/(?P<pk>[0-9]+)$',
api.UserGroupDetailDeleteUpdateApi.as_view(), name='user-group-detail-api'),
] ]
...@@ -86,7 +86,7 @@ def user_add_success_next(user): ...@@ -86,7 +86,7 @@ def user_add_success_next(user):
'name': user.name, 'name': user.name,
'rest_password_url': reverse('users:reset-password', external=True), 'rest_password_url': reverse('users:reset-password', external=True),
'rest_password_token': user.generate_reset_token(), 'rest_password_token': user.generate_reset_token(),
'forget_password_url': reverse('users:forget-password', external=True), 'forget_password_url': reverse('users:forgot-password', external=True),
'email': user.email, 'email': user.email,
'login_url': reverse('users:login', external=True), 'login_url': reverse('users:login', external=True),
} }
...@@ -117,7 +117,7 @@ def send_reset_password_mail(user): ...@@ -117,7 +117,7 @@ def send_reset_password_mail(user):
'name': user.name, 'name': user.name,
'rest_password_url': reverse('users:reset-password', external=True), 'rest_password_url': reverse('users:reset-password', external=True),
'rest_password_token': user.generate_reset_token(), 'rest_password_token': user.generate_reset_token(),
'forget_password_url': reverse('users:forget-password', external=True), 'forget_password_url': reverse('users:forgot-password', external=True),
'email': user.email, 'email': user.email,
'login_url': reverse('users:login', external=True), 'login_url': reverse('users:login', external=True),
} }
......
...@@ -4,78 +4,28 @@ from __future__ import unicode_literals ...@@ -4,78 +4,28 @@ from __future__ import unicode_literals
import logging import logging
from django.shortcuts import get_object_or_404, reverse, render, Http404, redirect from django.conf import settings
from django.contrib.messages.views import SuccessMessageMixin
from django.db.models import Q
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, reverse
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.db.models import Q from django.views.generic.base import TemplateView
from django.views.generic.base import View, TemplateView
from django.views.generic.list import ListView from django.views.generic.list import ListView
from django.views.generic.edit import CreateView, DeleteView, UpdateView, ProcessFormView, FormView from django.views.generic.edit import CreateView, DeleteView, UpdateView
from django.views.generic.detail import DetailView from django.views.generic.detail import DetailView
from django.contrib.messages.views import SuccessMessageMixin
from django.conf import settings
from django.http import HttpResponseRedirect
from django.contrib.auth import views as auth_view, authenticate, login, logout
from common.utils import get_object_or_none from common.utils import get_object_or_none
from .models import User, UserGroup from .models import User, UserGroup
from .forms import UserCreateForm, UserUpdateForm, UserGroupForm, UserLoginForm from .forms import UserCreateForm, UserUpdateForm, UserGroupForm, UserLoginForm
from .utils import AdminUserRequiredMixin, ssh_key_gen, user_add_success_next, send_reset_password_mail from .utils import AdminUserRequiredMixin, user_add_success_next, send_reset_password_mail
logger = logging.getLogger('jumpserver.users.views') logger = logging.getLogger('jumpserver.users.views')
class UserLoginView(FormView):
template_name = 'users/login.html'
form_class = UserLoginForm
redirect_field_name = 'next'
def get(self, request, *args, **kwargs):
if self.request.user.is_staff:
return redirect(request.POST.get(self.redirect_field_name, reverse('index')))
# Todo: Django have bug, lose context issue: https://github.com/django/django/pull/7202
# so we jump it and use origin method render_to_response
# return super(UserLoginView, self).get(request, *args, **kwargs)
return self.render_to_response(self.get_context_data(**kwargs))
def post(self, request, *args, **kwargs):
form = self.get_form()
if not form.is_valid():
return self.form_invalid(form)
username = form['username'].value()
password = form['password'].value()
user = authenticate(username=username, password=password)
if user is None:
kwargs.update({'errors': _('Username or password invalid')})
return self.get(request, *args, **kwargs)
login(request, user)
return redirect(request.GET.get(self.redirect_field_name, reverse('index')))
class UserLogoutView(TemplateView):
template_name = 'common/flash_message_standalone.html'
def get(self, request, *args, **kwargs):
logout(request)
return super(UserLogoutView, self).get(request)
def get_context_data(self, **kwargs):
context = {
'title': _('Logout success'),
'messages': _('Logout success, return login page'),
'redirect_url': reverse('users:login'),
'auto_redirect': True,
}
kwargs.update(context)
return super(UserLogoutView, self).get_context_data(**kwargs)
class UserListView(AdminUserRequiredMixin, ListView): class UserListView(AdminUserRequiredMixin, ListView):
model = User model = User
paginate_by = settings.CONFIG.DISPLAY_PER_PAGE paginate_by = settings.CONFIG.DISPLAY_PER_PAGE
...@@ -106,7 +56,7 @@ class UserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView): ...@@ -106,7 +56,7 @@ class UserCreateView(AdminUserRequiredMixin, SuccessMessageMixin, CreateView):
form_class = UserCreateForm form_class = UserCreateForm
template_name = 'users/user_create.html' template_name = 'users/user_create.html'
success_url = reverse_lazy('users:user-list') success_url = reverse_lazy('users:user-list')
success_message = _('Create user<a href="%s">%s</a> success.') success_message = _('Create user <a href="%s">%s</a> success.')
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(UserCreateView, self).get_context_data(**kwargs) context = super(UserCreateView, self).get_context_data(**kwargs)
...@@ -150,7 +100,7 @@ class UserUpdateView(AdminUserRequiredMixin, UpdateView): ...@@ -150,7 +100,7 @@ class UserUpdateView(AdminUserRequiredMixin, UpdateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(UserUpdateView, self).get_context_data(**kwargs) context = super(UserUpdateView, self).get_context_data(**kwargs)
context.update({'app': _('Users'), 'action': _('Edit user')}) context.update({'app': _('Users'), 'action': _('Update user')})
return context return context
...@@ -192,7 +142,7 @@ class UserGroupListView(AdminUserRequiredMixin, ListView): ...@@ -192,7 +142,7 @@ class UserGroupListView(AdminUserRequiredMixin, ListView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(UserGroupListView, self).get_context_data(**kwargs) context = super(UserGroupListView, self).get_context_data(**kwargs)
context.update({'app': _('Users'), 'action': _('Usergroup list'), 'keyword': self.keyword}) context.update({'app': _('Users'), 'action': _('User group list'), 'keyword': self.keyword})
return context return context
...@@ -230,8 +180,8 @@ class UserGroupDeleteView(DeleteView): ...@@ -230,8 +180,8 @@ class UserGroupDeleteView(DeleteView):
pass pass
class UserForgetPasswordView(TemplateView): class UserForgotPasswordView(TemplateView):
template_name = 'users/forget_password.html' template_name = 'users/forgot_password.html'
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
email = request.POST.get('email') email = request.POST.get('email')
...@@ -240,10 +190,10 @@ class UserForgetPasswordView(TemplateView): ...@@ -240,10 +190,10 @@ class UserForgetPasswordView(TemplateView):
return self.get(request, errors=_('Email address invalid, input again')) return self.get(request, errors=_('Email address invalid, input again'))
else: else:
send_reset_password_mail(user) send_reset_password_mail(user)
return HttpResponseRedirect(reverse('users:forget-password-sendmail-success')) return HttpResponseRedirect(reverse('users:forgot-password-sendmail-success'))
class UserForgetPasswordSendmailSuccessView(TemplateView): class UserForgotPasswordSendmailSuccessView(TemplateView):
template_name = 'common/flash_message_standalone.html' template_name = 'common/flash_message_standalone.html'
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
...@@ -253,7 +203,7 @@ class UserForgetPasswordSendmailSuccessView(TemplateView): ...@@ -253,7 +203,7 @@ class UserForgetPasswordSendmailSuccessView(TemplateView):
'redirect_url': reverse('users:login'), 'redirect_url': reverse('users:login'),
} }
kwargs.update(context) kwargs.update(context)
return super(UserForgetPasswordSendmailSuccessView, self).get_context_data(**kwargs) return super(UserForgotPasswordSendmailSuccessView, self).get_context_data(**kwargs)
class UserResetPasswordSuccessView(TemplateView): class UserResetPasswordSuccessView(TemplateView):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment