Skip to content

Commit 2ef9b90

Browse files
Merge pull request #5 from app-generator/content
add api and dynamic datatables
2 parents 2619cc9 + 439cef4 commit 2ef9b90

File tree

17 files changed

+291
-496
lines changed

17 files changed

+291
-496
lines changed

apps/api/admin.py

-3
This file was deleted.

apps/api/apps.py

-6
This file was deleted.

apps/api/forms.py

-16
This file was deleted.

apps/api/models.py

-3
This file was deleted.

apps/api/serializers.py

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from rest_framework import serializers
2+
from apps.common.models import Product
3+
4+
5+
class ProductSerializer(serializers.ModelSerializer):
6+
class Meta:
7+
model = Product
8+
fields = '__all__'

apps/api/tests.py

-3
This file was deleted.

apps/api/urls.py

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
from django.urls import path
1+
from django.urls import path, include
2+
from rest_framework.routers import DefaultRouter
3+
from apps.api.views import ProductViewSet
24

3-
from . import views
5+
router = DefaultRouter()
6+
router.register(r'product', ProductViewSet, basename='product')
47

58
urlpatterns = [
6-
path("", views.product_list, name="product_list"),
7-
path('delete-product/<int:id>/', views.delete_product, name="delete_product"),
8-
path('update-product/<int:id>/', views.update_product, name="update_product"),
9-
]
9+
path('', include(router.urls)),
10+
]

apps/api/views.py

+13-46
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,18 @@
1-
from django.http import HttpResponse
2-
from django.shortcuts import render, redirect
1+
from apps.api.serializers import ProductSerializer
32
from apps.common.models import Product
4-
from apps.api.forms import ProductForm
5-
from django.contrib.auth.decorators import login_required
3+
from rest_framework import viewsets
4+
from rest_framework import permissions
65

7-
from django.core.paginator import Paginator
86

9-
# Create your views here.
7+
class ProductPermission(permissions.BasePermission):
8+
def has_permission(self, request, view):
9+
if request.method == 'GET':
10+
return True
11+
return request.user and request.user.is_authenticated
1012

11-
def product_list(request):
12-
product_list = Product.objects.all()
13-
form = ProductForm()
1413

15-
page = request.GET.get('page', 1)
16-
paginator = Paginator(product_list, 10)
17-
products = paginator.page(page)
18-
19-
if request.method == 'POST':
20-
form = ProductForm(request.POST)
21-
if form.is_valid():
22-
return post_request_handling(request, form)
23-
24-
context = {
25-
'products': products,
26-
'form': form
27-
}
28-
return render(request, 'pages/apps/products.html', context)
29-
30-
31-
32-
@login_required(login_url='/users/signin/')
33-
def post_request_handling(request, form):
34-
form.save()
35-
return redirect(request.META.get('HTTP_REFERER'))
36-
37-
@login_required(login_url='/users/signin/')
38-
def delete_product(request, id):
39-
product = Product.objects.get(id=id)
40-
product.delete()
41-
return redirect(request.META.get('HTTP_REFERER'))
42-
43-
@login_required(login_url='/users/signin/')
44-
def update_product(request, id):
45-
product = Product.objects.get(id=id)
46-
if request.method == 'POST':
47-
product.name = request.POST.get('name')
48-
product.price = int(request.POST.get('price'))
49-
product.info = request.POST.get('info')
50-
product.save()
51-
return redirect(request.META.get('HTTP_REFERER'))
14+
class ProductViewSet(viewsets.ModelViewSet):
15+
serializer_class = ProductSerializer
16+
queryset = Product.objects.all()
17+
permission_classes = (ProductPermission, )
18+
lookup_field = 'id'

apps/tables/urls.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
from . import views
44

55
urlpatterns = [
6-
path("", views.index, name="index"),
6+
path("", views.datatables, name="datatables"),
77
]

apps/tables/views.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33

44
# Create your views here.
55

6-
def index(request):
7-
return HttpResponse("INDEX Tables")
6+
def datatables(request):
7+
return render(request, 'pages/apps/datatables.html')

core/settings.py

+24-1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@
5454
"apps.tasks",
5555

5656
"django_celery_results",
57+
58+
'django_api_gen',
59+
'rest_framework',
60+
'rest_framework.authtoken',
61+
5762
]
5863

5964
MIDDLEWARE = [
@@ -172,4 +177,22 @@
172177

173178

174179
LOGIN_REDIRECT_URL = '/'
175-
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
180+
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
181+
182+
183+
API_GENERATOR = {
184+
'product' : "apps.common.models.Product",
185+
}
186+
187+
REST_FRAMEWORK = {
188+
'DEFAULT_AUTHENTICATION_CLASSES': [
189+
'rest_framework.authentication.TokenAuthentication',
190+
'rest_framework.authentication.SessionAuthentication',
191+
],
192+
'DEFAULT_PERMISSION_CLASSES': [
193+
'rest_framework.permissions.IsAuthenticated',
194+
]
195+
}
196+
197+
# risky
198+
SESSION_COOKIE_HTTPONLY=False

requirements.txt

+3-1
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ gunicorn==21.2.0
1313
celery
1414
redis
1515
hiredis
16-
django-celery-results
16+
django-celery-results
17+
djangorestframework
18+
django-api-generator

static/dist/main.css

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

static/dist/main.css.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

templates/includes/sidebar.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,11 @@
7979
class="flex items-center p-2 text-base text-gray-900 transition duration-75 rounded-lg pl-11 group hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700">Charts</a>
8080
</li>
8181
<li>
82-
<a href="#"
82+
<a href="{% url "datatables" %}"
8383
class="flex items-center p-2 text-base text-gray-900 transition duration-75 rounded-lg pl-11 group hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700">Datatables</a>
8484
</li>
8585
<li>
86-
<a href="{% url "product_list" %}"
86+
<a href="#"
8787
class="flex items-center p-2 text-base text-gray-900 transition duration-75 rounded-lg pl-11 group hover:bg-gray-100 dark:text-gray-200 dark:hover:bg-gray-700">API</a>
8888
</li>
8989
</ul>

0 commit comments

Comments
 (0)