From 8488ea88c29d980a2c706f27aa394ac6b1294b3c Mon Sep 17 00:00:00 2001 From: Yuriy Kulakov Date: Sun, 7 Mar 2021 21:30:02 +0300 Subject: [PATCH 1/7] Added Django REST but have some bugs --- access_controller/settings.py | 9 ++++ access_controller/urls.py | 12 +++-- main/extra_func.py | 45 ++++++++++++++++--- main/serializers.py | 17 ++++++++ main/templates/base/base.html | 1 + main/templates/pages/adm_ruleset.html | 18 +++++--- main/urls.py | 6 +++ main/views.py | 43 ++++++++++-------- requirements.txt | 2 + static/main/js/control.js | 63 ++++++++++++++++++++++++--- 10 files changed, 176 insertions(+), 40 deletions(-) create mode 100644 main/serializers.py create mode 100644 main/urls.py diff --git a/access_controller/settings.py b/access_controller/settings.py index 96703b6..a26931d 100644 --- a/access_controller/settings.py +++ b/access_controller/settings.py @@ -36,6 +36,7 @@ INSTALLED_APPS = [ 'django.contrib.messages', 'django.contrib.staticfiles', 'django_registration', + 'rest_framework', 'main', ] @@ -183,3 +184,11 @@ ZENDESK_ROLES = { 'engineer': 360005209000, 'light_agent': 360005208980, } + +REST_FRAMEWORK = { + # Use Django's standard `django.contrib.auth` permissions, + # or allow read-only access for unauthenticated users. + 'DEFAULT_PERMISSION_CLASSES': [ + 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' + ] +} diff --git a/access_controller/urls.py b/access_controller/urls.py index 3595e4f..92edfe1 100644 --- a/access_controller/urls.py +++ b/access_controller/urls.py @@ -17,15 +17,16 @@ from django.contrib import admin from django.contrib.auth import views as auth_views from django.urls import path, include from main.views import work_page, work_hand_over, work_become_engineer, AdminPageView - from main.views import main_page, profile_page, CustomRegistrationView, CustomLoginView +from main.urls import router + urlpatterns = [ path('admin/', admin.site.urls, name='admin'), path('', main_page, name='index'), path('accounts/profile/', profile_page, name='profile'), path('accounts/register/', CustomRegistrationView.as_view(), name='registration'), - path('accounts/login/', CustomLoginView.as_view(extra_context={}), name='login',), # TODO add extra context + path('accounts/login/', CustomLoginView.as_view(extra_context={}), name='login', ), # TODO add extra context path('accounts/', include('django.contrib.auth.urls')), path('accounts/', include('django_registration.backends.one_step.urls')), path('work/', work_page, name="work"), @@ -34,7 +35,7 @@ urlpatterns = [ path('accounts/', include('django_registration.backends.activation.urls')), path('accounts/login/', include('django.contrib.auth.urls')), path('control/', AdminPageView.as_view(), name='control') - ] +] urlpatterns += [ path( @@ -58,3 +59,8 @@ urlpatterns += [ name='password_reset_complete' ), ] + +# Django REST +urlpatterns += [ + path('api/', include(router.urls)) +] diff --git a/main/extra_func.py b/main/extra_func.py index 691bd37..5cfb400 100644 --- a/main/extra_func.py +++ b/main/extra_func.py @@ -3,9 +3,9 @@ import os from zenpy import Zenpy from zenpy.lib.exception import APIException -from main.models import UserProfile +from main.models import UserProfile, User -from access_controller.settings import ZENDESK_ROLES as ROLES +from access_controller.settings import ZENDESK_ROLES as ROLES, ZENDESK_ROLES class ZendeskAdmin: @@ -28,7 +28,7 @@ class ZendeskAdmin: email: str = os.getenv('ACCESS_CONTROLLER_API_EMAIL') token: str = os.getenv('ACCESS_CONTROLLER_API_TOKEN') password: str = os.getenv('ACCESS_CONTROLLER_API_PASSWORD') - _instance=None + _instance = None def __new__(cls, *args, **kwargs): if cls._instance is None: @@ -144,8 +144,9 @@ def get_users_list() -> list: Функция **get_users_list** возвращает список пользователей Zendesk, относящихся к организации. """ zendesk = ZendeskAdmin() - admin = zendesk.get_user(zendesk.email) - org = next(zendesk.admin.users.organizations(user=admin)) + + # У пользователей должна быть организация SYSTEM + org = next(zendesk.admin.search(type='organization', name='SYSTEM')) return zendesk.admin.organizations.users(org) @@ -191,3 +192,37 @@ def check_user_auth(email: str, password: str) -> bool: except APIException: return False return True + + +def update_user_in_model(profile, zendesk_user): + profile.name = zendesk_user.name + profile.role = zendesk_user.role + profile.image = zendesk_user.photo['content_url'] if zendesk_user.photo else None + profile.save() + + +def count_users(users) -> tuple: + """ + Функция подсчета количества сотрудников с ролями engineer и light_a + + .. todo:: + this func counts users from all zendesk instead of just from a model: + """ + engineers, light_agents = 0, 0 + for user in users: + if user.custom_role_id == ZENDESK_ROLES['engineer']: + engineers += 1 + elif user.custom_role_id == ZENDESK_ROLES['light_agent']: + light_agents += 1 + return engineers, light_agents + + +def update_users_in_model(): + """ + Обновляет пользователей в модели UserProfile по списку пользователей в организации + """ + users = get_users_list() + for user in users: + profile = User.objects.get(email=user.email).userprofile + update_user_in_model(profile, user) + return users diff --git a/main/serializers.py b/main/serializers.py new file mode 100644 index 0000000..26d08c2 --- /dev/null +++ b/main/serializers.py @@ -0,0 +1,17 @@ +from django.contrib.auth.models import User +from rest_framework import serializers +from main.models import UserProfile + + +class UserSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = User + fields = ['email'] + + +class ProfileSerializer(serializers.HyperlinkedModelSerializer): + user = UserSerializer() + + class Meta: + model = UserProfile + fields = ['user', 'role', 'name'] diff --git a/main/templates/base/base.html b/main/templates/base/base.html index 2aebfe0..166195d 100644 --- a/main/templates/base/base.html +++ b/main/templates/base/base.html @@ -27,6 +27,7 @@ {% block extra_css %}{% endblock %} + {% block extra_scripts %}{% endblock %} diff --git a/main/templates/pages/adm_ruleset.html b/main/templates/pages/adm_ruleset.html index 387cd73..dd9d614 100644 --- a/main/templates/pages/adm_ruleset.html +++ b/main/templates/pages/adm_ruleset.html @@ -10,6 +10,13 @@ {% endblock %} +{% block extra_scripts %} + + + + +{% endblock%} + {% block content %}
@@ -37,25 +44,22 @@ - + - - + {% for user in users %} - + - {% endfor %} -
IDName Email RoleName(link to profile) Checked
{{ user.id }}{{ user.name }} {{ user.user.email }} {{ user.role }}{{ user.name }}
{% endblock%} @@ -103,6 +107,6 @@ {% endblock %}
- + {% endblock %} diff --git a/main/urls.py b/main/urls.py new file mode 100644 index 0000000..fffe11d --- /dev/null +++ b/main/urls.py @@ -0,0 +1,6 @@ +from rest_framework.routers import DefaultRouter +from main.views import UsersViewSet + + +router = DefaultRouter() +router.register(r'users', UsersViewSet) diff --git a/main/views.py b/main/views.py index ca8c9c2..36f82da 100644 --- a/main/views.py +++ b/main/views.py @@ -14,7 +14,7 @@ from zenpy import Zenpy from access_controller.settings import EMAIL_HOST_USER from main.extra_func import check_user_exist, update_profile, get_user_organization, \ - make_engineer, make_light_agent, get_users_list + make_engineer, make_light_agent, get_users_list, update_users_in_model, count_users from django.contrib.auth.models import User, Permission from main.models import UserProfile @@ -27,6 +27,11 @@ from django.core.exceptions import PermissionDenied from access_controller.settings import ZENDESK_ROLES from zenpy.lib.api_objects import User as ZenpyUser +# Django REST +from rest_framework import viewsets, status +from main.serializers import ProfileSerializer +from rest_framework.response import Response +from rest_framework.decorators import action content_type_temp = ContentType.objects.get_for_model(UserProfile) permission_temp, created = Permission.objects.get_or_create( @@ -193,22 +198,6 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin, FormView): def make_light_agents(users): [make_light_agent(user) for user in users] - @staticmethod - def count_users(users) -> tuple: - """ - Функция подсчета количества сотрудников с ролями engineer и light_a - - .. todo:: - this func counts users from all zendesk instead of just from a model: - """ - engineers, light_agents = 0, 0 - for user in users: - if user.custom_role_id == ZENDESK_ROLES['engineer']: - engineers += 1 - elif user.custom_role_id == ZENDESK_ROLES['light_agent']: - light_agents += 1 - return engineers, light_agents - def get_context_data(self, **kwargs) -> dict: """ Функция формирования контента страницы администратора (с проверкой прав доступа) @@ -216,9 +205,10 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin, FormView): if self.request.user.userprofile.role != 'admin': raise PermissionDenied context = super().get_context_data(**kwargs) - context['users'] = get_list_or_404( + users = get_list_or_404( UserProfile, role='agent') - context['engineers'], context['light_agents'] = self.count_users(get_users_list()) + context['users'] = users + context['engineers'], context['light_agents'] = count_users(users) return context # TODO: need to get profile page url @@ -227,3 +217,18 @@ class CustomLoginView(LoginView): Отображение страницы авторизации пользователя """ form_class = CustomAuthenticationForm + + +class UsersViewSet(viewsets.ReadOnlyModelViewSet): + """ + Класс для получения пользователей с помощью api + """ + queryset = UserProfile.objects.filter(role='agent') + serializer_class = ProfileSerializer + + def list(self, request, *args, **kwargs): + users = update_users_in_model() + profiles = UserProfile.objects.filter(role='agent') + count = count_users(users) + serializer = self.get_serializer(data=profiles, many=True) + return Response(serializer.data + {'engineers': count[0], 'light_agents': count[1]}) diff --git a/requirements.txt b/requirements.txt index 7a4f941..b32a382 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,8 @@ Django==3.1.6 Pillow==8.1.0 zenpy~=2.0.24 django_registration==3.1.1 +djangorestframework==3.12.2 + # Documentation Sphinx==3.4.3 diff --git a/static/main/js/control.js b/static/main/js/control.js index 1fd4f9c..6404741 100644 --- a/static/main/js/control.js +++ b/static/main/js/control.js @@ -1,9 +1,60 @@ "use strict"; -let checkboxes = document.getElementsByName("users"); -let fields = document.querySelectorAll(".checkbox_field"); -if (checkboxes.length == fields.length) { - for (let i = 0; i < fields.length; ++i) { - let el = checkboxes[i].cloneNode(true); - fields[i].appendChild(el); + +function move_checkboxes() { + let checkboxes = document.getElementsByName("users"); + let fields = document.querySelectorAll(".checkbox_field"); + if (checkboxes.length == fields.length) { + for (let i = 0; i < fields.length; ++i) { + let el = checkboxes[i].cloneNode(true); + fields[i].appendChild(el); + } } } + +class TableRow extends React.Component { + render() { + return ( + + + {this.props.user.name} + + {this.props.user.user.email} + {this.props.user.role} + + + ); + } +} + +class TableBody extends React.Component { + constructor(props) { + super(props); + this.state = { users: [] }; + } + + get_users() { + axios.get("/api/users").then((response) => { + this.setState({ users: response.data }); + }); + } + + componentDidMount() { + this.interval = setInterval(() => { + this.get_users(); + move_checkboxes(); + }, 1000); + } + + componentWillUnmount() { + clearInterval(this.interval); + } + + render() { + return this.state.users.map((user, key) => ( + + )); + } +} + +move_checkboxes(); +ReactDOM.render(, document.getElementById("table")); From 72b70cc585f3e2e46ff53e520e3a19326949cd91 Mon Sep 17 00:00:00 2001 From: Yuriy Kulakov Date: Thu, 11 Mar 2021 19:29:16 +0300 Subject: [PATCH 2/7] Fixed bug with api response --- main/extra_func.py | 12 +++++++++--- main/serializers.py | 2 +- main/views.py | 13 +++++++++---- static/main/js/control.js | 31 +++++++++++++++++++++++++------ 4 files changed, 44 insertions(+), 14 deletions(-) diff --git a/main/extra_func.py b/main/extra_func.py index 5cfb400..295a677 100644 --- a/main/extra_func.py +++ b/main/extra_func.py @@ -1,9 +1,12 @@ import os +from django.contrib.auth.models import User from zenpy import Zenpy from zenpy.lib.exception import APIException -from main.models import UserProfile, User +from main.models import UserProfile +from django.core.exceptions import ObjectDoesNotExist + from access_controller.settings import ZENDESK_ROLES as ROLES, ZENDESK_ROLES @@ -223,6 +226,9 @@ def update_users_in_model(): """ users = get_users_list() for user in users: - profile = User.objects.get(email=user.email).userprofile - update_user_in_model(profile, user) + try: + profile = User.objects.get(email=user.email).userprofile + update_user_in_model(profile, user) + except ObjectDoesNotExist: + pass return users diff --git a/main/serializers.py b/main/serializers.py index 26d08c2..f72fc86 100644 --- a/main/serializers.py +++ b/main/serializers.py @@ -14,4 +14,4 @@ class ProfileSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = UserProfile - fields = ['user', 'role', 'name'] + fields = ['user', 'id', 'role', 'name'] diff --git a/main/views.py b/main/views.py index 36f82da..e831d34 100644 --- a/main/views.py +++ b/main/views.py @@ -208,7 +208,7 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin, FormView): users = get_list_or_404( UserProfile, role='agent') context['users'] = users - context['engineers'], context['light_agents'] = count_users(users) + context['engineers'], context['light_agents'] = count_users(get_users_list()) return context # TODO: need to get profile page url @@ -228,7 +228,12 @@ class UsersViewSet(viewsets.ReadOnlyModelViewSet): def list(self, request, *args, **kwargs): users = update_users_in_model() - profiles = UserProfile.objects.filter(role='agent') count = count_users(users) - serializer = self.get_serializer(data=profiles, many=True) - return Response(serializer.data + {'engineers': count[0], 'light_agents': count[1]}) + profiles = UserProfile.objects.filter(role='agent') + serializer = self.get_serializer(profiles, many=True) + return Response({ + 'users': serializer.data, + 'engineers': count[0], + 'light_agents': count[1] + }) + diff --git a/static/main/js/control.js b/static/main/js/control.js index 6404741..e645196 100644 --- a/static/main/js/control.js +++ b/static/main/js/control.js @@ -10,7 +10,9 @@ function move_checkboxes() { } } } +move_checkboxes(); +// React class TableRow extends React.Component { render() { return ( @@ -20,7 +22,13 @@ class TableRow extends React.Component { {this.props.user.user.email} {this.props.user.role} - + + + ); } @@ -29,20 +37,31 @@ class TableRow extends React.Component { class TableBody extends React.Component { constructor(props) { super(props); - this.state = { users: [] }; + this.state = { + users: [], + engineers: 0, + light_agents: 0, + }; } get_users() { axios.get("/api/users").then((response) => { - this.setState({ users: response.data }); + this.setState({ + users: response.data.users, + engineers: response.data.engineers, + light_agents: response.data.light_agents, + }); + let elements = document.querySelectorAll(".info-quantity-value"); + console.log(elements) + elements[0].innerHTML = this.state.engineers; + elements[1].innerHTML = this.state.light_agents; }); } componentDidMount() { this.interval = setInterval(() => { this.get_users(); - move_checkboxes(); - }, 1000); + }, 10000); } componentWillUnmount() { @@ -56,5 +75,5 @@ class TableBody extends React.Component { } } -move_checkboxes(); ReactDOM.render(, document.getElementById("table")); + From abe44fec5f2cd85bc7e7966e7759b474322164a0 Mon Sep 17 00:00:00 2001 From: Yuriy Kulakov Date: Fri, 12 Mar 2021 13:01:41 +0300 Subject: [PATCH 3/7] Refactored some functions in AdminPageView --- main/views.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/main/views.py b/main/views.py index e831d34..3b96d92 100644 --- a/main/views.py +++ b/main/views.py @@ -184,10 +184,11 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin, FormView): """ Функция установки ролей пользователям """ + users = form.cleaned_data['users'] if 'engineer' in self.request.POST: - self.make_engineers(form.cleaned_data['users']) + self.make_engineers(users) elif 'light_agent' in self.request.POST: - self.make_light_agents(form.cleaned_data['users']) + self.make_light_agents(users) return super().form_valid(form) @staticmethod @@ -202,8 +203,6 @@ class AdminPageView(LoginRequiredMixin, PermissionRequiredMixin, FormView): """ Функция формирования контента страницы администратора (с проверкой прав доступа) """ - if self.request.user.userprofile.role != 'admin': - raise PermissionDenied context = super().get_context_data(**kwargs) users = get_list_or_404( UserProfile, role='agent') From c1a10b6f2c7834e51d49e253ce29b245b7d5d0fb Mon Sep 17 00:00:00 2001 From: Yuriy Kulakov Date: Fri, 12 Mar 2021 14:54:57 +0300 Subject: [PATCH 4/7] Fixed bug with disappearance of table rows in control page at start --- main/extra_func.py | 9 +++++---- main/templates/pages/adm_ruleset.html | 3 ++- main/views.py | 5 +---- static/main/js/control.js | 10 +++++++--- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/main/extra_func.py b/main/extra_func.py index 295a677..8ad1b80 100644 --- a/main/extra_func.py +++ b/main/extra_func.py @@ -8,7 +8,7 @@ from main.models import UserProfile from django.core.exceptions import ObjectDoesNotExist -from access_controller.settings import ZENDESK_ROLES as ROLES, ZENDESK_ROLES +from access_controller.settings import ZENDESK_ROLES class ZendeskAdmin: @@ -132,14 +132,14 @@ def make_engineer(user_profile: UserProfile) -> UserProfile: """ Функция **make_engineer** устанавливапет пользователю роль инженера. """ - update_role(user_profile, ROLES['engineer']) + update_role(user_profile, ZENDESK_ROLES['engineer']) def make_light_agent(user_profile: UserProfile) -> UserProfile: """ Функция **make_light_agent** устанавливапет пользователю роль легкого агента. """ - update_role(user_profile, ROLES['light_agent']) + update_role(user_profile, ZENDESK_ROLES['light_agent']) def get_users_list() -> list: @@ -150,7 +150,8 @@ def get_users_list() -> list: # У пользователей должна быть организация SYSTEM org = next(zendesk.admin.search(type='organization', name='SYSTEM')) - return zendesk.admin.organizations.users(org) + users = zendesk.admin.organizations.users(org) + return users def update_profile(user_profile: UserProfile) -> UserProfile: diff --git a/main/templates/pages/adm_ruleset.html b/main/templates/pages/adm_ruleset.html index dd9d614..c230862 100644 --- a/main/templates/pages/adm_ruleset.html +++ b/main/templates/pages/adm_ruleset.html @@ -50,7 +50,7 @@ Checked - + {% for user in users %} {{ user.name }} @@ -60,6 +60,7 @@ {% endfor %} + {% endblock%} diff --git a/main/views.py b/main/views.py index 3b96d92..875763a 100644 --- a/main/views.py +++ b/main/views.py @@ -22,16 +22,13 @@ from main.forms import CustomRegistrationForm, AdminPageUsers, CustomAuthenticat from django_registration.views import RegistrationView from django.contrib.auth.decorators import login_required from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin -from django.core.exceptions import PermissionDenied -from access_controller.settings import ZENDESK_ROLES from zenpy.lib.api_objects import User as ZenpyUser # Django REST from rest_framework import viewsets, status from main.serializers import ProfileSerializer from rest_framework.response import Response -from rest_framework.decorators import action content_type_temp = ContentType.objects.get_for_model(UserProfile) permission_temp, created = Permission.objects.get_or_create( @@ -226,7 +223,7 @@ class UsersViewSet(viewsets.ReadOnlyModelViewSet): serializer_class = ProfileSerializer def list(self, request, *args, **kwargs): - users = update_users_in_model() + users = update_users_in_model().values count = count_users(users) profiles = UserProfile.objects.filter(role='agent') serializer = self.get_serializer(profiles, many=True) diff --git a/static/main/js/control.js b/static/main/js/control.js index e645196..62d2daf 100644 --- a/static/main/js/control.js +++ b/static/main/js/control.js @@ -8,6 +8,10 @@ function move_checkboxes() { let el = checkboxes[i].cloneNode(true); fields[i].appendChild(el); } + } else { + alert( + "Количество пользователей агентов не соответствует количеству полей в форме AdminPageUsers" + ); } } move_checkboxes(); @@ -27,6 +31,7 @@ class TableRow extends React.Component { type="checkbox" value={this.props.user.id} className="form-check-input" + name="users" /> @@ -52,7 +57,6 @@ class TableBody extends React.Component { light_agents: response.data.light_agents, }); let elements = document.querySelectorAll(".info-quantity-value"); - console.log(elements) elements[0].innerHTML = this.state.engineers; elements[1].innerHTML = this.state.light_agents; }); @@ -75,5 +79,5 @@ class TableBody extends React.Component { } } -ReactDOM.render(, document.getElementById("table")); - +ReactDOM.render(, document.getElementById("new_tbody")); +setTimeout(() => document.getElementById("old_tbody").remove(), 10000); From a434a4a30b3c4f2409b18edec2f74970c8bf6330 Mon Sep 17 00:00:00 2001 From: Yuriy Kulakov Date: Fri, 12 Mar 2021 15:39:54 +0300 Subject: [PATCH 5/7] Merge feature/periodic into develop --- main/extra_func.py | 1 + main/templates/pages/adm_ruleset.html | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/main/extra_func.py b/main/extra_func.py index 58e53a0..e9cafe9 100644 --- a/main/extra_func.py +++ b/main/extra_func.py @@ -204,6 +204,7 @@ def update_user_in_model(profile, zendesk_user): profile.name = zendesk_user.name profile.role = zendesk_user.role profile.image = zendesk_user.photo['content_url'] if zendesk_user.photo else None + profile.custom_role_id = zendesk_user.custom_role_id profile.save() diff --git a/main/templates/pages/adm_ruleset.html b/main/templates/pages/adm_ruleset.html index c230862..92a0628 100644 --- a/main/templates/pages/adm_ruleset.html +++ b/main/templates/pages/adm_ruleset.html @@ -19,9 +19,6 @@ {% block content %}
-
-

Основная информация о странице

-
{% block form %}
From e75e93287eeab6edbcc1e372b90222872da245c3 Mon Sep 17 00:00:00 2001 From: Yuriy Kulakov Date: Sun, 14 Mar 2021 17:54:55 +0300 Subject: [PATCH 6/7] Added fixture with base users --- data.json | 57 ++++++++++++++++++++++++++ main/templates/registration/login.html | 2 +- 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 data.json diff --git a/data.json b/data.json new file mode 100644 index 0000000..a4310a4 --- /dev/null +++ b/data.json @@ -0,0 +1,57 @@ +[ + { + "model": "auth.user", + "pk": 1, + "fields": { + "password": "pbkdf2_sha256$216000$gHBBCr1jBELf$ZkEDW3IEd8Wij7u8vkv+0Eze32CS01bcaYWhcD9OIC4=", + "last_login": null, + "is_superuser": true, + "username": "admin@gmail.com", + "first_name": "", + "last_name": "", + "email": "admin@gmail.com", + "is_staff": true, + "is_active": true, + "date_joined": "2021-03-10T16:38:56.303Z", + "groups": [], + "user_permissions": [33] + } + }, + { + "model": "main.userprofile", + "pk": 1, + "fields": { + "name": "ZendeskAdmin", + "user": 1, + "role": "admin" + } + }, + { + "model": "auth.user", + "pk": 2, + "fields": { + "password": "pbkdf2_sha256$216000$5qLJgrm2Quq9$KDBNNymVZXkUx0HKBPFst2m83kLe0egPBnkW7KnkORU=", + "last_login": null, + "is_superuser": false, + "username": "123@test.ru", + "first_name": "", + "last_name": "", + "email": "123@test.ru", + "is_staff": false, + "is_active": true, + "date_joined": "2021-03-10T16:38:56.303Z", + "groups": [], + "user_permissions": [] + } + }, + { + "model": "main.userprofile", + "pk": 2, + "fields": { + "name": "UserForAccessTest", + "user": 2, + "role": "agent", + "custom_role_id": "360005209000" + } + } +] diff --git a/main/templates/registration/login.html b/main/templates/registration/login.html index 7a3ab68..68c557f 100644 --- a/main/templates/registration/login.html +++ b/main/templates/registration/login.html @@ -30,7 +30,7 @@ {% endif %}
From 2bb2c9556b5f2f732506cd0e57e7f8cf7fc2f6ad Mon Sep 17 00:00:00 2001 From: Iurii Tatishchev Date: Thu, 18 Mar 2021 09:32:46 -0700 Subject: [PATCH 7/7] fix `./manage.py migrate` errors --- main/views.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/main/views.py b/main/views.py index b14907b..cae5d90 100644 --- a/main/views.py +++ b/main/views.py @@ -32,12 +32,6 @@ from rest_framework import viewsets, status from main.serializers import ProfileSerializer from rest_framework.response import Response -content_type_temp = ContentType.objects.get_for_model(UserProfile) -permission_temp, created = Permission.objects.get_or_create( - codename='has_control_access', - content_type=content_type_temp, -) - class CustomRegistrationView(RegistrationView): """