Диспетчер классов с Django и React

Небольшой проект для вашего портфолио! Часть 1

Итак, недавно один из моих друзей начал делать портфолио программистов (для fullstack-разработчика). Поэтому я подумал, что помогу ему и другим людям в создании их портфолио.

Ниже приведен диспетчер классов (в основном школьная система, приложение, в котором учителя могут публиковать тесты и оценки учеников, а ученики могут отправлять тесты, общаться с другими одноклассниками, участвовать в видеозвонках и т. д.), созданный с помощью React (JavaScript) для внешний интерфейс и Django (Python) для внутреннего интерфейса.

Отказ от ответственности, это не учебник для начинающих, большинство вещей не будет объяснено, во-первых, потому что это займет уйму времени, а во-вторых, я исключу тот факт, что вы уже знаете большинство основ, единственное, что я объясню, это более продвинутые части.

Во-вторых, так как это довольно большой проект, он будет разделен на разные части :) Это Getting Started часть :)

В этом уроке мы будем использовать node.js, yarn, Python 3.10.5( and Django), поэтому убедитесь, что вы их загрузили. После того, как все будет загружено, откройте папку, в которой вы хотите, чтобы все было. Для меня это будет Class Manager/ Все будет происходить внутри этой папки.

Начнем с Джанго. Откройте cmd на Class Manager/ и выполните следующие команды:

Class Manager> django-admin startproject backend
Class Manager> cd backend
Class Manager\\backend> python manage.py startapp Auth
Class Manager\\backend> python manage.py startapp Class
Class Manager\\backend> pip install djangorestframework channels channels-redis django-cors-headers

Теперь давайте настроим React. Выполните следующие команды:

Поскольку мы здесь, есть пара вещей, которые мы должны изменить в frontend/src. Сделайте следующее:

Delete App.css
Delete App.test.js
Delete logo.svg
Delete setupTests.js
Add a /components folder inside /src 
Add a /redux folder inside /src

Итак, наша структура папок должна быть:

/Class Manager
|
|-- /backend
    |
    |--- /Auth
    |--- /backend
    |--- /Class
|-- /frontend
    |
    |--- /node_modules
    |--- /public
    |--- /src
        |
        |--- componets
	|--- redux
    |
    |--- package.json
    |--- package-lock.json

С этого момента важно, чтобы у вас было открыто 2 cmd’s (если вы хотите быть более эффективным). Один для Class Manager/backend и один для Class Manager/frontend.

Теперь давайте просто настроим наше приложение и на этом закончим! В backend/settings.py обновлении INSTALLED_APPS:

INSTALLED_APPS = [
    # ...
	
    'rest_framework',
    'rest_framework.authtoken',
    'django_filters',  
    'corsheaders',
    'channels',
    'Auth',
    'Class',
]

И чуть ниже INSTALLED_APPS добавьте:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication', # We will be using auth token for authentication : )
    ],
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.MultiPartParser', # We will need to parse images later : )
    ],
    'DEFAULT_FILTER_BACKENDS': [
        'django_filters.rest_framework.DjangoFilterBackend' # We will manage filtering with FilterBackend : )
    ],
}

И обновите MIDDLEWARE вот так:

MIDDLEWARE = [
    # ...
    'corsheaders.middleware.CorsMiddleware', # Initialize CORS
    'csp.middleware.CSPMiddleware'
]

И, наконец, внизу settings.py добавьте:

# Setting up media files( images, .txt, etc.)
STATIC_URL          =   'static/'
DEFAULT_AUTO_FIELD  =   'django.db.models.BigAutoField'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
ASGI_APPLICATION = "backend.routing.application"
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels.layers.InMemoryChannelLayer"
    }
}
CSRF_COOKIE_SECURE                  =      True
SESSION_COOKIE_SECURE               =      True
SECURE_HSTS_SECONDS                 =      0
SECURE_HSTS_INCLUDE_SUBDOMAINS      =      True
SECURE_HSTS_PRELOAD                 =      True
CSP_DEFAULT_SRC                     =      ("'self'",)
CSP_STYLE_SRC                       =      ("'self'",)
CSP_SCRIPT_SRC                      =      ("'self'",)
CSP_IMG_SRC                         =      ("'self'",)
CSP_FONT_SRC                        =      ("'self'",)
CORS_ORIGIN_WHITELIST = [
    '<https://localhost:3000>',
]

Теперь перейдите к backend/urls.py и обновите его:

from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
    path("", include("Auth.urls")),
    path("", include("Class.urls"))
]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Мы закончили с python code (для этого урока). Теперь идите к frontend/src/App.js.

export default function App() {
  return (
    <div className="App">
      <h1>Hello World!</h1>
    </div>
  );
}

Это пока :). Я знаю, что нам не нужно было запускать какой-либо код, но это только для этого руководства, поскольку оно просто настраивало все! Ждите следующего урока :)