init commit

This commit is contained in:
2025-05-06 20:44:33 +09:00
commit 91f0d54563
5567 changed files with 948185 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

View File

@@ -0,0 +1,14 @@
from django.contrib import admin
from .models import Link, LinkGroup
@admin.register(Link)
class LinkAdmin(admin.ModelAdmin):
list_display = ('title', 'url', 'owner', 'group', 'order')
list_filter = ('owner', 'group')
search_fields = ('title', 'url')
@admin.register(LinkGroup)
class LinkGroupAdmin(admin.ModelAdmin):
list_display = ('name', 'owner', 'order')
list_filter = ('owner',)
search_fields = ('name',)

View File

@@ -0,0 +1,15 @@
# api/admin.py
from django.contrib import admin
from .models import Link, LinkGroup
@admin.register(Link)
class LinkAdmin(admin.ModelAdmin):
list_display = ('title', 'url', 'owner', 'group', 'order')
list_filter = ('owner', 'group')
search_fields = ('title', 'url')
@admin.register(LinkGroup)
class LinkGroupAdmin(admin.ModelAdmin):
list_display = ('name', 'owner', 'order')
list_filter = ('owner',)
search_fields = ('name',

View File

@@ -0,0 +1,17 @@
# api/admin.py
from django.contrib import admin
from .models import Link, LinkGroup
@admin.register(Link)
class LinkAdmin(admin.ModelAdmin):
list_display = ('title', 'url', 'owner', 'group', 'order')
list_filter = ('owner', 'group')
search_fields = ('title', 'url')
@admin.register(LinkGroup)
class LinkGroupAdmin(admin.ModelAdmin):
list_display = ('name', 'owner', 'order')
list_filter = ('owner',)
search_fields = ('name',)
ordering = ('owner', 'order')
prepopulated_fields = {'slug': ('name',)}

View File

@@ -0,0 +1,16 @@
# api/admin.py
from django.contrib import admin
from .models import Link, LinkGroup
@admin.register(Link)
class LinkAdmin(admin.ModelAdmin):
list_display = ('title', 'url', 'owner', 'group', 'order')
list_filter = ('owner', 'group')
search_fields = ('title', 'url')
@admin.register(LinkGroup)
class LinkGroupAdmin(admin.ModelAdmin):
list_display = ('name', 'owner', 'order')
list_filter = ('owner',)
search_fields = ('name',)
ordering = ('owner', 'order')

View File

@@ -0,0 +1,3 @@
from django.db import models
# Create your models here.

View File

@@ -0,0 +1,22 @@
# api/models.py
from django.db import models
from django.contrib.auth.models import User
class LinkGroup(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name='groups')
name = models.CharField(max_length=100)
order = models.PositiveIntegerField(default=0)
def __str__(self):
return f"{self.owner.username} - {self.name}"
class Link(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE, related_name='links')
group = models.ForeignKey(LinkGroup, on_delete=models.SET_NULL, null=True, blank=True, related_name='links')
title = models.CharField(max_length=200)
url = models.URLField()
icon = models.URLField(blank=True, null=True)
order = models.PositiveIntegerField(default=0)
def __str__(self):
return self.title

View File

@@ -0,0 +1,35 @@
# api/models.py
from django.conf import settings
from django.db import models
class LinkGroup(models.Model):
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='link_groups' # было 'groups', теперь уникальное имя
)
name = models.CharField(max_length=100)
order = models.PositiveIntegerField(default=0)
def __str__(self):
return f"{self.owner.username} - {self.name}"
class Link(models.Model):
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='links' # оставляем 'links' — у User нет такого поля
)
group = models.ForeignKey(
LinkGroup,
on_delete=models.SET_NULL,
null=True, blank=True,
related_name='links'
)
title = models.CharField(max_length=200)
url = models.URLField()
icon = models.URLField(blank=True, null=True)
order = models.PositiveIntegerField(default=0)
def __str__(self):
return self.title

View File

