diff --git a/myproject/myapp/migrations/0004_usertokencount.py b/myproject/myapp/migrations/0004_usertokencount.py new file mode 100644 index 0000000000000000000000000000000000000000..607bae56268e16c1a9ef2cd2bfdda680a395a396 --- /dev/null +++ b/myproject/myapp/migrations/0004_usertokencount.py @@ -0,0 +1,24 @@ +# Generated by Django 5.0.1 on 2024-03-25 17:46 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('myapp', '0003_profile'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='UserTokenCount', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('token_count', models.IntegerField(default=0)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/myproject/myapp/models.py b/myproject/myapp/models.py index edc97afd52e944d8c8d7dc32fffdd873dc0c94a7..f6d4d5a4be0565350196ddfc818eac196dbc4ef8 100644 --- a/myproject/myapp/models.py +++ b/myproject/myapp/models.py @@ -58,14 +58,7 @@ class UserTokenCount(models.Model): def __str__(self): return f'{self.user.username}\'s token count: {self.token_count}' - -# Automatically create a UserTokenCount entry for each user on user creation -@receiver(post_save, sender=User) -def create_or_update_user_profile(sender, instance, created, **kwargs): - if created: - UserTokenCount.objects.get_or_create(user=instance) - Profile.objects.get_or_create(user=instance) - # instance.profile.save() + class Action(Enum): UPLOAD_FILE = "The user has successfully uploaded a file." diff --git a/myproject/myapp/signals.py b/myproject/myapp/signals.py index e1c9ac65ee31df37419bb984cd2e4594c3ba8e85..4e1b8411d161d969d031bcf5c88d947e1453b139 100644 --- a/myproject/myapp/signals.py +++ b/myproject/myapp/signals.py @@ -1,10 +1,11 @@ from django.db.models.signals import post_save from django.contrib.auth.models import User from django.dispatch import receiver -from .models import Profile +from .models import Profile, UserTokenCount @receiver(post_save, sender=User) def create_or_update_user_profile(sender, instance, created, **kwargs): if created: - Profile.objects.create(user=instance) - instance.profile.save() + UserTokenCount.objects.get_or_create(user=instance) + Profile.objects.get_or_create(user=instance) + instance.profile.save() \ No newline at end of file diff --git a/myproject/myapp/urls.py b/myproject/myapp/urls.py index f7c169ca586946c0e567e5743886c6cf0d40c6c3..49240b9ba18b55d017e5c0e82e7dc9739696f575 100644 --- a/myproject/myapp/urls.py +++ b/myproject/myapp/urls.py @@ -1,5 +1,5 @@ from django.urls import path -from .views import InstrumentDetectionView, index, users, maintenance, handler404, handler500, terms_conditions, privacy_policy, handling_music_file, pricing, generate_pdf, admin_table +from .views import InstrumentDetectionView, index, log_fileupload, users, maintenance, handler404, handler500, terms_conditions, privacy_policy, handling_music_file, pricing, generate_pdf, admin_table from .payments import create_payment, execute_payment, payment_cancelled, payment_success from django.contrib.auth import views as auth_views @@ -26,11 +26,10 @@ urlpatterns = [ path('instrument_detection/', InstrumentDetectionView.as_view(), name='instrument_detection'), path('password_change/', auth_views.PasswordChangeView.as_view(template_name='password_change_form.html'), name='password_change'), path('password_change/done/', auth_views.PasswordChangeDoneView.as_view(template_name='password_change_done.html'), name='password_change_done'), - # path('user_logout/', auth_views.LogoutView.as_view(next_page='index'), name='user_logout'), - path('payment/create/', create_payment, name='create_payment'), - path('payment/execute/', execute_payment, name='execute_payment'), - path('payment/cancel/', payment_cancelled, name='payment_cancelled'), - path('payment_success/', payment_success, name='success'), + + # Logging + path('log_fileupload', log_fileupload, name='log_fileupload'), + # Authentication path('login/', CustomLoginView.as_view(), name='login'), diff --git a/myproject/myapp/views.py b/myproject/myapp/views.py index 3aab0b85ae4a7ae0220e8dadf6c6656f6e5b3542..40b209f8e69fe66fa21e32fe37ccc974471ac001 100644 --- a/myproject/myapp/views.py +++ b/myproject/myapp/views.py @@ -199,54 +199,28 @@ def handler500(request, *args, **kwargs): def maintenance(request): return render(request, 'maintenance.html') -# def user_login(request): -# if request.method == 'POST': -# form = LoginForm(request.POST) - -# if form.is_valid(): -# username = form.cleaned_data.get('username') -# password = form.cleaned_data.get('password') - -# user = authenticate(request, username=username, password=password) # Passing request along with username and password - -# if user: -# login(request, user=user) # Passing request along with user -# return redirect('users') -# else: -# messages.error(request, 'Invalid username or password.') -# else: -# pass - -# else: -# form = LoginForm() -# return render(request, 'login.html', {'form': form}) - - -# def register(request): -# if request.method == 'POST': -# form = CustomRegistrationForm(request.POST) -# if form.is_valid(): -# form.save() -# return redirect('user_login') -# else: -# form = CustomRegistrationForm() - -# return render(request, 'register.html', {'form': form}) - -# def user_logout(request): -# logout(request) -# return redirect('user_login') - # Authentication class RegisterView(generic.CreateView): form_class = UserRegisterForm - success_url = reverse_lazy('login') + success_url = reverse_lazy('index') template_name = 'registration/register.html' def form_valid(self, form): response = super().form_valid(form) - Profile.objects.create(user=self.object, user_type=0) # Default user type as Basic User + user = self.object # Grab the user instance + + # Ensure the user is active; this line might be redundant if you're sure users are active by default + user.is_active = True + user.save() + + # Check if the Profile exists, and if not, create it + if not Profile.objects.filter(user=user).exists(): + Profile.objects.create(user=user, user_type=0) # Default user type as Basic User + + # Log the user in + login(self.request, user) + return response diff --git a/myproject/myproject/settings.py b/myproject/myproject/settings.py index 5bb1e5500b386eb2343bb0efe23931a689bb39ce..d1a979942ec997ca8903b0621d1714bc016774fd 100644 --- a/myproject/myproject/settings.py +++ b/myproject/myproject/settings.py @@ -173,6 +173,7 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' IMAGE_URL = 'static/src/images/' LOGIN_REDIRECT_URL = '/' +LOGOUT_REDIRECT_URL = '/' #PayPal API settings