mirror of
https://github.com/more-tech4-magnum-opus/backend.git
synced 2024-11-21 19:16:33 +03:00
added celery, channels, swagger, created base user, added auth endpoints
This commit is contained in:
parent
33562ddc1b
commit
50a6c9d39c
21
app/conf/api.py
Normal file
21
app/conf/api.py
Normal file
|
@ -0,0 +1,21 @@
|
|||
from django.urls import path, include
|
||||
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
|
||||
|
||||
urlpatterns = [
|
||||
path(
|
||||
"auth/",
|
||||
include(
|
||||
[
|
||||
path("token/", TokenObtainPairView.as_view(), name="token_obtain_pair"),
|
||||
path("refresh/", TokenRefreshView.as_view(), name="token_refresh"),
|
||||
]
|
||||
),
|
||||
),
|
||||
path(
|
||||
"user/",
|
||||
include(
|
||||
[
|
||||
]
|
||||
),
|
||||
),
|
||||
]
|
17
app/conf/celery.py
Normal file
17
app/conf/celery.py
Normal file
|
@ -0,0 +1,17 @@
|
|||
import os
|
||||
|
||||
from celery import Celery
|
||||
|
||||
# Set the default Django settings module for the 'celery' program.
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "conf.settings")
|
||||
|
||||
app = Celery("conf")
|
||||
|
||||
# Using a string here means the worker doesn't have to serialize
|
||||
# the configuration object to child processes.
|
||||
# - namespace='CELERY' means all celery-related configuration keys
|
||||
# should have a `CELERY_` prefix.
|
||||
app.config_from_object("django.conf:settings", namespace="CELERY")
|
||||
|
||||
# Load task modules from all registered Django apps.
|
||||
app.autodiscover_tasks()
|
|
@ -60,10 +60,7 @@ DJANGO_APPS = [
|
|||
"django.contrib.admin",
|
||||
"django.forms",
|
||||
]
|
||||
THIRD_PARTY_APPS = [
|
||||
"rest_framework",
|
||||
"corsheaders",
|
||||
]
|
||||
THIRD_PARTY_APPS = ["rest_framework", "corsheaders", "django_celery_beat", "drf_yasg"]
|
||||
|
||||
LOCAL_APPS = ["users"]
|
||||
# https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps
|
||||
|
|
|
@ -1,21 +1,40 @@
|
|||
"""conf URL Configuration
|
||||
|
||||
The `urlpatterns` list routes URLs to views. For more information please see:
|
||||
https://docs.djangoproject.com/en/4.1/topics/http/urls/
|
||||
Examples:
|
||||
Function views
|
||||
1. Add an import: from my_app import views
|
||||
2. Add a URL to urlpatterns: path('', views.home, name='home')
|
||||
Class-based views
|
||||
1. Add an import: from other_app.views import Home
|
||||
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
|
||||
Including another URLconf
|
||||
1. Import the include() function: from django.urls import include, path
|
||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||
"""
|
||||
from django.conf import settings
|
||||
from django.conf.urls.static import static
|
||||
from django.contrib import admin
|
||||
from django.urls import path
|
||||
from django.urls import path, include, re_path
|
||||
from drf_yasg import openapi
|
||||
from drf_yasg.views import get_schema_view
|
||||
from rest_framework.permissions import AllowAny
|
||||
|
||||
urlpatterns = [
|
||||
schema_view = get_schema_view(
|
||||
openapi.Info(
|
||||
title="API",
|
||||
default_version="v1",
|
||||
description="description",
|
||||
terms_of_service="https://akarpov.ru/about",
|
||||
contact=openapi.Contact(email="alexander.d.karpov@gmail.com"),
|
||||
license=openapi.License(name="License"),
|
||||
),
|
||||
validators=["ssv"],
|
||||
public=True,
|
||||
permission_classes=[AllowAny],
|
||||
)
|
||||
|
||||
urlpatterns = (
|
||||
[
|
||||
path("admin/", admin.site.urls),
|
||||
path("api/", include("conf.api")),
|
||||
re_path(
|
||||
r"^swagger(?P<format>\.json|\.yaml)$",
|
||||
schema_view.without_ui(cache_timeout=0),
|
||||
name="schema-json",
|
||||
),
|
||||
re_path(
|
||||
r"^swagger/$",
|
||||
schema_view.with_ui("swagger", cache_timeout=0),
|
||||
name="schema-swagger-ui",
|
||||
),
|
||||
]
|
||||
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||
+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
|
||||
)
|
||||
|
|
0
app/events/__init__.py
Normal file
0
app/events/__init__.py
Normal file
3
app/events/admin.py
Normal file
3
app/events/admin.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
6
app/events/apps.py
Normal file
6
app/events/apps.py
Normal file
|
@ -0,0 +1,6 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class EventsConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'events'
|
0
app/events/migrations/__init__.py
Normal file
0
app/events/migrations/__init__.py
Normal file
3
app/events/models.py
Normal file
3
app/events/models.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.db import models
|
||||
|
||||
# Create your models here.
|
3
app/events/tests.py
Normal file
3
app/events/tests.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
3
app/events/views.py
Normal file
3
app/events/views.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
0
app/marketplace/__init__.py
Normal file
0
app/marketplace/__init__.py
Normal file
3
app/marketplace/admin.py
Normal file
3
app/marketplace/admin.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
6
app/marketplace/apps.py
Normal file
6
app/marketplace/apps.py
Normal file
|
@ -0,0 +1,6 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class MarketplaceConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'marketplace'
|
0
app/marketplace/migrations/__init__.py
Normal file
0
app/marketplace/migrations/__init__.py
Normal file
3
app/marketplace/models.py
Normal file
3
app/marketplace/models.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.db import models
|
||||
|
||||
# Create your models here.
|
3
app/marketplace/tests.py
Normal file
3
app/marketplace/tests.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
3
app/marketplace/views.py
Normal file
3
app/marketplace/views.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
|
@ -1,9 +1,16 @@
|
|||
celery==5.2.7
|
||||
djangorestframework==3.14.0
|
||||
djangorestframework-simplejwt==5.2.1
|
||||
Django==4.1.2
|
||||
Django==4.0.8
|
||||
django-cors-headers==3.13.0
|
||||
django-environ==0.9.0
|
||||
"drf-yasg[validation]"
|
||||
|
||||
|
||||
redis==4.3.4
|
||||
psycopg2-binary==2.9.4
|
||||
|
||||
channels==3.0.5
|
||||
channels-redis==4.0.0
|
||||
|
||||
celery==5.2.7
|
||||
django-celery-beat==2.3.0
|
|
@ -1,3 +1,6 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
from users.models import User
|
||||
|
||||
admin.site.register(User)
|
||||
|
|
23
app/users/migrations/0002_user_salary_user_type.py
Normal file
23
app/users/migrations/0002_user_salary_user_type.py
Normal file
|
@ -0,0 +1,23 @@
|
|||
# Generated by Django 4.0.8 on 2022-10-07 21:20
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='salary',
|
||||
field=models.IntegerField(default=0),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='type',
|
||||
field=models.CharField(choices=[('WORKER', 'worker'), ('HR', 'human resources'), ('ADMIN', 'administrator')], default='WORKER', max_length=6),
|
||||
),
|
||||
]
|
|
@ -3,7 +3,10 @@ from django.db import models
|
|||
|
||||
|
||||
class User(AbstractUser):
|
||||
"""Base user model, to store all user info"""
|
||||
class WorkerType(models.TextChoices):
|
||||
WORKER = "WORKER", "worker"
|
||||
HR = "HR", "human resources"
|
||||
ADMIN = "ADMIN", "administrator"
|
||||
|
||||
first_name = None
|
||||
last_name = None
|
||||
|
@ -12,9 +15,21 @@ class User(AbstractUser):
|
|||
# image_cropped = models.ImageField(upload_to="cropped/", blank=True)
|
||||
|
||||
about = models.TextField(blank=True)
|
||||
type = models.CharField(
|
||||
max_length=6, choices=WorkerType.choices, default=WorkerType.WORKER
|
||||
)
|
||||
salary = models.IntegerField(default=0)
|
||||
|
||||
def __str__(self):
|
||||
return self.username
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.set_password(self.password)
|
||||
super(AbstractUser, self).save(*args, **kwargs)
|
||||
|
||||
@property
|
||||
def can_create_events(self):
|
||||
return self.type in [self.WorkerType.HR, self.WorkerType.ADMIN]
|
||||
|
||||
class Meta:
|
||||
ordering = ["-id"]
|
||||
|
|
Loading…
Reference in New Issue
Block a user