Brak opisu

views.py 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. # views.py
  2. from django.contrib.auth import authenticate, login, logout
  3. from django.shortcuts import render, redirect
  4. from .forms import CustomLoginForm, CustomUserCreationForm, UserProfileForm, UserCustomForm
  5. from .models import UserProfile
  6. from .filters import UserFilter
  7. from django.contrib.auth.decorators import login_required
  8. from django.contrib import messages
  9. from core.utils import ConfigurableCRUDView
  10. from django.contrib.auth.models import User
  11. from django.db.models import F
  12. from types import SimpleNamespace
  13. def login_view(request):
  14. if request.method == "POST":
  15. form = CustomLoginForm(data=request.POST)
  16. if form.is_valid():
  17. user = form.get_user()
  18. login(request, user)
  19. return redirect('dashboard:index') # Redirect to your dashboard
  20. else:
  21. form = CustomLoginForm()
  22. return render(request, 'auth/login.html', {'form': form, 'hide_sidebar': True})
  23. def register_view(request):
  24. if request.method == "POST":
  25. form = CustomUserCreationForm(request.POST)
  26. if form.is_valid():
  27. user = form.save()
  28. login(request, user) # Log the user in after creation
  29. return redirect('dashboard:index') # Redirect to your dashboard
  30. else:
  31. form = CustomUserCreationForm()
  32. return render(request, 'auth/register.html', {'form': form, 'hide_sidebar': True})
  33. def logout_view(request):
  34. logout(request) # Logs out the user
  35. return redirect('sysadmin:login') # Redirect to the login page after logout
  36. @login_required
  37. def profile_view(request):
  38. try:
  39. # Get the profile for the current user
  40. profile = request.user.profile
  41. except UserProfile.DoesNotExist:
  42. # Create a profile if it doesn't exist
  43. profile = UserProfile.objects.create(user=request.user)
  44. if request.method == "POST":
  45. form = UserProfileForm(request.POST, request.FILES, instance=profile)
  46. user = request.user
  47. user.first_name = request.POST.get('first_name', user.first_name)
  48. user.last_name = request.POST.get('last_name', user.last_name)
  49. if form.is_valid():
  50. form.save()
  51. user.save()
  52. messages.success(request, "Profile Updated")
  53. return redirect('sysadmin:profile') # Redirect to the profile page after saving
  54. else:
  55. messages.error(request, form.errors)
  56. else:
  57. form = UserProfileForm(instance=profile)
  58. return render(request, 'sysadmin/profile.html', {'form': form})
  59. class UserCRUDView(ConfigurableCRUDView):
  60. model = User
  61. list_template_name = 'legacy/datacrud_list.html'
  62. detail_template_name = 'legacy/datacrud_detail.html'
  63. form_template_name = 'sysadmin/user_form.html'
  64. confirm_delete_template_name = 'legacy/datacrud_confirm_delete.html'
  65. filterset_class = UserFilter
  66. page_title = "Users"
  67. # URL name mappings
  68. list_url_name = 'sysadmin:users-list'
  69. create_url_name = 'sysadmin:users-create'
  70. update_url_name = 'sysadmin:users-update'
  71. delete_url_name = 'sysadmin:users-delete'
  72. # excludes = ["splitdata"]
  73. config_fields = ("id", "username", "is_active", "is_staff", "is_superuser", "last_login")
  74. config_field_orders = ["id",] # Display these fields first
  75. form_class = UserCustomForm
  76. config_edit_fields = None
  77. ordering = ["-id"]
  78. def get_list_view(self):
  79. ViewClass = super().get_list_view()
  80. outer = self
  81. class UserListView(ViewClass):
  82. def get_queryset(self):
  83. qs = super().get_queryset()
  84. return qs.select_related('profile').annotate(
  85. qa2_default=F('profile__qa2_default')
  86. )
  87. def get_context_data(self, **kwargs):
  88. context = super().get_context_data(**kwargs)
  89. qa2_field = SimpleNamespace(name='qa2_default', verbose_name='QA.2 Default')
  90. fields = list(context['fields'])
  91. idx = next((i for i, f in enumerate(fields) if f.name == 'is_superuser'), len(fields) - 1)
  92. fields.insert(idx + 1, qa2_field)
  93. context['fields'] = fields
  94. return context
  95. return UserListView