Prach Pongpanich %!s(int64=2) %!d(string=hace) años
padre
commit
556f0a29fa

+ 3 - 0
app/course/models.py

5
 class Course(models.Model):
5
 class Course(models.Model):
6
     name        = models.CharField(max_length=255, blank=True, null=True)
6
     name        = models.CharField(max_length=255, blank=True, null=True)
7
     description = models.TextField(null=True)
7
     description = models.TextField(null=True)
8
+    created_at  = models.DateTimeField(auto_now_add=True,editable=False)
9
+    updated_at  = models.DateTimeField(auto_now=True,editable=False)
10
+    is_active   = models.BooleanField(default=True)
8
 
11
 

+ 2 - 1
app/course/urls.py

1
 from django.urls import path
1
 from django.urls import path
2
-from .views import index
2
+from .views import index, course_edit
3
 
3
 
4
 urlpatterns = [
4
 urlpatterns = [
5
     path('', index, name='index'),
5
     path('', index, name='index'),
6
+    path('edit', course_edit, name='course_edit'),
6
 ]
7
 ]

+ 19 - 0
app/course/views.py

1
 from django.shortcuts import render
1
 from django.shortcuts import render
2
+import requests, json
3
+from django.http import JsonResponse, HttpResponse
4
+from .models import Course
2
 
5
 
3
 # Create your views here.
6
 # Create your views here.
4
 
7
 
5
 def index(request):
8
 def index(request):
6
    return render(request, 'course/list.html')
9
    return render(request, 'course/list.html')
10
+
11
+def course_edit(request):
12
+
13
+    if request.method == 'GET':
14
+        action = request.GET.get('action', '')
15
+        if action == 'load':
16
+            data = []
17
+            return JsonResponse({'status':'ok', 'result': data})
18
+
19
+    if request.method == 'POST':
20
+        print('my post')
21
+        data = json.loads(request.body)
22
+        #SysLogs.objects.create(user_name=user_name, user_txt=user_txt, msg=msg, url = url)
23
+        #return JsonResponse({'status':'ok'})
24
+
25
+    return render(request, 'course/edit.html')

+ 21 - 0
app/node_modules/.package-lock.json

95
         "node": ">= 8"
95
         "node": ">= 8"
96
       }
96
       }
97
     },
97
     },
98
+    "node_modules/@vue/reactivity": {
99
+      "version": "3.1.5",
100
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz",
101
+      "integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==",
102
+      "dependencies": {
103
+        "@vue/shared": "3.1.5"
104
+      }
105
+    },
106
+    "node_modules/@vue/shared": {
107
+      "version": "3.1.5",
108
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz",
109
+      "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA=="
110
+    },
111
+    "node_modules/alpinejs": {
112
+      "version": "3.12.1",
113
+      "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.12.1.tgz",
114
+      "integrity": "sha512-GjEmZscHuCPv/XRbzabQLFH3I1+M3TbZqEsLDuYai/Yw+pE1IL7DK4ejRfqBSaysi4wWZ1k5IqVG2aefhWWqsQ==",
115
+      "dependencies": {
116
+        "@vue/reactivity": "~3.1.1"
117
+      }
118
+    },
98
     "node_modules/any-promise": {
119
     "node_modules/any-promise": {
99
       "version": "1.3.0",
120
       "version": "1.3.0",
100
       "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
121
       "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",

+ 22 - 0
app/package-lock.json

6
   "packages": {
6
   "packages": {
7
     "": {
7
     "": {
8
       "dependencies": {
8
       "dependencies": {
9
+        "alpinejs": "^3.12.1",
9
         "daisyui": "^2.51.6"
10
         "daisyui": "^2.51.6"
10
       },
11
       },
11
       "devDependencies": {
12
       "devDependencies": {
103
         "node": ">= 8"
104
         "node": ">= 8"
104
       }
105
       }
105
     },
106
     },
107
+    "node_modules/@vue/reactivity": {
108
+      "version": "3.1.5",
109
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz",
110
+      "integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==",
111
+      "dependencies": {
112
+        "@vue/shared": "3.1.5"
113
+      }
114
+    },
115
+    "node_modules/@vue/shared": {
116
+      "version": "3.1.5",
117
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz",
118
+      "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA=="
119
+    },
120
+    "node_modules/alpinejs": {
121
+      "version": "3.12.1",
122
+      "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.12.1.tgz",
123
+      "integrity": "sha512-GjEmZscHuCPv/XRbzabQLFH3I1+M3TbZqEsLDuYai/Yw+pE1IL7DK4ejRfqBSaysi4wWZ1k5IqVG2aefhWWqsQ==",
124
+      "dependencies": {
125
+        "@vue/reactivity": "~3.1.1"
126
+      }
127
+    },
106
     "node_modules/any-promise": {
128
     "node_modules/any-promise": {
107
       "version": "1.3.0",
129
       "version": "1.3.0",
108
       "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
130
       "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",

+ 1 - 0
app/package.json

7
     "tailwindcss": "^3.3.2"
7
     "tailwindcss": "^3.3.2"
8
   },
8
   },
9
   "dependencies": {
9
   "dependencies": {
10
+    "alpinejs": "^3.12.1",
10
     "daisyui": "^2.51.6"
11
     "daisyui": "^2.51.6"
11
   }
12
   }
12
 }
13
 }

+ 1 - 0
app/templates/base.html

13
   {% load static %}
13
   {% load static %}
14
   <link rel="stylesheet" href="{% static 'css/main.css' %}">
14
   <link rel="stylesheet" href="{% static 'css/main.css' %}">
15
   <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" />
15
   <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" />
16
+  <script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.12.1/dist/cdn.min.js"></script>
16
 </head>
17
 </head>
17
 <body>
18
 <body>
18
 <div>
19
 <div>

+ 1 - 1
app/templates/course/list.html

5
 <div class="text-xl font-semibold inline-block">title
5
 <div class="text-xl font-semibold inline-block">title
6
   <div class="inline-block float-right">
6
   <div class="inline-block float-right">
7
     <div class="inline-block float-right">
7
     <div class="inline-block float-right">
8
-    <button class="btn px-6 btn-sm normal-case btn-primary">Add New</button>
8
+    <a href="{% url 'course_edit' %}" class="btn px-6 btn-sm normal-case btn-primary">Create</a>
9
     </div>
9
     </div>
10
   </div>
10
   </div>
11
 </div>
11
 </div>

+ 1 - 0
app/tmt_learning/settings.py

42
     'django.contrib.sessions',
42
     'django.contrib.sessions',
43
     'django.contrib.messages',
43
     'django.contrib.messages',
44
     'django.contrib.staticfiles',
44
     'django.contrib.staticfiles',
45
+    'widget_tweaks',
45
     'course',
46
     'course',
46
 ]
47
 ]
47
 
48