Added user registration, login, and logout APIs
This commit is contained in:
parent
14e250a2b4
commit
6d6b317241
@ -1,7 +1,7 @@
|
|||||||
# main/api_views.py
|
# main/api_views.py
|
||||||
from rest_framework import viewsets
|
from rest_framework import viewsets
|
||||||
from .models import Project, Task
|
from .models import Project, Task, RegisteredUser
|
||||||
from .serializers import ProjectSerializer, TaskSerializer
|
from .serializers import ProjectSerializer, TaskSerializer, UserRegistrationSerializer
|
||||||
|
|
||||||
class ProjectViewSet(viewsets.ModelViewSet):
|
class ProjectViewSet(viewsets.ModelViewSet):
|
||||||
queryset = Project.objects.all()
|
queryset = Project.objects.all()
|
||||||
@ -10,3 +10,31 @@ class ProjectViewSet(viewsets.ModelViewSet):
|
|||||||
class TaskViewSet(viewsets.ModelViewSet):
|
class TaskViewSet(viewsets.ModelViewSet):
|
||||||
queryset = Task.objects.all()
|
queryset = Task.objects.all()
|
||||||
serializer_class = TaskSerializer
|
serializer_class = TaskSerializer
|
||||||
|
|
||||||
|
|
||||||
|
class AccountViewSet(viewsets.ModelViewSet):
|
||||||
|
queryset = RegisteredUser.objects.all()
|
||||||
|
serializer_class = UserRegistrationSerializer
|
||||||
|
|
||||||
|
class UserRegistrationView(APIView):
|
||||||
|
def post(self, request):
|
||||||
|
serializer = UserRegistrationSerializer(data=request.data)
|
||||||
|
if serializer.is_valid():
|
||||||
|
user = serializer.save()
|
||||||
|
return Response({"id": user.id, "username": user.username}, status=status.HTTP_201_CREATED)
|
||||||
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
class UserLoginView(APIView):
|
||||||
|
def post(self, request):
|
||||||
|
username = request.data.get('username')
|
||||||
|
password = request.data.get('password')
|
||||||
|
user = authenticate(request, username=username, password=password)
|
||||||
|
if user is not None:
|
||||||
|
login(request, user)
|
||||||
|
return Response({"message"}: "Login successful"}, status=status.HTTP_200_OK)
|
||||||
|
return Response({error}: "Invalid credentials", status=status.HTTP_401_UNAUTHORIZED)
|
||||||
|
|
||||||
|
class UserLogoutView(APIView):
|
||||||
|
def post(self, request):
|
||||||
|
logout(request)
|
||||||
|
return Response({"message": "Logout successful"}, status=status.HTTP_200_OK)
|
||||||
|
|||||||
@ -5,6 +5,11 @@ from django.contrib.auth.models import User
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
|
class RegisteredUser(models.Model):
|
||||||
|
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
||||||
|
def __str__(self):
|
||||||
|
return self.user.username
|
||||||
|
|
||||||
class Profile(models.Model):
|
class Profile(models.Model):
|
||||||
ROLE_CHOICES = [
|
ROLE_CHOICES = [
|
||||||
('Application Admin', 'Application Admin'),
|
('Application Admin', 'Application Admin'),
|
||||||
@ -45,4 +50,6 @@ class Task(models.Model):
|
|||||||
updated_at = models.DateTimeField(auto_now=True)
|
updated_at = models.DateTimeField(auto_now=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,17 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from .models import Project, Task
|
from .models import Project, Task, RegisteredUser
|
||||||
|
|
||||||
|
class UserRegistrationSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = RegisteredUser
|
||||||
|
fields = ('username', 'password', 'email')
|
||||||
|
extra_kwargs = {'password': {'write_only': True}}
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
user = RegisteredUser(**validated_data)
|
||||||
|
user = set_password(validated_data['password'])
|
||||||
|
user.save()
|
||||||
|
return user
|
||||||
|
|
||||||
class ProjectSerializer(serializers.ModelSerializer):
|
class ProjectSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|||||||
@ -2,17 +2,18 @@
|
|||||||
from .views import create_project, project_dashboard, create_task
|
from .views import create_project, project_dashboard, create_task
|
||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
from rest_framework.routers import DefaultRouter
|
from rest_framework.routers import DefaultRouter
|
||||||
from .api_views import ProjectViewSet, TaskViewSet
|
from .api_views import ProjectViewSet, TaskViewSet, UserRegistrationView, UserLoginView, UserLogoutView
|
||||||
|
|
||||||
router = DefaultRouter()
|
router = DefaultRouter()
|
||||||
router.register(r'projects', ProjectViewSet)
|
router.register(r'projects', ProjectViewSet)
|
||||||
router.register(r'tasks', TaskViewSet)
|
router.register(r'tasks', TaskViewSet)
|
||||||
|
router.register(r'accounts', AccountViewSet)
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('api/', include(router.urls)),
|
path('api/', include(router.urls)),
|
||||||
# path('login/', login_view, name='login'),
|
path('accounts/login/', UserLoginView, name='login'),
|
||||||
# path('logout/', logout_view, name='logout'),
|
path('accounts/logout/', UserLogoutView, name='logout'),
|
||||||
# path('welcome/', welcome_view, name='welcome'),
|
path('accounts/register/', UserRegisterView, name='welcome'),
|
||||||
path('projects/create/', create_project, name='create_project'),
|
path('projects/create/', create_project, name='create_project'),
|
||||||
path('projects/<int:project_id>/', project_dashboard, name='project_dashboard'),
|
path('projects/<int:project_id>/', project_dashboard, name='project_dashboard'),
|
||||||
path('projects/<int:project_id>/tasks/create/', create_task, name='create_task'),
|
path('projects/<int:project_id>/tasks/create/', create_task, name='create_task'),
|
||||||
|
|||||||
@ -4,6 +4,8 @@ from django.contrib.auth.decorators import login_required
|
|||||||
from .models import Project, Task
|
from .models import Project, Task
|
||||||
from .forms import ProjectForm, TaskForm
|
from .forms import ProjectForm, TaskForm
|
||||||
|
|
||||||
|
|
||||||
|
# create project
|
||||||
@login_required
|
@login_required
|
||||||
def create_project(request):
|
def create_project(request):
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
@ -27,7 +29,7 @@ def create_project(request):
|
|||||||
form = ProjectForm()
|
form = ProjectForm()
|
||||||
return render(request, 'create_project.html', {'form': form})
|
return render(request, 'create_project.html', {'form': form})
|
||||||
|
|
||||||
# main/views.py
|
# Load project as current focus
|
||||||
@login_required
|
@login_required
|
||||||
def load_project(request):
|
def load_project(request):
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
@ -37,12 +39,14 @@ def load_project(request):
|
|||||||
return render(request, 'load_project.html', {'projects': projects})
|
return render(request, 'load_project.html', {'projects': projects})
|
||||||
|
|
||||||
|
|
||||||
|
# Active projects
|
||||||
@login_required
|
@login_required
|
||||||
def project_dashboard(request, project_id):
|
def project_dashboard(request, project_id):
|
||||||
project = get_object_or_404(Project, id=project_id)
|
project = get_object_or_404(Project, id=project_id)
|
||||||
tasks = project.tasks.all()
|
tasks = project.tasks.all()
|
||||||
return render(request, 'project_dashboard.html', {'project': project, 'tasks': tasks})
|
return render(request, 'project_dashboard.html', {'project': project, 'tasks': tasks})
|
||||||
|
|
||||||
|
# Create task in current focus project - if no project chosen default project for user is focus
|
||||||
@login_required
|
@login_required
|
||||||
def create_task(request, project_id):
|
def create_task(request, project_id):
|
||||||
project = get_object_or_404(Project, id=project_id)
|
project = get_object_or_404(Project, id=project_id)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user