Change User to get_user_model

This commit is contained in:
Степаненко Ольга 2021-05-06 12:26:45 +03:00
parent 4b25ec4b33
commit 9c9b4dd08b
6 changed files with 33 additions and 32 deletions

View File

@ -24,7 +24,7 @@ BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = os.getenv('ACTRL_SECRET_KEY', 'empty') SECRET_KEY = os.getenv('ACTRL_SECRET_KEY', 'empty')
# SECURITY WARNING: don't run with debug turned on in production! # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = bool(int(os.getenv('ACTRL_DEBUG', 1))) DEBUG = bool(int(os.getenv('ACTRL_DEBUG', '1')))
ALLOWED_HOSTS = [ ALLOWED_HOSTS = [
'127.0.0.1', '127.0.0.1',
@ -60,8 +60,8 @@ ROOT_URLCONF = 'access_controller.urls'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = os.getenv('ACTRL_EMAIL_HOST', 'smtp.gmail.com') EMAIL_HOST = os.getenv('ACTRL_EMAIL_HOST', 'smtp.gmail.com')
EMAIL_PORT = int(os.getenv('ACTRL_EMAIL_PORT', 587)) EMAIL_PORT = int(os.getenv('ACTRL_EMAIL_PORT', '587'))
EMAIL_USE_TLS = bool(int(os.getenv('ACTRL_EMAIL_TLS', 1))) EMAIL_USE_TLS = bool(int(os.getenv('ACTRL_EMAIL_TLS', '1')))
EMAIL_HOST_USER = os.getenv('ACTRL_EMAIL_HOST_USER', 'group02django@gmail.com') EMAIL_HOST_USER = os.getenv('ACTRL_EMAIL_HOST_USER', 'group02django@gmail.com')
EMAIL_HOST_PASSWORD = os.getenv('ACTRL_EMAIL_HOST_PASSWORD', 'djangogroup02') EMAIL_HOST_PASSWORD = os.getenv('ACTRL_EMAIL_HOST_PASSWORD', 'djangogroup02')
DEFAULT_FROM_EMAIL = os.getenv('ACTRL_FROM_EMAIL', EMAIL_HOST_USER) DEFAULT_FROM_EMAIL = os.getenv('ACTRL_FROM_EMAIL', EMAIL_HOST_USER)
@ -154,8 +154,8 @@ AUTHENTICATION_BACKENDS = [
ZENDESK_ROLES = { ZENDESK_ROLES = {
'engineer': int(os.getenv('ENG_CROLE_ID', 0)), 'engineer': int(os.getenv('ENG_CROLE_ID', '0')),
'light_agent': int(os.getenv('LA_CROLE_ID', 0)), 'light_agent': int(os.getenv('LA_CROLE_ID', '0')),
} }
ZENDESK_GROUPS = { ZENDESK_GROUPS = {
@ -165,7 +165,7 @@ ZENDESK_GROUPS = {
SOLVED_TICKETS_EMAIL = os.getenv('ST_EMAIL') SOLVED_TICKETS_EMAIL = os.getenv('ST_EMAIL')
ZENDESK_MAX_AGENTS = int(os.getenv('LICENSE_NO', 0)) ZENDESK_MAX_AGENTS = int(os.getenv('LICENSE_NO', '0'))
REST_FRAMEWORK = { REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions, # Use Django's standard `django.contrib.auth` permissions,
@ -175,7 +175,7 @@ REST_FRAMEWORK = {
] ]
} }
ONE_DAY = int(os.getenv('SHIFTH', 0)) # Количество часов в 1 рабочем дне ONE_DAY = int(os.getenv('SHIFTH', '0')) # Количество часов в 1 рабочем дне
ACTRL_ZENDESK_SUBDOMAIN = os.getenv('ACTRL_ZENDESK_SUBDOMAIN') or os.getenv('ZD_DOMAIN') ACTRL_ZENDESK_SUBDOMAIN = os.getenv('ACTRL_ZENDESK_SUBDOMAIN') or os.getenv('ZD_DOMAIN')
ACTRL_API_EMAIL = os.getenv('ACTRL_API_EMAIL') or os.getenv('ACCESS_CONTROLLER_API_EMAIL') ACTRL_API_EMAIL = os.getenv('ACTRL_API_EMAIL') or os.getenv('ACCESS_CONTROLLER_API_EMAIL')

View File

@ -5,7 +5,7 @@ import logging
from datetime import timedelta, datetime, date from datetime import timedelta, datetime, date
from typing import Optional, Union from typing import Optional, Union
from django.contrib.auth.models import User from django.contrib.auth import get_user_model
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.core.handlers.wsgi import WSGIRequest from django.core.handlers.wsgi import WSGIRequest
from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
@ -21,7 +21,7 @@ from main.models import UserProfile, RoleChangeLogs, UnassignedTicket, Unassigne
from main.zendesk_admin import zenpy from main.zendesk_admin import zenpy
def update_role(user_profile: UserProfile, role: int, who_changes: User) -> None: def update_role(user_profile: UserProfile, role: int, who_changes: get_user_model()) -> None:
""" """
Функция меняет роль пользователя. Функция меняет роль пользователя.
@ -39,7 +39,7 @@ def update_role(user_profile: UserProfile, role: int, who_changes: User) -> None
zendesk.admin.users.update(user) zendesk.admin.users.update(user)
def make_engineer(user_profile: UserProfile, who_changes: User) -> None: def make_engineer(user_profile: UserProfile, who_changes: get_user_model()) -> None:
""" """
Функция устанавливает пользователю роль инженера. Функция устанавливает пользователю роль инженера.
@ -49,7 +49,7 @@ def make_engineer(user_profile: UserProfile, who_changes: User) -> None:
update_role(user_profile, ROLES['engineer'], who_changes) update_role(user_profile, ROLES['engineer'], who_changes)
def make_light_agent(user_profile: UserProfile, who_changes: User) -> None: def make_light_agent(user_profile: UserProfile, who_changes: get_user_model()) -> None:
""" """
Функция устанавливает пользователю роль легкого агента. Функция устанавливает пользователю роль легкого агента.
@ -193,7 +193,7 @@ def update_users_in_model():
users = get_users_list() users = get_users_list()
for user in users: for user in users:
try: try:
profile = User.objects.get(email=user.email).userprofile profile = get_user_model().objects.get(email=user.email).userprofile
update_user_in_model(profile, user) update_user_in_model(profile, user)
except ObjectDoesNotExist: except ObjectDoesNotExist:
pass pass
@ -409,9 +409,9 @@ class StatisticData:
try: try:
self.data = RoleChangeLogs.objects.filter( self.data = RoleChangeLogs.objects.filter(
change_time__range=[self.start_date, self.end_date + timedelta(days=1)], change_time__range=[self.start_date, self.end_date + timedelta(days=1)],
user=User.objects.get(email=self.email), user=get_user_model().objects.get(email=self.email),
).order_by('change_time') ).order_by('change_time')
except User.DoesNotExist: except get_user_model().DoesNotExist:
self.errors += ['Пользователь не найден'] self.errors += ['Пользователь не найден']
def _init_statistic(self) -> None: def _init_statistic(self) -> None:
@ -475,7 +475,7 @@ class StatisticData:
:param first_log: Первый лог :param first_log: Первый лог
""" """
self.fill_daterange(max(User.objects.get(email=self.email).date_joined.date(), self.start_date), self.fill_daterange(max(get_user_model().objects.get(email=self.email).date_joined.date(), self.start_date),
first_log.change_time.date()) first_log.change_time.date())
self.statistic[first_log.change_time.date()] += get_timedelta(first_log).total_seconds() self.statistic[first_log.change_time.date()] += get_timedelta(first_log).total_seconds()
@ -564,7 +564,7 @@ class CsvFormatter(logging.Formatter):
return msg return msg
def log(user: User, admin: int = 0) -> None: def log(user: get_user_model(), admin: int = 0) -> None:
""" """
Функция осуществляет запись логов в базу данных и csv файл. Функция осуществляет запись логов в базу данных и csv файл.

View File

@ -4,7 +4,7 @@
from django.db import models from django.db import models
from django.contrib.auth.models import User from django.contrib.auth import get_user_model
from django.db.models.signals import post_save from django.db.models.signals import post_save
from django.dispatch import receiver from django.dispatch import receiver
from django.utils import timezone from django.utils import timezone
@ -24,7 +24,7 @@ class UserProfile(models.Model):
('has_control_access', 'Can view admin page'), ('has_control_access', 'Can view admin page'),
) )
user = models.OneToOneField(to=User, on_delete=models.CASCADE, help_text='Пользователь') user = models.OneToOneField(to=get_user_model(), on_delete=models.CASCADE, help_text='Пользователь')
role = models.CharField(default='None', max_length=100, help_text='Глобальное имя роли пользователя') role = models.CharField(default='None', max_length=100, help_text='Глобальное имя роли пользователя')
custom_role_id = models.IntegerField(default=0, help_text='Код роли пользователя') custom_role_id = models.IntegerField(default=0, help_text='Код роли пользователя')
image = models.URLField(null=True, blank=True, help_text='Аватарка') image = models.URLField(null=True, blank=True, help_text='Аватарка')
@ -44,7 +44,7 @@ class UserProfile(models.Model):
return 'UNDEFINED' return 'UNDEFINED'
@receiver(post_save, sender=User) @receiver(post_save, sender=get_user_model())
def create_user_profile(instance, created, **kwargs) -> None: def create_user_profile(instance, created, **kwargs) -> None:
""" """
Функция создания профиля пользователя (Userprofile) при регистрации пользователя. Функция создания профиля пользователя (Userprofile) при регистрации пользователя.
@ -58,7 +58,7 @@ def create_user_profile(instance, created, **kwargs) -> None:
UserProfile.objects.create(user=instance) UserProfile.objects.create(user=instance)
@receiver(post_save, sender=User) @receiver(post_save, sender=get_user_model())
def save_user_profile(instance, **kwargs) -> None: def save_user_profile(instance, **kwargs) -> None:
""" """
Функция записи БД профиля пользователя. Функция записи БД профиля пользователя.
@ -74,12 +74,12 @@ class RoleChangeLogs(models.Model):
""" """
Модель для логирования изменений ролей пользователя. Модель для логирования изменений ролей пользователя.
""" """
user = models.ForeignKey(to=User, on_delete=models.CASCADE, user = models.ForeignKey(to=get_user_model(), on_delete=models.CASCADE,
help_text='Пользователь, которому присвоили другую роль') help_text='Пользователь, которому присвоили другую роль')
old_role = models.IntegerField(default=0, help_text='Старая роль') old_role = models.IntegerField(default=0, help_text='Старая роль')
new_role = models.IntegerField(default=0, help_text='Присвоенная роль') new_role = models.IntegerField(default=0, help_text='Присвоенная роль')
change_time = models.DateTimeField(default=timezone.now, help_text='Дата и время изменения роли') change_time = models.DateTimeField(default=timezone.now, help_text='Дата и время изменения роли')
changed_by = models.ForeignKey(to=User, on_delete=models.CASCADE, related_name='changed_by', changed_by = models.ForeignKey(to=get_user_model(), on_delete=models.CASCADE, related_name='changed_by',
help_text='Кем была изменена роль') help_text='Кем была изменена роль')
@ -106,7 +106,7 @@ class UnassignedTicket(models.Model):
""" """
Модель не распределенного тикета. Модель не распределенного тикета.
""" """
assignee = models.ForeignKey(to=User, on_delete=models.CASCADE, related_name='tickets', assignee = models.ForeignKey(to=get_user_model(), on_delete=models.CASCADE, related_name='tickets',
help_text='Пользователь, с которого снят тикет') help_text='Пользователь, с которого снят тикет')
ticket_id = models.IntegerField(help_text='Номер тикера, для которого сняли ответственного') ticket_id = models.IntegerField(help_text='Номер тикера, для которого сняли ответственного')
status = models.IntegerField(choices=UnassignedTicketStatus.choices, default=UnassignedTicketStatus.UNASSIGNED, status = models.IntegerField(choices=UnassignedTicketStatus.choices, default=UnassignedTicketStatus.UNASSIGNED,

View File

@ -1,7 +1,7 @@
""" """
Сериализаторы. Сериализаторы.
""" """
from django.contrib.auth.models import User from django.contrib.auth import get_user_model
from rest_framework import serializers from rest_framework import serializers
from main.models import UserProfile from main.models import UserProfile
from access_controller.settings import ZENDESK_ROLES from access_controller.settings import ZENDESK_ROLES
@ -17,7 +17,7 @@ class UserSerializer(serializers.HyperlinkedModelSerializer):
:type email: :class:`list` :type email: :class:`list`
""" """
class Meta: class Meta:
model = User model = get_user_model()
fields = ['email'] fields = ['email']

View File

@ -1,6 +1,6 @@
from urllib.parse import urlparse from urllib.parse import urlparse
from django.contrib.auth.models import User from django.contrib.auth import get_user_model
from django.core import mail from django.core import mail
from django.test import TestCase, Client from django.test import TestCase, Client
from django.urls import reverse from django.urls import reverse
@ -71,13 +71,13 @@ class RegistrationTestCase(TestCase):
def test_registration_user_creating(self): def test_registration_user_creating(self):
with self.settings(EMAIL_BACKEND=self.email_backend): with self.settings(EMAIL_BACKEND=self.email_backend):
self.client.post(reverse('registration'), data={'email': self.any_zendesk_user_email}) self.client.post(reverse('registration'), data={'email': self.any_zendesk_user_email})
user = User.objects.get(email=self.any_zendesk_user_email) user = get_user_model().objects.get(email=self.any_zendesk_user_email)
zendesk_user = zenpy.get_user(self.any_zendesk_user_email) zendesk_user = zenpy.get_user(self.any_zendesk_user_email)
self.assertEqual(user.userprofile.name, zendesk_user.name) self.assertEqual(user.userprofile.name, zendesk_user.name)
def test_permissions_applying(self): def test_permissions_applying(self):
with self.settings(EMAIL_BACKEND=self.email_backend): with self.settings(EMAIL_BACKEND=self.email_backend):
self.client.post(reverse('registration'), data={'email': self.zendesk_admin_email}) self.client.post(reverse('registration'), data={'email': self.zendesk_admin_email})
user = User.objects.get(email=self.zendesk_admin_email) user = get_user_model().objects.get(email=self.zendesk_admin_email)
self.assertEqual(user.userprofile.role, 'admin') self.assertEqual(user.userprofile.role, 'admin')
self.assertTrue(user.has_perm('main.has_control_access')) self.assertTrue(user.has_perm('main.has_control_access'))

View File

@ -9,7 +9,8 @@ from typing import Dict, Any, Optional
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
from django.contrib.auth.models import User, Permission from django.contrib.auth import get_user_model
from django.contrib.auth.models import Permission
from django.contrib.auth.tokens import default_token_generator from django.contrib.auth.tokens import default_token_generator
from django.contrib.auth.forms import PasswordResetForm from django.contrib.auth.forms import PasswordResetForm
from django.contrib.auth.views import LoginView from django.contrib.auth.views import LoginView
@ -83,7 +84,7 @@ class CustomRegistrationView(RegistrationView):
} }
redirect_url = 'done' redirect_url = 'done'
def register(self, form: CustomRegistrationForm) -> Optional[User]: def register(self, form: CustomRegistrationForm) -> Optional[get_user_model()]:
""" """
Функция регистрации пользователя. Функция регистрации пользователя.
1. Ввод email пользователя, указанный на Zendesk 1. Ввод email пользователя, указанный на Zendesk
@ -128,7 +129,7 @@ class CustomRegistrationView(RegistrationView):
return None return None
@staticmethod @staticmethod
def set_permission(user: User) -> None: def set_permission(user: get_user_model()) -> None:
""" """
Функция дает разрешение на просмотр страница администратора, если пользователь имеет роль admin. Функция дает разрешение на просмотр страница администратора, если пользователь имеет роль admin.
@ -142,7 +143,7 @@ class CustomRegistrationView(RegistrationView):
) )
user.user_permissions.add(permission) user.user_permissions.add(permission)
def get_success_url(self, user: User = None) -> Dict: def get_success_url(self, user: get_user_model() = None) -> Dict:
""" """
Функция возвращает url-адрес страницы, куда нужно перейти после успешной/не успешной регистрации. Функция возвращает url-адрес страницы, куда нужно перейти после успешной/не успешной регистрации.
Используется самой django-registration. Используется самой django-registration.