feat: implement LMS core (CMS, Courses, Enrollment, Progress, Auth) (Admin + API)
Build & Push Docker Image (Backend) / build (push) Successful in 54s

This commit is contained in:
Flook
2026-05-03 09:36:47 +07:00
parent 1ec6fa68a1
commit fe67d491e2
25 changed files with 590 additions and 71 deletions
+28 -1
View File
@@ -10,6 +10,7 @@ For the full list of settings and their values, see
https://docs.djangoproject.com/en/6.0/ref/settings/
"""
import os
from datetime import timedelta
from pathlib import Path
from django.templatetags.static import static
@@ -48,6 +49,7 @@ INSTALLED_APPS = [
# Third-party Apps
'rest_framework', # สำหรับจัดการ API
'corsheaders', # สำหรับจัดการ CORS (สำคัญมากถ้ามีหน้าบ้านแยก)
"django_filters",
# LOCAL APPS
'apps.accounts',
@@ -109,9 +111,34 @@ DATABASES = {
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": (
# สำหรับ Django Admin (ยังจำเป็น)
"rest_framework.authentication.SessionAuthentication",
"rest_framework.authentication.TokenAuthentication",
# สำหรับ API ทั้งหมด
"rest_framework_simplejwt.authentication.JWTAuthentication",
),
"DEFAULT_PERMISSION_CLASSES": (
# ค่า default ต้อง login ก่อน
"rest_framework.permissions.IsAuthenticated",
),
"DEFAULT_FILTER_BACKENDS": [
"django_filters.rest_framework.DjangoFilterBackend",
],
"DEFAULT_PAGINATION_CLASS": (
"rest_framework.pagination.PageNumberPagination"
),
"PAGE_SIZE": 10,
}
SIMPLE_JWT = {
"ACCESS_TOKEN_LIFETIME": timedelta(minutes=15),
"REFRESH_TOKEN_LIFETIME": timedelta(days=7),
"AUTH_HEADER_TYPES": ("Bearer",), # กำหนด client ส่ง header แบบ Authorization: Bearer <token>
}
CORS_ALLOW_ALL_ORIGINS = True # ควรเป็น False ใน Production
+19 -23
View File
@@ -1,23 +1,19 @@
"""
URL configuration for core project.
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/6.0/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.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('apps.common.urls')),
]
from django.contrib import admin
from django.urls import path, include
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
from apps.accounts.views import MeView
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('apps.common.urls')),
# Login
path('api/auth/login/',TokenObtainPairView.as_view(), name='token_obtain_pair'),
# Refresh token
path('api/auth/refresh/',TokenRefreshView.as_view(), name='token_refresh'),
# Me
path('api/auth/me/', MeView.as_view(), name='me'),
]