@@ -0,0 +1,35 @@
# api/models.py
from django.conf import settings
from django.db import models
from django.conf import settings
class LinkGroup(models.Model):
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='link_groups' # было 'groups', теперь уникальное имя
)
name = models.CharField(max_length=100)
order = models.PositiveIntegerField(default=0)
def __str__(self):
return f"{self.owner.username} - {self.name}"
class Link(models.Model):
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='links' # оставляем 'links' — у User нет такого поля
)
group = models.ForeignKey(
LinkGroup,
on_delete=models.SET_NULL,
null=True, blank=True,
related_name='links'
)
title = models.CharField(max_length=200)
url = models.URLField()
icon = models.URLField(blank=True, null=True)
order = models.PositiveIntegerField(default=0)
def __str__(self):
return self.title

View File

@@ -0,0 +1,35 @@
# api/models.py
from django.conf import settings
from django.db import models
class LinkGroup(models.Model):
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='link_groups' # было 'groups', теперь уникальное имя
)
name = models.CharField(max_length=100)
order = models.PositiveIntegerField(default=0)
def __str__(self):
return f"{self.owner.username} - {self.name}"
class Link(models.Model):
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='links' # оставляем 'links' — у User нет такого поля
)
group = models.ForeignKey(
LinkGroup,
on_delete=models.SET_NULL,
null=True, blank=True,
related_name='links'
)
title = models.CharField(max_length=200)
url = models.URLField()
icon = models.URLField(blank=True, null=True)
order = models.PositiveIntegerField(default=0)
def __str__(self):
return self.title

View File

@@ -0,0 +1,34 @@
from django.conf import settings
from django.db import models
class LinkGroup(models.Model):
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='link_groups' # было 'groups', теперь уникальное имя
)
name = models.CharField(max_length=100)
order = models.PositiveIntegerField(default=0)
def __str__(self):
return f"{self.owner.username} - {self.name}"
class Link(models.Model):
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='links' # оставляем 'links' — у User нет такого поля
)
group = models.ForeignKey(
LinkGroup,
on_delete=models.SET_NULL,
null=True, blank=True,
related_name='links'
)
title = models.CharField(max_length=200)
url = models.URLField()
icon = models.URLField(blank=True, null=True)
order = models.PositiveIntegerField(default=0)
def __str__(self):
return self.title

View File

@@ -0,0 +1,34 @@
from django.conf import settings
from django.db import models
class LinkGroup(models.Model):
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='api_link_groups' # теперь уникально
)
name = models.CharField(max_length=100)
order = models.PositiveIntegerField(default=0)
def __str__(self):
return f"{self.owner.username} - {self.name}"
class Link(models.Model):
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='links' # оставляем 'links' — у User нет такого поля
)
group = models.ForeignKey(
LinkGroup,
on_delete=models.SET_NULL,
null=True, blank=True,
related_name='links'
)
title = models.CharField(max_length=200)
url = models.URLField()
icon = models.URLField(blank=True, null=True)
order = models.PositiveIntegerField(default=0)
def __str__(self):
return self.title

View File

@@ -0,0 +1,35 @@
from django.db import models
from django.conf import settings
class LinkGroup(models.Model):
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='link_groups'
)
name = models.CharField(max_length=100)
order = models.PositiveIntegerField(default=0)
def __str__(self):
return f"{self.owner.username} - {self.name}"
class Link(models.Model):
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='links'
)
group = models.ForeignKey(
LinkGroup,
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name='links'
)
title = models.CharField(max_length=200)
url = models.URLField()
icon = models.URLField(blank=True, null=True)
order = models.PositiveIntegerField(default=0)
def __str__(self):
return self.title

View File

@@ -0,0 +1,35 @@
from django.db import models
from django.conf import settings
class LinkGroup(models.Model):
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='api_link_groups' # уникальное имя, чтобы не конфликтовать с links app
)
name = models.CharField(max_length=100)
order = models.PositiveIntegerField(default=0)
def __str__(self):
return f"{self.owner.username} - {self.name}"
class Link(models.Model):
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='links'
)
group = models.ForeignKey(
LinkGroup,
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name='links'
)
title = models.CharField(max_length=200)
url = models.URLField()
icon = models.URLField(blank=True, null=True)
order = models.PositiveIntegerField(default=0)
def __str__(self):
return self.title

