В каком-то приложении нам нужно отслеживать, какой пользователь добавил или обновил данные в системе. Итак, здесь мы увидим, как выполнить эту работу в фоновом режиме без участия пользователя.

Требуемая настройка:
Надеюсь, у вас уже установлены Django и Django Rest Framework. Если нет, сначала установите их.

бежать —

pip install Django 
pip install djangorestframework 
Войти в полноэкранный режим

Выйти из полноэкранного режима

Настройки:

В твоей settings.py добавьте «rest_framework» и ваши внутренние приложения, например «api».

INSTALLED_APPS = [
    ......
    ......
    ......

    # third-party packages
    'rest_framework',

    # internal apps
    'api',
]
Войти в полноэкранный режим

Выйти из полноэкранного режима

Напишите модели:

Определите свою модель приложений в models.py

from django.db import models
from django.conf import settings

class Student(models.Model):
    name = models.CharField(max_length=180)
    programme = models.CharField(max_length=250)
    batch = models.SmallIntegerField()
    roll = models.SmallIntegerField()
    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, related_name="created_by", blank=True, null=True)
    updated_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, related_name="updated_by", blank=True, null=True)

Войти в полноэкранный режим

Выйти из полноэкранного режима

Напишите сериализаторы:

Внутри вашего приложения добавьте файл с именем serializers.py и определите класс сериализатора для вашей модели следующим образом:

from rest_framework import serializers
from .models import Student

class StudentModelSerializer(serializers.ModelSerializer):
    created_by = serializers.StringRelatedField(default=serializers.CurrentUserDefault(), read_only=True)
    updated_by = serializers.StringRelatedField(default=serializers.CurrentUserDefault(), read_only=True)
    class Meta:
        model = Student
        fields = ['id', 'name', 'programme', 'batch', 'roll', 'created_by', 'updated_by']

Войти в полноэкранный режим

Выйти из полноэкранного режима

Администратор:

Вы можете зарегистрировать свою модель в admin.py если вы хотите добавить данные из административной панели Django:

from django.contrib import admin
from .models import Student

@admin.register(Student)
class StudentAdmin(admin.ModelAdmin):
    list_display = ['id', 'name', 'programme', 'batch', 'roll']

Войти в полноэкранный режим

Выйти из полноэкранного режима

Вид:

Теперь напишите свой view.pyи не забудьте добавить аутентификацию, так как нам приходится работать с пользователями:

from .models import Student
from .serializers import StudentModelSerializer
from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticatedOrReadOnly
from rest_framework.authentication import SessionAuthentication


class StudentModelViewSet(viewsets.ModelViewSet):
    queryset = Student.objects.all()
    serializer_class = StudentModelSerializer
    authentication_classes = [SessionAuthentication]
    permission_classes = [IsAuthenticatedOrReadOnly]

    def perform_create(self, serializer):
        serializer.save(created_by=self.request.user)

    def perform_update(self, serializer):
        serializer.save(updated_by=self.request.user)

Войти в полноэкранный режим

Выйти из полноэкранного режима

URL-адреса:

Если вы не определили URL-адреса для своих представлений, определите их в urls.py.

from django.contrib import admin
from django.urls import path, include 
from rest_framework.routers import DefaultRouter
from api.views import *  

# Create Router Object
router = DefaultRouter()

# Register View Class with Router
router.register('student', StudentModelViewSet, basename="student_")

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include(router.urls)),
    path('auth/', include('rest_framework.urls', namespace="rest_framework"))
]



Войти в полноэкранный режим

Выйти из полноэкранного режима

Сделать миграции:

Миграция необходима после изменения моделей.

бежать —

python manage.py makemigrations 
python manage.py migrate
Войти в полноэкранный режим

Выйти из полноэкранного режима

Пользователи:

Вот для чего мы работаем; для автоматического добавления вошедшего в систему пользователя в вашей системе должны быть зарегистрированы пользователи. Поэтому, если у вас нет зарегистрированных пользователей, добавьте их. Если вы используете систему Django по умолчанию, вы можете управлять пользователями из панели администратора Django.

Пришло время увидеть результаты.

Перейдите по URL-адресу в браузере:

Перейти по URL в браузере

Войти под пользователем:

Войти в систему

Добавьте новые данные:

Добавить новые данные

Посмотрите на данные, автоматически добавили зарегистрированную информацию о пользователе в created_by поле:

Посмотрите на данные, автоматически добавили зарегистрированную информацию о пользователе в поле created_by

Теперь обновите данные:

Теперь обновите данные

Посмотрите на данные, автоматически добавили зарегистрированную информацию о пользователе в updated_by поле:

Посмотрите на данные, автоматически добавили зарегистрированную информацию о пользователе в поле updated_by