diff --git a/accounts/forms.py b/accounts/forms.py new file mode 100644 index 0000000..c8caaa8 --- /dev/null +++ b/accounts/forms.py @@ -0,0 +1,12 @@ +from django.contrib.auth.forms import UserCreationForm, UserChangeForm +from .models import CustomUser + +class CustomUserCreationForm(UserCreationForm): + class Meta: + model = CustomUser + fields = ('username', 'email', 'bio', 'profile_picture') + +class CustomUserChangeForm(UserChangeForm): + class Meta: + model = CustomUser + fields = ('username', 'email', 'bio', 'profile_picture') diff --git a/accounts/urls.py b/accounts/urls.py index f5f739d..5cf8d79 100644 --- a/accounts/urls.py +++ b/accounts/urls.py @@ -1,18 +1,14 @@ -# accounts/urls.py -from django.urls import path, include -from rest_framework.routers import DefaultRouter -from .views import UserViewSet, follow_user, unfollow_user +from django.urls import path from . import views -router = DefaultRouter() -router.register(r'users', UserViewSet) - urlpatterns = [ - path('', include(router.urls)), - path('follow//', follow_user, name='follow-user'), - path('unfollow//', unfollow_user, name='unfollow-user'), - path('users/', views.UserListView.as_view(), name='user-list'), - path('users//', views.UserDetailView.as_view(), name='user-detail'), - path('users/create/', views.UserCreateView.as_view(), name='user-create'), - path('users/update//', views.UserUpdateView.as_view(), name='user-update'), + path('', views.home, name='home'), + path('signup/', views.signup, name='signup'), + path('login/', views.login_view, name='login'), + path('logout/', views.logout_view, name='logout'), + path('profile//', views.user_profile, name='user-profile'), + path('profile//update/', views.user_update, name='user-update'), + path('profile//delete/', views.user_delete, name='user-delete'), + path('follow//', views.follow_user, name='follow-user'), + path('unfollow//', views.unfollow_user, name='unfollow-user'), ] diff --git a/accounts/views.py b/accounts/views.py index 2c36d76..159dc8b 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -6,11 +6,11 @@ from rest_framework.response import Response from rest_framework import status from django.views.generic import ListView, DetailView, CreateView, UpdateView -from django.contrib.auth import login, authenticate +from django.contrib.auth import login, authenticate, logout from django.shortcuts import render, redirect from django.shortcuts import render, get_object_or_404 from .models import CustomUser, Follow, Post - +from .forms import CustomUserCreationForm, CustomUserChangeForm class UserViewSet(viewsets.ModelViewSet): queryset = CustomUser.objects.all() serializer_class = UserSerializer @@ -62,6 +62,37 @@ def user_profile(request, user_id): return render(request, 'accounts/profile.html', context) +def signup(request): + if request.method == 'POST': + form = CustomUserCreationForm(request.POST, request.FILES) + if form.is_valid(): + user = form.save() + login(request, user) + return redirect('home') + else: + form = CustomUserCreationForm() + return render(request, 'signup.html', {'form': form}) + +def user_update(request, user_id): + user = get_object_or_404(CustomUser, id=user_id) + if request.method == 'POST': + form = CustomUserChangeForm(request.POST, request.FILES, instance=user) + if form.is_valid(): + form.save() + return redirect('user-profile', user_id=user_id) + else: + form = CustomUserChangeForm(instance=user) + return render(request, 'user_update.html', {'form': form}) + +def user_delete(request, user_id): + user = get_object_or_404(CustomUser, id=user_id) + if request.method == 'POST': + user.delete() + logout(request) + return redirect('home') + return render(request, 'user_delete.html', {'user': user}) + + @api_view(['POST']) @permission_classes([IsAuthenticated]) def follow_user(request, user_id): diff --git a/templates/accounts/user_delete.html b/templates/accounts/user_delete.html new file mode 100644 index 0000000..1736854 --- /dev/null +++ b/templates/accounts/user_delete.html @@ -0,0 +1,12 @@ +{% extends 'base.html' %} + +{% block title %}Delete Profile{% endblock %} + +{% block content %} +

Are you sure you want to delete your profile?

+

This action cannot be undone.

+
+ {% csrf_token %} + +
+{% endblock %} diff --git a/templates/base.html b/templates/base.html index 3230056..d1dd447 100644 --- a/templates/base.html +++ b/templates/base.html @@ -28,6 +28,19 @@
{% block content %} + {% extends 'base.html' %} + +{% block title %}Sign Up{% endblock %} + +{% block content %} +

Sign Up

+
+ {% csrf_token %} + {{ form.as_p }} + +
+{% endblock %} + {% endblock %}