View File

@@ -0,0 +1,31 @@
from rest_framework import serializers
from django.contrib.auth.models import User
from .models import Link, LinkGroup
class RegisterSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
class Meta:
model = User
fields = ('username', 'email', 'password')
def create(self, validated_data):
user = User(
username=validated_data['username'],
email=validated_data.get('email', '')
)
user.set_password(validated_data['password'])
user.save()
return user
class LinkGroupSerializer(serializers.ModelSerializer):
class Meta:
model = LinkGroup
fields = ('id', 'name', 'order')
read_only_fields = ('id',)
class LinkSerializer(serializers.ModelSerializer):
class Meta:
model = Link
fields = ('id', 'title', 'url', 'icon', 'order', 'group')
read_only_fields = ('id', 'owner')

View File

@@ -0,0 +1,34 @@
# api/serializers.py
from rest_framework import serializers
from django.contrib.auth import get_user_model
from .models import Link, LinkGroup
User = get_user_model()
class RegisterSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
class Meta:
model = User
fields = ('username', 'email', 'password')
def create(self, validated_data):
user = User(
username=validated_data['username'],
email=validated_data.get('email', '')
)
user.set_password(validated_data['password'])
user.save()
return user
class LinkGroupSerializer(serializers.ModelSerializer):
class Meta:
model = LinkGroup
fields = ('id', 'name', 'order')
read_only_fields = ('id',)
class LinkSerializer(serializers.ModelSerializer):
class Meta:
model = Link
fields = ('id', 'title', 'url', 'icon', 'order', 'group')
read_only_fields = ('id', 'owner')

View File

@@ -0,0 +1,46 @@
# api/serializers.py
from rest_framework import serializers
from django.contrib.auth import get_user_model
from .models import Link, LinkGroup
User = get_user_model()
class RegisterSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
class Meta:
model = User
fields = ('username', 'email', 'password')
def create(self, validated_data):
user = User(
username=validated_data['username'],
email=validated_data.get('email', '')
)
user.set_password(validated_data['password'])
user.save()
return user
class LinkGroupSerializer(serializers.ModelSerializer):
class Meta:
model = LinkGroup
fields = ('id', 'name', 'order')
read_only_fields = ('id',)
class LinkSerializer(serializers.ModelSerializer):
class Meta:
model = Link
fields = ('id', 'title', 'url', 'icon', 'order', 'group')
read_only_fields = ('id', 'owner')
from django.contrib.auth import get_user_model
from rest_framework import serializers
User = get_user_model()
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
# поля, которые хотите отдавать на фронт:
fields = ['id', 'username', 'email', 'first_name', 'last_name']

View File

@@ -0,0 +1,55 @@
# api/serializers.py
from rest_framework import serializers
from django.contrib.auth import get_user_model
from .models import Link, LinkGroup
User = get_user_model()
class RegisterSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
class Meta:
model = User
fields = ('username', 'email', 'password')
def create(self, validated_data):
user = User(
username=validated_data['username'],
email=validated_data.get('email', '')
)
user.set_password(validated_data['password'])
user.save()
return user
# api/serializers.py
from rest_framework import serializers
from django.conf import settings
from .models import Link, LinkGroup
# сериализатор для ссылок
class LinkSerializer(serializers.ModelSerializer):
class Meta:
model = Link
fields = ['id', 'title', 'url', 'icon', 'order', 'group']
# сериализатор для групп со вложенными ссылками
class LinkGroupSerializer(serializers.ModelSerializer):
# related_name у вас в модели LinkGroup.owner = 'api_link_groups',
# а у модели Link.group = 'links', так что у группы obj.links — это QuerySet ссылок
links = LinkSerializer(many=True, read_only=True)
class Meta:
model = LinkGroup
fields = ['id', 'name', 'order', 'links']
from django.contrib.auth import get_user_model
from rest_framework import serializers
User = get_user_model()
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
# поля, которые хотите отдавать на фронт:
fields = ['id', 'username', 'email', 'first_name', 'last_name']

