Add Zendesk password check
Add Bootstrap to forms Add custom form
This commit is contained in:
parent
729c0bec7e
commit
938b9894fe
@ -1,3 +1,8 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
|
from zenpy import Zenpy
|
||||||
|
from zenpy.lib.exception import APIException
|
||||||
|
|
||||||
from main.models import UserProfile
|
from main.models import UserProfile
|
||||||
|
|
||||||
|
|
||||||
@ -9,6 +14,7 @@ def set_and_get_name(UP: UserProfile): # TODO: Переделать с полу
|
|||||||
:param UP: Объект профиля пользователя
|
:param UP: Объект профиля пользователя
|
||||||
:type UP: :class:`main.models.UserProfile`
|
:type UP: :class:`main.models.UserProfile`
|
||||||
:return: Имя пользователя
|
:return: Имя пользователя
|
||||||
|
:rtype: :class:`str`
|
||||||
"""
|
"""
|
||||||
return UP.user.username
|
return UP.user.username
|
||||||
|
|
||||||
@ -20,6 +26,7 @@ def set_and_get_email(UP: UserProfile): # TODO: Переделать с пол
|
|||||||
:param UP: Объект профиля пользователя
|
:param UP: Объект профиля пользователя
|
||||||
:type UP: :class:`main.models.UserProfile`
|
:type UP: :class:`main.models.UserProfile`
|
||||||
:return: Почта пользователя
|
:return: Почта пользователя
|
||||||
|
:rtype: :class:`str`
|
||||||
"""
|
"""
|
||||||
return UP.user.email
|
return UP.user.email
|
||||||
|
|
||||||
@ -31,6 +38,7 @@ def set_and_get_role(UP: UserProfile): # TODO: Переделать с полу
|
|||||||
:param UP: Объект профиля пользователя
|
:param UP: Объект профиля пользователя
|
||||||
:type UP: :class:`main.models.UserProfile`
|
:type UP: :class:`main.models.UserProfile`
|
||||||
:return: Роль пользователя
|
:return: Роль пользователя
|
||||||
|
:rtype: :class:`str`
|
||||||
"""
|
"""
|
||||||
return UP.role
|
return UP.role
|
||||||
|
|
||||||
@ -42,5 +50,52 @@ def load_and_get_image(UP: UserProfile): # TODO: Переделать с пол
|
|||||||
:param UP: Объект профиля пользователя
|
:param UP: Объект профиля пользователя
|
||||||
:type UP: :class:`main.models.UserProfile`
|
:type UP: :class:`main.models.UserProfile`
|
||||||
:return: Название изображения
|
:return: Название изображения
|
||||||
|
:rtype: :class:`str`
|
||||||
"""
|
"""
|
||||||
return UP.image.name
|
return UP.image.name
|
||||||
|
|
||||||
|
|
||||||
|
def check_user_exist(email: str) -> bool:
|
||||||
|
"""
|
||||||
|
Функция проверяет, существует ли пользователь
|
||||||
|
|
||||||
|
:param email: Электронная почта пользователя
|
||||||
|
:type email: :class:`str
|
||||||
|
:return: True, если существует, иначе False
|
||||||
|
:rtype: :class:`bool'
|
||||||
|
"""
|
||||||
|
admin_creds = {
|
||||||
|
'email': os.environ.get('Admin_email'),
|
||||||
|
'subdomain': 'ngenix1612197338',
|
||||||
|
'token': os.environ.get('Oauth_token'),
|
||||||
|
}
|
||||||
|
admin = Zenpy(**admin_creds)
|
||||||
|
zenpy_user = admin.search(email, type='user')
|
||||||
|
if zenpy_user:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def check_user_auth(email: str, password: str) -> bool:
|
||||||
|
"""
|
||||||
|
Функция проверяет, верны ли входные данные
|
||||||
|
|
||||||
|
:param email: Электроная почта пользователя
|
||||||
|
:type email: :class:`str`
|
||||||
|
:param password: Пароль пользователя
|
||||||
|
:type password: :class:`str`
|
||||||
|
:return: True, если входные данные верны, иначе False
|
||||||
|
:raise APIException: исключение, вызываемое если пользователь не аутентифицирован
|
||||||
|
:rtype: :class:`bool`
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
creds = {
|
||||||
|
'email': email,
|
||||||
|
'subdomain': 'ngenix1612197338',
|
||||||
|
'password': password,
|
||||||
|
}
|
||||||
|
user = Zenpy(**creds)
|
||||||
|
user.search(email, type='user')
|
||||||
|
except APIException:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
34
main/forms.py
Normal file
34
main/forms.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
from django import forms
|
||||||
|
from django_registration.forms import RegistrationFormUniqueEmail
|
||||||
|
|
||||||
|
|
||||||
|
class CustomRegistrationForm(RegistrationFormUniqueEmail):
|
||||||
|
"""
|
||||||
|
Форма для регистрации :class:`django_registration.forms.RegistrationFormUniqueEmail`
|
||||||
|
с полем для ввода пароля от Zendesk аккаунта и с добавлением bootstrap-класса 'form-control' для всех полей
|
||||||
|
|
||||||
|
:param password_zen: Поле для ввода пароля от Zendesk
|
||||||
|
:type password_zen: :class:`django.forms.CharField`
|
||||||
|
"""
|
||||||
|
password_zen = forms.CharField(
|
||||||
|
required=True,
|
||||||
|
label="Пароль от Zendesk аккаунта",
|
||||||
|
strip=False,
|
||||||
|
widget=forms.PasswordInput(attrs={
|
||||||
|
'class': 'form-control'
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
for visible in self.visible_fields():
|
||||||
|
if visible.field.widget.attrs.get('class', False):
|
||||||
|
print(visible.field.widget.attrs['class'].find('form-control'))
|
||||||
|
if visible.field.widget.attrs['class'].find('form-control') < 0:
|
||||||
|
visible.field.widget.attrs['class'] += 'form-control'
|
||||||
|
else:
|
||||||
|
visible.field.widget.attrs['class'] = 'form-control'
|
||||||
|
|
||||||
|
class Meta(RegistrationFormUniqueEmail.Meta):
|
||||||
|
fields = RegistrationFormUniqueEmail.Meta.fields
|
||||||
|
fields.insert(2, 'password_zen')
|
@ -11,5 +11,5 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<br>
|
<br>
|
||||||
<h4> Нет пользователя с указаным адресом электронной почты</h4>
|
<h4> Нет пользователя с указаным адресом электронной почты, либо был введён неверный пароль</h4>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -10,5 +10,5 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<br>
|
<br>
|
||||||
<h4> Регистрация прошла успешно. <a href="{% url 'login' %}">Войти сейчас</a></h4>
|
<h4> Регистрация прошла успешно. <a href="/login/">Войти сейчас</a></h4>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -1,29 +1,26 @@
|
|||||||
from django.shortcuts import render, redirect
|
from django.shortcuts import render
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
|
|
||||||
from main.extra_func import set_and_get_name, set_and_get_email, load_and_get_image, set_and_get_role
|
from main.extra_func import set_and_get_name, set_and_get_email, load_and_get_image, set_and_get_role, check_user_exist, \
|
||||||
|
check_user_auth
|
||||||
from main.models import UserProfile
|
from main.models import UserProfile
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django_registration.forms import RegistrationFormUniqueEmail
|
from main.forms import CustomRegistrationForm
|
||||||
from django_registration.views import RegistrationView
|
from django_registration.views import RegistrationView
|
||||||
from zenpy import Zenpy
|
|
||||||
|
|
||||||
|
|
||||||
class CustomRegistrationView(RegistrationView):
|
class CustomRegistrationView(RegistrationView):
|
||||||
form_class = RegistrationFormUniqueEmail
|
"""
|
||||||
|
Отображение и логика работы страницы регистрации пользователя
|
||||||
|
"""
|
||||||
|
form_class = CustomRegistrationForm
|
||||||
template_name = 'django_registration/registration_form.html'
|
template_name = 'django_registration/registration_form.html'
|
||||||
success_url = reverse_lazy('django_registration_complete')
|
success_url = reverse_lazy('django_registration_complete')
|
||||||
|
is_allowed = True
|
||||||
|
|
||||||
def register(self, form):
|
def register(self, form):
|
||||||
creds = {
|
if check_user_exist(form.data['email']) and check_user_auth(form.data['email'], form.data['password_zen']):
|
||||||
'email': 'idar.sokurov.05@mail.ru',
|
|
||||||
'subdomain': 'ngenix1612197338',
|
|
||||||
'token': 'xRL9Qqz7svFE3X9cHMVC2zOtJUdllzr441C3Z363',
|
|
||||||
}
|
|
||||||
client = Zenpy(**creds)
|
|
||||||
zenpy_user = client.search(form.data['email'], type='user')
|
|
||||||
if zenpy_user:
|
|
||||||
user = User.objects.create_user(
|
user = User.objects.create_user(
|
||||||
username=form.data['username'],
|
username=form.data['username'],
|
||||||
email=form.data['email'],
|
email=form.data['email'],
|
||||||
@ -40,7 +37,17 @@ class CustomRegistrationView(RegistrationView):
|
|||||||
load_and_get_image(profile)
|
load_and_get_image(profile)
|
||||||
profile.save()
|
profile.save()
|
||||||
else:
|
else:
|
||||||
self.success_url = reverse_lazy('django_registration_disallowed')
|
self.is_allowed = False
|
||||||
|
|
||||||
|
def get_success_url(self, request):
|
||||||
|
"""
|
||||||
|
Вовзращет url-адресс страницы, куда нужно перейти после успешной/неуспешной регистрации
|
||||||
|
Используется самой django-registration
|
||||||
|
"""
|
||||||
|
if self.is_allowed:
|
||||||
|
return reverse_lazy('django_registration_complete')
|
||||||
|
else:
|
||||||
|
return reverse_lazy('django_registration_disallowed')
|
||||||
|
|
||||||
|
|
||||||
def profile_page(request):
|
def profile_page(request):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user