accounts: me va login apilar togirlandi, create_user command qoshildi

This commit is contained in:
behruz
2025-12-09 22:28:58 +05:00
parent 8b832f8e15
commit e5feb76f7d
9 changed files with 89 additions and 19 deletions

View File

@@ -2,4 +2,5 @@ from .djangorestframework import *
from .simple_jwt import * from .simple_jwt import *
from .jazzmin import * from .jazzmin import *
from .cors_headers import * from .cors_headers import *
from .logs import * from .logs import *
from .swagger import *

View File

@@ -1,7 +1,7 @@
REST_FRAMEWORK = { REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [ 'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication' 'rest_framework.authentication.BasicAuthentication',
'rest_framework_simplejwt.authentication.JWTAuthentication', 'rest_framework_simplejwt.authentication.JWTAuthentication',
], ],
} }

3
config/conf/swagger.py Normal file
View File

@@ -0,0 +1,3 @@
SWAGGER_SETTINGS = {
'DEFAULT_MODEL_RENDERING': 'example'
}

View File

@@ -131,4 +131,4 @@ TENANT_MODEL = "customers.Client"
TENANT_DOMAIN_MODEL = "customers.Domain" TENANT_DOMAIN_MODEL = "customers.Domain"
import config.conf from config.conf import *

View File

@@ -0,0 +1,52 @@
# python
from getpass import getpass
# django
from django.core.management import BaseCommand
# django tenants
from django_tenants.utils import schema_context
# accounts
from core.apps.accounts.models import User
# customers
from core.apps.customers.models import Client
class Command(BaseCommand):
def handle(self, *args, **options):
client = None
username = None
while True:
schema_name = input("Schema nomini kiriting: ")
client = Client.objects.filter(schema_name=schema_name).first()
if not client:
self.stdout.write("Schema topilmadi")
else: break
with schema_context(schema_name):
while True:
username = input("username kiriting: ")
user = User.objects.filter(username=username).first()
if user:
self.stdout.write("Foydalanuvchi bu username bilan mavjud")
else:
break
first_name = input("Ism kiriting: ")
last_name = input("Familiya kiriting: ")
phone_number = input("Telefon raqam kiriting: ")
password = getpass("Parol kiriting: ")
User.objects.create_superuser(
username=username,
first_name=first_name,
last_name=last_name,
password=password,
phone_number=phone_number,
)
self.stdout.write("Foydalanuvchi qo'shildi")

View File

@@ -1,5 +1,5 @@
# rest framework # rest framework
from rest_framework import viewsets from rest_framework import viewsets, permissions
from rest_framework.decorators import action from rest_framework.decorators import action
# drf yasg # drf yasg
@@ -13,12 +13,11 @@ from core.apps.accounts.serializers.user import user as serializers
# utils # utils
from core.utils.response.mixin import ResponseMixin from core.utils.response.mixin import ResponseMixin
from core.utils.permissions.tenant_user import IsTenantUser
class UserViewSet(viewsets.GenericViewSet, ResponseMixin): class UserViewSet(viewsets.GenericViewSet, ResponseMixin):
queryset = User.objects.all() queryset = User.objects.all()
permission_classes = [IsTenantUser] permission_classes = [permissions.IsAuthenticated]
def get_serializer_class(self): def get_serializer_class(self):
match self.action: match self.action:
@@ -28,7 +27,34 @@ class UserViewSet(viewsets.GenericViewSet, ResponseMixin):
return return
case _: case _:
return serializers.UserSerializer return serializers.UserSerializer
@swagger_auto_schema(
tags=['User'],
operation_description="User malumotlarini olish uchun api",
responses={
200: openapi.Response(
description="Success",
schema=None,
examples={
"application/json": {
"status_code": 200,
"status": "success",
"message": "User ma'lumotlari",
"data": {
"id": 0,
"first_name": "string",
"last_name": "string",
"username": "string",
"phone_number": "+998951234567",
"profile_image": None or "string",
"created_at": "string",
"updated_at": "string"
}
}
}
)
}
)
@action( @action(
methods=["GET"], url_name="me", url_path="me", detail=False methods=["GET"], url_name="me", url_path="me", detail=False
) )

View File

@@ -1,12 +0,0 @@
# rest framework
from rest_framework.permissions import BasePermission
class IsTenantUser(BasePermission):
"""
Allow access only if request.tenant_user exists.
"""
def has_permission(self, request, view):
return bool(request.tenant_user)