View File

@@ -0,0 +1,55 @@
# api/serializers.py
from rest_framework import serializers
from django.contrib.auth import get_user_model
from .models import Link, LinkGroup
User = get_user_model()
class RegisterSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
class Meta:
model = User
fields = ('username', 'email', 'password')
def create(self, validated_data):
user = User(
username=validated_data['username'],
email=validated_data.get('email', '')
)
user.set_password(validated_data['password'])
user.save()
return user
# api/serializers.py
from rest_framework import serializers
from django.conf import settings
from .models import Link, LinkGroup
# сериализатор для ссылок
class LinkSerializer(serializers.ModelSerializer):
class Meta:
model = Link
fields = ['id', 'title', 'url', 'icon', 'order', 'group']
# сериализатор для групп со вложенными ссылками
class LinkGroupSerializer(serializers.ModelSerializer):
# related_name у вас в модели LinkGroup.owner = 'api_link_groups',
# а у модели Link.group = 'links', так что у группы obj.links — это QuerySet ссылок
links = LinkSerializer(many=True, read_only=True)
class Meta:
model = LinkGroup
fields = ['id', 'name', 'order', 'links']
from django.contrib.auth import get_user_model
from rest_framework import serializers
User = get_user_model()
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
# поля, которые хотите отдавать на фронт:
fields = ['id', 'username', 'email', 'full_name']

View File

@@ -0,0 +1,55 @@
# api/serializers.py
from rest_framework import serializers
from django.contrib.auth import get_user_model
from .models import Link, LinkGroup
User = get_user_model()
class RegisterSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
class Meta:
model = User
fields = ('username', 'email', 'password')
def create(self, validated_data):
user = User(
username=validated_data['username'],
email=validated_data.get('email', '')
)
user.set_password(validated_data['password'])
user.save()
return user
# api/serializers.py
from rest_framework import serializers
from django.conf import settings
from .models import Link, LinkGroup
# сериализатор для ссылок
class LinkSerializer(serializers.ModelSerializer):
class Meta:
model = Link
fields = ['id', 'title', 'url', 'icon', 'order', 'group']
# сериализатор для групп со вложенными ссылками
class LinkGroupSerializer(serializers.ModelSerializer):
# related_name у вас в модели LinkGroup.owner = 'api_link_groups',
# а у модели Link.group = 'links', так что у группы obj.links — это QuerySet ссылок
links = LinkSerializer(many=True, read_only=True)
class Meta:
model = LinkGroup
fields = ['id', 'name', 'order', 'links']
from django.contrib.auth import get_user_model
from rest_framework import serializers
User = get_user_model()
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
# поля, которые хотите отдавать на фронт:
fields = ['id', 'username', 'email', 'full_name', 'bio', 'avatar', 'user_permissions']

View File

@@ -0,0 +1,55 @@
# api/serializers.py
from rest_framework import serializers
from django.contrib.auth import get_user_model
from .models import Link, LinkGroup
User = get_user_model()
class RegisterSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
class Meta:
model = User
fields = ('username', 'email', 'password')
def create(self, validated_data):
user = User(
username=validated_data['username'],
email=validated_data.get('email', '')
)
user.set_password(validated_data['password'])
user.save()
return user
# api/serializers.py
from rest_framework import serializers
from django.conf import settings
from .models import Link, LinkGroup
# сериализатор для ссылок
class LinkSerializer(serializers.ModelSerializer):
class Meta:
model = Link
fields = ['id', 'title', 'url', 'icon', 'order', 'group']
# сериализатор для групп со вложенными ссылками
class LinkGroupSerializer(serializers.ModelSerializer):
# related_name у вас в модели LinkGroup.owner = 'api_link_groups',
# а у модели Link.group = 'links', так что у группы obj.links — это QuerySet ссылок
links = LinkSerializer(many=True, read_only=True)
class Meta:
model = LinkGroup
fields = ['id', 'name', 'order', 'links']
from django.contrib.auth import get_user_model
from rest_framework import serializers
User = get_user_model()
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
# поля, которые хотите отдавать на фронт:
fields = ['id', 'username', 'email', 'full_name', 'bio', 'avatar', 'user_permissions', 'last_login', 'date_joined']

