Skip to content

Commit 048a773

Browse files
Merge pull request #12 from app-generator/enh-v1
Enh v1
2 parents b3764d7 + 7d2acdf commit 048a773

File tree

18 files changed

+1120
-192
lines changed

18 files changed

+1120
-192
lines changed

apps/charts/views.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,8 @@
44
# Create your views here.
55

66
def index(request):
7-
return render(request, 'pages/apps/charts.html')
7+
context = {
8+
'segment' : 'charts',
9+
'parent' : 'apps',
10+
}
11+
return render(request, 'pages/apps/charts.html', context)

apps/tables/forms.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from django import forms
2+
from apps.common.models import Product
3+
4+
5+
6+
class ProductForm(forms.ModelForm):
7+
class Meta:
8+
model = Product
9+
fields = '__all__'
10+
11+
12+
def __init__(self, *args, **kwargs):
13+
super(ProductForm, self).__init__(*args, **kwargs)
14+
15+
for field_name, field in self.fields.items():
16+
self.fields[field_name].widget.attrs['placeholder'] = field.label
17+
self.fields[field_name].widget.attrs['class'] = 'bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-primary-600 focus:border-primary-600 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-primary-500 dark:focus:border-primary-500'
18+
self.fields[field_name].widget.attrs['required'] = False

apps/tables/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,6 @@
44

55
urlpatterns = [
66
path("", views.datatables, name="datatables"),
7+
path('delete-product/<int:id>/', views.delete_product, name="delete_product"),
8+
path('update-product/<int:id>/', views.update_product, name="update_product"),
79
]

apps/tables/utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
def product_filter(request):
2+
filter_string = {}
3+
filter_mappings = {
4+
'search': 'name__icontains'
5+
}
6+
for key in request.GET:
7+
if request.GET.get(key) and key != 'page':
8+
filter_string[filter_mappings[key]] = request.GET.get(key)
9+
10+
return filter_string

apps/tables/views.py

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,56 @@
11
from django.http import HttpResponse
2-
from django.shortcuts import render
2+
from django.shortcuts import render, redirect
3+
from apps.tables.forms import ProductForm
4+
from apps.common.models import Product
5+
from django.core.paginator import Paginator
6+
from django.contrib.auth.decorators import login_required
7+
from apps.tables.utils import product_filter
38

49
# Create your views here.
510

611
def datatables(request):
7-
return render(request, 'pages/apps/datatables.html')
12+
filters = product_filter(request)
13+
product_list = Product.objects.filter(**filters)
14+
form = ProductForm()
15+
16+
page = request.GET.get('page', 1)
17+
paginator = Paginator(product_list, 5)
18+
products = paginator.page(page)
19+
20+
if request.method == 'POST':
21+
form = ProductForm(request.POST)
22+
if form.is_valid():
23+
return post_request_handling(request, form)
24+
25+
context = {
26+
'segment' : 'datatables',
27+
'parent' : 'apps',
28+
'form' : form,
29+
'products' : products
30+
}
31+
32+
return render(request, 'pages/apps/datatables.html', context)
33+
34+
35+
36+
@login_required(login_url='/users/signin/')
37+
def post_request_handling(request, form):
38+
form.save()
39+
return redirect(request.META.get('HTTP_REFERER'))
40+
41+
@login_required(login_url='/users/signin/')
42+
def delete_product(request, id):
43+
product = Product.objects.get(id=id)
44+
product.delete()
45+
return redirect(request.META.get('HTTP_REFERER'))
46+
47+
48+
@login_required(login_url='/users/signin/')
49+
def update_product(request, id):
50+
product = Product.objects.get(id=id)
51+
if request.method == 'POST':
52+
product.name = request.POST.get('name')
53+
product.price = int(request.POST.get('price'))
54+
product.info = request.POST.get('info')
55+
product.save()
56+
return redirect(request.META.get('HTTP_REFERER'))

apps/tasks/views.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ def tasks(request):
3333
'cfgError' : ErrInfo,
3434
'tasks' : get_celery_all_tasks(),
3535
'scripts' : scripts,
36-
'segment' : 'tasks'
36+
'segment' : 'tasks',
37+
'parent' : 'apps',
3738
}
3839

3940
# django_celery_results_task_result

apps/users/forms.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,12 @@ class UserPasswordChangeForm(PasswordChangeForm):
7272
class ProfileForm(forms.ModelForm):
7373
class Meta:
7474
model = Profile
75-
# fields = ('full_name', 'country', 'city', '' 'address', 'phone', 'avatar', )
76-
exclude = ('user', 'role',)
75+
exclude = ('user', 'role', 'avatar',)
7776

7877
def __init__(self, *args, **kwargs):
7978
super(ProfileForm, self).__init__(*args, **kwargs)
8079

8180
for field_name, field in self.fields.items():
8281
self.fields[field_name].widget.attrs['placeholder'] = field.label
8382
self.fields[field_name].widget.attrs['class'] = 'shadow-sm bg-gray-50 border border-gray-300 text-gray-900 sm:text-sm rounded-lg focus:ring-primary-500 focus:border-primary-500 block w-full p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-primary-500 dark:focus:border-primary-500'
84-
self.fields[field_name].widget.attrs['required'] = False
85-
86-
self.fields['avatar'].widget.attrs['class'] = "block w-full text-sm text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50 dark:text-gray-400 focus:outline-none dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400"
83+
self.fields[field_name].widget.attrs['required'] = False

