implemented very basic login, logout and profile pages
This commit is contained in:
parent
5c588b4cc9
commit
cfa65daa19
11 changed files with 146 additions and 5 deletions
|
@ -9,6 +9,8 @@ from rest_framework_simplejwt.views import TokenRefreshView, TokenObtainPairView
|
|||
|
||||
import Palto.Palto.api.v1.urls as v1_urls
|
||||
|
||||
app_name = "PaltoAPI"
|
||||
|
||||
urlpatterns = [
|
||||
# Authentification (JWT)
|
||||
path('auth/jwt/token/', TokenObtainPairView.as_view(), name='token'),
|
||||
|
|
|
@ -9,6 +9,8 @@ from rest_framework import routers
|
|||
|
||||
from . import views
|
||||
|
||||
app_name = "PaltoAPIv1"
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
|
||||
router.register(r'users', views.UserViewSet, basename="User")
|
||||
|
@ -21,5 +23,4 @@ router.register(r'attendances', views.AttendanceViewSet, basename="Attendance")
|
|||
router.register(r'absences', views.AbsenceViewSet, basename="Absence")
|
||||
router.register(r'absence_attachments', views.AbsenceAttachmentViewSet, basename="AbsenceAttachment")
|
||||
|
||||
|
||||
urlpatterns = router.urls
|
||||
|
|
6
Palto/Palto/forms.py
Normal file
6
Palto/Palto/forms.py
Normal file
|
@ -0,0 +1,6 @@
|
|||
from django import forms
|
||||
|
||||
|
||||
class LoginForm(forms.Form):
|
||||
username = forms.CharField()
|
||||
password = forms.CharField(widget=forms.PasswordInput)
|
1
Palto/Palto/static/Palto/favicon.svg
Normal file
1
Palto/Palto/static/Palto/favicon.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 6.3 KiB |
20
Palto/Palto/templates/Palto/base.html
Normal file
20
Palto/Palto/templates/Palto/base.html
Normal file
|
@ -0,0 +1,20 @@
|
|||
{% load static %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="shortcut icon" type="image/png" href="{% static 'Palto/favicon.svg' %}"/>
|
||||
|
||||
<title>{% block title %}Palto{% endblock %}</title>
|
||||
</head>
|
||||
<body>
|
||||
{# navigation #}
|
||||
{% include "Palto/navigation.html" %}
|
||||
|
||||
{# body #}
|
||||
{% block body %}
|
||||
{% endblock %}
|
||||
</body>
|
||||
</html>
|
9
Palto/Palto/templates/Palto/login.html
Normal file
9
Palto/Palto/templates/Palto/login.html
Normal file
|
@ -0,0 +1,9 @@
|
|||
{% extends "Palto/base.html" %}
|
||||
|
||||
{% block body %}
|
||||
<form method="POST">
|
||||
{% csrf_token %}
|
||||
{{ form_login }}
|
||||
<input type="submit" value="Log in">
|
||||
</form>
|
||||
{% endblock %}
|
3
Palto/Palto/templates/Palto/navigation.html
Normal file
3
Palto/Palto/templates/Palto/navigation.html
Normal file
|
@ -0,0 +1,3 @@
|
|||
<nav>
|
||||
Palto
|
||||
</nav>
|
9
Palto/Palto/templates/Palto/profile.html
Normal file
9
Palto/Palto/templates/Palto/profile.html
Normal file
|
@ -0,0 +1,9 @@
|
|||
{% extends "Palto/base.html" %}
|
||||
|
||||
{% block body %}
|
||||
<div>
|
||||
{{ profile.username }}
|
||||
{{ profile.email }}
|
||||
{% if profile.is_superuser %}Administrator{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
21
Palto/Palto/urls.py
Normal file
21
Palto/Palto/urls.py
Normal file
|
@ -0,0 +1,21 @@
|
|||
"""
|
||||
Urls for the Palto project's API.
|
||||
|
||||
This file list all the urls for the Palto API.
|
||||
"""
|
||||
|
||||
from django.urls import path
|
||||
from Palto.Palto import views
|
||||
|
||||
app_name = "Palto"
|
||||
|
||||
urlpatterns = [
|
||||
# Base
|
||||
path("", views.homepage_view, name="homepage"),
|
||||
|
||||
# User
|
||||
path("login/", views.login_view, name="login"),
|
||||
path("logout/", views.logout_view, name="logout"),
|
||||
path("profile/", views.profile_view, name="profile"),
|
||||
path("profile/<uuid:profile_id>/", views.profile_view, name="profile"),
|
||||
]
|
|
@ -3,7 +3,75 @@ Views for the Palto project.
|
|||
|
||||
A view is what control the content of a page, prepare the correct data, react to a form, render the correct template.
|
||||
"""
|
||||
import uuid
|
||||
from django.contrib.auth import login, authenticate, logout
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.http import HttpRequest, HttpResponse
|
||||
from django.shortcuts import render, get_object_or_404, redirect
|
||||
|
||||
from Palto.Palto.forms import LoginForm
|
||||
from Palto.Palto.models import User
|
||||
|
||||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
||||
def homepage_view(request: HttpRequest):
|
||||
# TODO: homepage
|
||||
return HttpResponse("Hello there.")
|
||||
|
||||
|
||||
def login_view(request: HttpRequest):
|
||||
# create a login form
|
||||
form_login = LoginForm(request.POST)
|
||||
|
||||
if form_login.is_valid():
|
||||
# try to authenticate this user with the credentials
|
||||
user = authenticate(
|
||||
username=form_login.cleaned_data["username"],
|
||||
password=form_login.cleaned_data["password"]
|
||||
)
|
||||
|
||||
if user is not None:
|
||||
# if the user was authenticated, log the user in.
|
||||
login(request, user)
|
||||
# redirect him to the main page
|
||||
return redirect("Palto:homepage")
|
||||
|
||||
else:
|
||||
# otherwise the credentials were invalid.
|
||||
form_login.add_error(field=None, error="Invalid credentials.")
|
||||
|
||||
# return the page
|
||||
return render(
|
||||
request,
|
||||
"Palto/login.html",
|
||||
context=dict(
|
||||
form_login=form_login
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
def logout_view(request: HttpRequest):
|
||||
# disconnect the user from the website
|
||||
logout(request)
|
||||
# redirect him to the main page
|
||||
return redirect("Palto:homepage")
|
||||
|
||||
|
||||
@login_required
|
||||
def profile_view(request: HttpRequest, profile_id: uuid.UUID = None):
|
||||
if profile_id is None:
|
||||
# if the profile id is not given, redirect to the page of the current user.
|
||||
return redirect("Palto:profile", request.user.id)
|
||||
|
||||
# get the corresponding user from its id.
|
||||
profile = get_object_or_404(User, id=profile_id)
|
||||
|
||||
# render the page
|
||||
return render(
|
||||
request,
|
||||
"Palto/profile.html",
|
||||
context=dict(
|
||||
profile=profile
|
||||
)
|
||||
)
|
||||
|
|
|
@ -19,16 +19,17 @@ from django.contrib import admin
|
|||
from django.urls import path, re_path, include
|
||||
from django.views.static import serve
|
||||
|
||||
from Palto.Palto.api import urls as api_urls
|
||||
from Palto import settings
|
||||
from Palto.Palto import urls as palto_views_urls
|
||||
from Palto.Palto.api import urls as palto_api_urls
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
# Application
|
||||
# ...
|
||||
path('', include(palto_views_urls)),
|
||||
|
||||
# API
|
||||
path('api/', include(api_urls)), # Api REST
|
||||
path('api/', include(palto_api_urls)), # Api REST
|
||||
|
||||
# Debug
|
||||
path('admin/', admin.site.urls), # Admin page
|
||||
|
|
Loading…
Reference in a new issue