View File

@@ -0,0 +1,55 @@
# api/serializers.py
from rest_framework import serializers
from django.contrib.auth import get_user_model
from .models import Link, LinkGroup
User = get_user_model()
class RegisterSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
class Meta:
model = User
fields = ('username', 'email', 'password')
def create(self, validated_data):
user = User(
username=validated_data['username'],
email=validated_data.get('email', '')
)
user.set_password(validated_data['password'])
user.save()
return user
# api/serializers.py
from rest_framework import serializers
from django.conf import settings
from .models import Link, LinkGroup
# сериализатор для ссылок
class LinkSerializer(serializers.ModelSerializer):
class Meta:
model = Link
fields = ['id', 'title', 'url', 'icon', 'order', 'group']
# сериализатор для групп со вложенными ссылками
class LinkGroupSerializer(serializers.ModelSerializer):
# related_name у вас в модели LinkGroup.owner = 'api_link_groups',
# а у модели Link.group = 'links', так что у группы obj.links — это QuerySet ссылок
links = LinkSerializer(many=True, read_only=True)
class Meta:
model = LinkGroup
fields = ['id', 'name', 'order', 'links']
from django.contrib.auth import get_user_model
from rest_framework import serializers
User = get_user_model()
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
# поля, которые хотите отдавать на фронт:
fields = ['id', 'username', 'email', 'full_name', 'bio', 'avatar', 'last_login', 'date_joined']

View File

@@ -0,0 +1,18 @@
# api/urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import (
RegisterView, LoginView, LinkViewSet,
LinkGroupViewSet, UserLinksListView
)
router = DefaultRouter()
router.register(r'links', LinkViewSet, basename='links')
router.register(r'groups', LinkGroupViewSet, basename='groups')
urlpatterns = [
path('auth/register/', RegisterView.as_view(), name='auth-register'),
path('auth/login/', LoginView.as_view(), name='auth-login'),
path('users/<str:username>/links/', UserLinksListView.as_view(), name='user-links'),
path('', include(router.urls)),
]

View File

@@ -0,0 +1,15 @@
# api/urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import RegisterView, LoginView, LinkViewSet, LinkGroupViewSet, UserLinksListView
router = DefaultRouter()
router.register(r'links', LinkViewSet, basename='links')
router.register(r'groups', LinkGroupViewSet, basename='groups')
urlpatterns = [
path('auth/register/', RegisterView.as_view(), name='auth-register'),
path('auth/login/', LoginView.as_view(), name='auth-login'),
path('users/<str:username>/links/', UserLinksListView.as_view(), name='user-links'),
path('', include(router.urls)),
]

View File