apps/users/urls.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
path('signin/', views.SignInView.as_view(), name="signin"),
99
path('signup/', views.SignUpView.as_view(), name="signup"),
1010
path('signout/', views.signout_view, name="signout"),
11-
path('password-change/', views.UserPasswordChangeView.as_view(), name='password_change'),
12-
path('password-change-done/', auth_views.PasswordChangeDoneView.as_view(
13-
template_name='authentication/password-change-done.html'
14-
), name="password_change_done"),
11+
# path('password-change/', views.UserPasswordChangeView.as_view(), name='password_change'),
12+
# path('password-change-done/', auth_views.PasswordChangeDoneView.as_view(
13+
# template_name='authentication/password-change-done.html'
14+
# ), name="password_change_done"),
1515
path('password-reset/', views.UserPasswordResetView.as_view(), name="password_reset"),
1616
path('password-reset-confirm/<uidb64>/<token>/',
1717
views.UserPasswrodResetConfirmView.as_view(), name="password_reset_confirm"
@@ -24,4 +24,11 @@
2424
), name='password_reset_complete'),
2525

2626
path('profile/', views.profile, name='profile'),
27+
path('upload-avatar/', views.upload_avatar, name='upload_avatar'),
28+
path('change-password/', views.change_password, name='change_password'),
29+
30+
path('user-list/', views.user_list, name='user_list'),
31+
path('delete-user/<int:id>/', views.delete_user, name="delete_user"),
32+
path('update-user/<int:id>/', views.update_user, name="update_user"),
33+
path('user-change-password/<int:id>/', views.user_change_password, name="user_change_password"),
2734
]

apps/users/utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
def user_filter(request):
2+
filter_string = {}
3+
filter_mappings = {
4+
'search': 'username__icontains'
5+
}
6+
for key in request.GET:
7+
if request.GET.get(key) and key != 'page':
8+
filter_string[filter_mappings[key]] = request.GET.get(key)
9+
10+
return filter_string

apps/users/views.py

Lines changed: 87 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
from apps.users.forms import SigninForm, SignupForm, UserPasswordChangeForm, UserSetPasswordForm, UserPasswordResetForm, ProfileForm
88
from django.contrib.auth import logout
99
from django.urls import reverse
10+
from django.contrib.auth.decorators import login_required
11+
from django.contrib.auth.hashers import check_password
12+
from django.contrib import messages
13+
from django.contrib.auth.models import User
14+
from django.core.paginator import Paginator
15+
from apps.users.utils import user_filter
1016

1117
# Create your views here.
1218

@@ -48,17 +54,96 @@ def signout_view(request):
4854
return redirect(reverse('signin'))
4955

5056

57+
@login_required(login_url='/users/signin/')
5158
def profile(request):
5259
profile = get_object_or_404(Profile, user=request.user)
5360
if request.method == 'POST':
54-
form = ProfileForm(request.POST, request.FILES, instance=profile)
61+
form = ProfileForm(request.POST, instance=profile)
5562

5663
if form.is_valid():
5764
form.save()
65+
messages.success(request, 'Profile updated successfully')
5866
else:
5967
form = ProfileForm(instance=profile)
6068

6169
context = {
6270
'form': form,
71+
'segment': 'profile',
6372
}
64-
return render(request, 'pages/dashboard/profile.html', context)
73+
return render(request, 'pages/dashboard/profile.html', context)
74+
75+
76+
def upload_avatar(request):
77+
profile = get_object_or_404(Profile, user=request.user)
78+
if request.method == 'POST':
79+
profile.avatar = request.FILES.get('avatar')
80+
profile.save()
81+
messages.success(request, 'Avatar uploaded successfully')
82+
return redirect(request.META.get('HTTP_REFERER'))
83+
84+
85+
def change_password(request):
86+
user = request.user
87+
if request.method == 'POST':
88+
if check_password(request.POST.get('current_password'), user.password):
89+
user.set_password(request.POST.get('new_password'))
90+
user.save()
91+
messages.success(request, 'Password changed successfully')
92+
else:
93+
messages.error(request, "Password doesn't match!")
94+
return redirect(request.META.get('HTTP_REFERER'))
95+
96+
97+
98+
def user_list(request):
99+
filters = user_filter(request)
100+
user_list = User.objects.filter(**filters)
101+
form = SignupForm()
102+
103+
page = request.GET.get('page', 1)
104+
paginator = Paginator(user_list, 5)
105+
users = paginator.page(page)
106+
107+
if request.method == 'POST':
108+
form = SignupForm(request.POST)
109+
if form.is_valid():
110+
return post_request_handling(request, form)
111+
112+
context = {
113+
'users': users,
114+
'form': form,
115+
}
116+
return render(request, 'pages/apps/users.html', context)
117+
118+
119+
@login_required(login_url='/users/signin/')
120+
def post_request_handling(request, form):
121+
form.save()
122+
return redirect(request.META.get('HTTP_REFERER'))
123+
124+
@login_required(login_url='/users/signin/')
125+
def delete_user(request, id):
126+
user = User.objects.get(id=id)
127+
user.delete()
128+
return redirect(request.META.get('HTTP_REFERER'))
129+
130+
131+
@login_required(login_url='/users/signin/')
132+
def update_user(request, id):
133+
user = User.objects.get(id=id)
134+
if request.method == 'POST':
135+
user.username = request.POST.get('username')
136+
user.first_name = request.POST.get('first_name')
137+
user.last_name = request.POST.get('last_name')
138+
user.email = request.POST.get('email')
139+
user.save()
140+
return redirect(request.META.get('HTTP_REFERER'))
141+
142+
143+
@login_required(login_url='/users/signin/')
144+
def user_change_password(request, id):
145+
user = User.objects.get(id=id)
146+
if request.method == 'POST':
147+
user.set_password(request.POST.get('password'))
148+
user.save()
149+
return redirect(request.META.get('HTTP_REFERER'))

0 commit comments

Comments
 (0)