@@ -0,0 +1,22 @@
from django.urls import path
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
from .views import (
RegisterView,
UserProfileView,
UserLinksView,
LinkViewSet,
LinkGroupViewSet
)
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register('links', LinkViewSet, basename='link')
router.register('groups', LinkGroupViewSet, basename='group')
urlpatterns = [
path('auth/register/', RegisterView.as_view(), name='auth_register'),
path('auth/login/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('auth/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path('auth/user/', UserProfileView.as_view(), name='user-profile'), # ← новый
path('users/<str:username>/links/', UserLinksView.as_view(), name='user-links'),
] + router.urls

View File

@@ -0,0 +1,21 @@
from django.urls import path
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
from .views import (
RegisterView,
UserProfileView,
LinkViewSet,
LinkGroupViewSet
)
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register('links', LinkViewSet, basename='link')
router.register('groups', LinkGroupViewSet, basename='group')
urlpatterns = [
path('auth/register/', RegisterView.as_view(), name='auth_register'),
path('auth/login/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('auth/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path('auth/user/', UserProfileView.as_view(), name='user-profile'), # ← новый
path('users/<str:username>/links/', UserLinksView.as_view(), name='user-links'),
] + router.urls

View File

@@ -0,0 +1,20 @@
from django.urls import path
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
from .views import (
RegisterView,
UserProfileView,
LinkViewSet,
LinkGroupViewSet
)
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register('links', LinkViewSet, basename='link')
router.register('groups', LinkGroupViewSet, basename='group')
urlpatterns = [
path('auth/register/', RegisterView.as_view(), name='auth_register'),
path('auth/login/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('auth/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path('auth/user/', UserProfileView.as_view(), name='user-profile'), # ← новый
] + router.urls

View File

@@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.

View File

@@ -0,0 +1,62 @@
from rest_framework import generics, viewsets, permissions
from django.contrib.auth.models import User
from rest_framework_simplejwt.views import TokenObtainPairView
from .serializers import (
RegisterSerializer, LinkSerializer, LinkGroupSerializer
)
from .models import Link, LinkGroup
class RegisterView(generics.CreateAPIView):
queryset = User.objects.all()
permission_classes = (permissions.AllowAny,)
serializer_class = RegisterSerializer
class LoginView(TokenObtainPairView):
permission_classes = (permissions.AllowAny,)
class LinkGroupViewSet(viewsets.ModelViewSet):
serializer_class = LinkGroupSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
return LinkGroup.objects.filter(owner=self.request.user).order_by('order')
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class LinkViewSet(viewsets.ModelViewSet):
serializer_class = LinkSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
return Link.objects.filter(owner=self.request.user).order_by('order')
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class UserLinksListView(generics.ListAPIView):
serializer_class = LinkSerializer
permission_classes = (permissions.AllowAny,)
def get_queryset(self):
username = self.kwargs['username']
return Link.objects.filter(owner__username=username).order_by('order')
# api/urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import (
RegisterView, LoginView, LinkViewSet,
LinkGroupViewSet, UserLinksListView
)
router = DefaultRouter()
router.register(r'links', LinkViewSet, basename='links')
router.register(r'groups', LinkGroupViewSet, basename='groups')
urlpatterns = [
path('auth/register/', RegisterView.as_view(), name='auth-register'),
path('auth/login/', LoginView.as_view(), name='auth-login'),
path('users/<str:username>/links/', UserLinksListView.as_view(), name='user-links'),
path('', include(router.urls)),
]

View File

@@ -0,0 +1,44 @@
# api/views.py
from rest_framework import generics, viewsets, permissions
from django.contrib.auth import get_user_model
from rest_framework_simplejwt.views import TokenObtainPairView
from .serializers import RegisterSerializer, LinkSerializer, LinkGroupSerializer
from .models import Link, LinkGroup
User = get_user_model()
class RegisterView(generics.CreateAPIView):
queryset = User.objects.all()
permission_classes = (permissions.AllowAny,)
serializer_class = RegisterSerializer
class LoginView(TokenObtainPairView):
permission_classes = (permissions.AllowAny,)
class LinkGroupViewSet(viewsets.ModelViewSet):
serializer_class = LinkGroupSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
return LinkGroup.objects.filter(owner=self.request.user).order_by('order')
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class LinkViewSet(viewsets.ModelViewSet):
serializer_class = LinkSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
return Link.objects.filter(owner=self.request.user).order_by('order')
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class UserLinksListView(generics.ListAPIView):
serializer_class = LinkSerializer
permission_classes = (permissions.AllowAny,)
def get_queryset(self):
username = self.kwargs['username']
return Link.objects.filter(owner__username=username).order_by('order')

View File

@@ -0,0 +1,59 @@
# api/views.py
from rest_framework import generics, viewsets, permissions
from django.contrib.auth import get_user_model
from rest_framework_simplejwt.views import TokenObtainPairView
from .serializers import RegisterSerializer, LinkSerializer, LinkGroupSerializer
from .models import Link, LinkGroup
User = get_user_model()
class RegisterView(generics.CreateAPIView):
queryset = User.objects.all()
permission_classes = (permissions.AllowAny,)
serializer_class = RegisterSerializer
class LoginView(TokenObtainPairView):
permission_classes = (permissions.AllowAny,)
class LinkGroupViewSet(viewsets.ModelViewSet):
serializer_class = LinkGroupSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
return LinkGroup.objects.filter(owner=self.request.user).order_by('order')
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class LinkViewSet(viewsets.ModelViewSet):
serializer_class = LinkSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
return Link.objects.filter(owner=self.request.user).order_by('order')
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class UserLinksListView(generics.ListAPIView):
serializer_class = LinkSerializer
permission_classes = (permissions.AllowAny,)
def get_queryset(self):
username = self.kwargs['username']
return Link.objects.filter(owner__username=username).order_by('order')
from .serializers import UserSerializer # нужно завести сериализатор для пользователя
User = get_user_model()
class UserProfileView(generics.RetrieveAPIView):
"""
Возвращает данные авторизованного пользователя.
GET /api/auth/user/
"""
serializer_class = UserSerializer
permission_classes = [permissions.IsAuthenticated]
def get_object(self):
return self.request.user

View File

@@ -0,0 +1,60 @@
# api/views.py
from rest_framework import generics, viewsets, permissions
from django.contrib.auth import get_user_model
from rest_framework_simplejwt.views import TokenObtainPairView
from .serializers import RegisterSerializer, LinkSerializer, LinkGroupSerializer
from .models import Link, LinkGroup
User = get_user_model()
class RegisterView(generics.CreateAPIView):
queryset = User.objects.all()
permission_classes = (permissions.AllowAny,)
serializer_class = RegisterSerializer
class LoginView(TokenObtainPairView):
permission_classes = (permissions.AllowAny,)
class LinkGroupViewSet(viewsets.ModelViewSet):
serializer_class = LinkGroupSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
return LinkGroup.objects.filter(owner=self.request.user).order_by('order')
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class LinkViewSet(viewsets.ModelViewSet):
serializer_class = LinkSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
return Link.objects.filter(owner=self.request.user).order_by('order')
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class UserLinksListView(generics.ListAPIView):
serializer_class = LinkSerializer
permission_classes = (permissions.AllowAny,)
def get_queryset(self):
username = self.kwargs['username']
return Link.objects.filter(owner__username=username).order_by('order')
from .serializers import UserSerializer # нужно завести сериализатор для пользователя
User = get_user_model()
class UserProfileView(generics.RetrieveAPIView):
"""
Возвращает данные авторизованного пользователя.
GET /api/auth/user/
"""
serializer_class = UserSerializer
permission_classes = [permissions.IsAuthenticated]
def get_object(self):
return self.request.user

View File

@@ -0,0 +1,59 @@
# api/views.py
from rest_framework import generics, viewsets, permissions
from django.contrib.auth import get_user_model
from rest_framework_simplejwt.views import TokenObtainPairView
from .serializers import RegisterSerializer, LinkSerializer, LinkGroupSerializer
from .models import Link, LinkGroup
User = get_user_model()
class RegisterView(generics.CreateAPIView):
queryset = User.objects.all()
permission_classes = (permissions.AllowAny,)
serializer_class = RegisterSerializer
class LoginView(TokenObtainPairView):
permission_classes = (permissions.AllowAny,)
class LinkGroupViewSet(viewsets.ModelViewSet):
queryset = LinkGroup.objects.all()
serializer_class = LinkGroupSerializer
permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
# возвращаем только группы текущего пользователя
return self.queryset.filter(owner=self.request.user).order_by('order')
class LinkViewSet(viewsets.ModelViewSet):
serializer_class = LinkSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
return Link.objects.filter(owner=self.request.user).order_by('order')
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
class UserLinksListView(generics.ListAPIView):
serializer_class = LinkSerializer
permission_classes = (permissions.AllowAny,)
def get_queryset(self):
username = self.kwargs['username']
return Link.objects.filter(owner__username=username).order_by('order')
from .serializers import UserSerializer # нужно завести сериализатор для пользователя
User = get_user_model()
class UserProfileView(generics.RetrieveAPIView):
"""
Возвращает данные авторизованного пользователя.
GET /api/auth/user/
"""
serializer_class = UserSerializer
permission_classes = [permissions.IsAuthenticated]
def get_object(self):
return self.request.user