add user system

This commit is contained in:
Jens Timmerman 2021-08-05 21:48:30 +02:00
parent b5d6d90a5c
commit f89eb43666
19 changed files with 293 additions and 43 deletions

78
nmgfitness/base.html Normal file
View File

@ -0,0 +1,78 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<title>NMG Fitness Registration</title>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="/">Calendar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item">
{% if user.is_authenticated %}
<a class="nav-link" href="{% url 'logout' %}">Logout {{ user.username }}</a>
<li class="nav-item">
<a class="nav-link" href="{% url 'password_change' %} ">Change Password</a>
</li>
{% if user.is_superuser %}
<li class="nav-item">
<a class="nav-link" href="{% url 'admin:index' %} ">Admin</a>
</li>
{% endif %}
{% else %}
<a class="nav-link" href="{% url 'login' %}">Login</a>
{% endif %}
</li>
<!--li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li!-->
</ul>
</div>
</nav>
<div class="container">
<div class="row justify-content-center">
{% block content %}
BASE TEMPLATE
{% endblock %}
</div>
</div>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.4.0/fullcalendar.css"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.4.0/fullcalendar.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
crossorigin="anonymous"></script>
</body>
</html>

View File

@ -1,13 +1,7 @@
<html> {% extends 'base.html' %}
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.4.0/fullcalendar.css"/> {% block content %}
<link rel="stylesheet" <script>
href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.css"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.4.0/fullcalendar.min.js"></script>
<script>
function mycolor(str){ function mycolor(str){
var hash = 0; var hash = 0;
for (var i = 0; i < str.length; i++) { for (var i = 0; i < str.length; i++) {
@ -52,24 +46,20 @@
editable: true, editable: true,
eventLimit: true, eventLimit: true,
select: function (start, end, allDay) { select: function (start, end, allDay) {
var title = prompt("Enter Your Name"); var start = $.fullCalendar.formatDate(start, "Y-MM-DD HH:mm:ss");
if (title) { var end = $.fullCalendar.formatDate(end, "Y-MM-DD HH:mm:ss");
var start = $.fullCalendar.formatDate(start, "Y-MM-DD HH:mm:ss"); $.ajax({
var end = $.fullCalendar.formatDate(end, "Y-MM-DD HH:mm:ss"); type: "GET",
$.ajax({ url: '/add_event',
type: "GET", data: {'title': '{{ user }}', 'start': start, 'end': end},
url: '/add_event', dataType: "json",
data: {'title': title, 'start': start, 'end': end}, success: function (data) {
dataType: "json", location.reload();
success: function (data) { },
//alert("Added Successfully"); failure: function (data) {
location.reload(); alert('There is a problem!!!');
}, }
failure: function (data) { });
alert('There is a problem!!!');
}
});
}
}, },
eventResize: function (event) { eventResize: function (event) {
var start = $.fullCalendar.formatDate(event.start, "Y-MM-DD HH:mm:ss"); var start = $.fullCalendar.formatDate(event.start, "Y-MM-DD HH:mm:ss");
@ -136,12 +126,9 @@
}); });
</script> </script>
</head>
<body>
<br/> <br/>
<h2 align="center"><a href="#">Nieuwe Molens Gent -- Fitness calendar</a></h2> <h2 align="center"><a href="#">Nieuwe Molens Gent -- Fitness calendar</a></h2>
<br/> <br/>
<div class="container">
<div id="calendar"></div> <div id="calendar"></div>
<p> <p>
Klik op de gewenste plaats in de kalender om een nieuwe reservatie toe te voegen, vul je naam in in het dialoogvenster. Klik op de gewenste plaats in de kalender om een nieuwe reservatie toe te voegen, vul je naam in in het dialoogvenster.
@ -152,10 +139,6 @@
<p> <p>
Je kan een event verschuiven of verlengen/verkorten door het vast te nemen en te verschuiven. Je kan een event verschuiven of verlengen/verkorten door het vast te nemen en te verschuiven.
</p> </p>
<p>
Indien het niet lukt om op een reeds gerserveerd moment een nieuwe reservatie aan te maken,
</p>
</div> </div>
</body> {% endblock %}
</html>

View File

@ -27,17 +27,20 @@ DEBUG = True
ALLOWED_HOSTS = [] ALLOWED_HOSTS = []
LOGIN_URL = '/accounts/login/'
LOGIN_REDIRECT_URL = '/'
# Application definition # Application definition
INSTALLED_APPS = [ INSTALLED_APPS = [
'django.contrib.admin', 'users.apps.UsersConfig',
'nmgfitness',
'django.contrib.auth', 'django.contrib.auth',
'django.contrib.admin',
'django.contrib.contenttypes', 'django.contrib.contenttypes',
'django.contrib.sessions', 'django.contrib.sessions',
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'nmgfitness', 'bootstrap4',
] ]
MIDDLEWARE = [ MIDDLEWARE = [

View File

@ -14,14 +14,19 @@ Including another URLconf
2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
""" """
from django.contrib import admin from django.contrib import admin
from django.urls import path from django.urls import path, include
from django.conf.urls import url from django.conf.urls import url
from users.views import register
from .views import calendar, add_event, update, remove from .views import calendar, add_event, update, remove
urlpatterns = [ urlpatterns = [
path('accounts/', include('django.contrib.auth.urls')),
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
url('^$', calendar, name='calendar'), path('register/', register, name="register"),
url('^$', calendar, name='index'),
url('^add_event$', add_event, name='add_event'), url('^add_event$', add_event, name='add_event'),
url('^update$', update, name='update'), url('^update$', update, name='update'),
url('^remove', remove, name='remove'), url('^remove', remove, name='remove'),

View File

@ -2,14 +2,20 @@ from .models import Events
from django.shortcuts import render from django.shortcuts import render
from django.http import JsonResponse from django.http import JsonResponse
from django.contrib.auth.decorators import login_required
@login_required
def calendar(request): def calendar(request):
print(request.user)
all_events = Events.objects.all() all_events = Events.objects.all()
context = { context = {
"events":all_events, "events": all_events,
} }
return render(request,'calendar.html',context) return render(request, 'calendar.html', context)
@login_required
def add_event(request): def add_event(request):
start = request.GET.get("start", None) start = request.GET.get("start", None)
end = request.GET.get("end", None) end = request.GET.get("end", None)
@ -20,6 +26,7 @@ def add_event(request):
return JsonResponse(data) return JsonResponse(data)
@login_required
def update(request): def update(request):
start = request.GET.get("start", None) start = request.GET.get("start", None)
end = request.GET.get("end", None) end = request.GET.get("end", None)
@ -34,6 +41,7 @@ def update(request):
return JsonResponse(data) return JsonResponse(data)
@login_required
def remove(request): def remove(request):
id = request.GET.get("id", None) id = request.GET.get("id", None)
event = Events.objects.get(id=id) event = Events.objects.get(id=id)

1
requirements.txt Normal file
View File

@ -0,0 +1 @@
django-bootstrap4

0
users/__init__.py Normal file
View File

5
users/apps.py Normal file
View File

@ -0,0 +1,5 @@
from django.apps import AppConfig
class UsersConfig(AppConfig):
name = 'users'

5
users/forms.py Normal file
View File

@ -0,0 +1,5 @@
from django.contrib.auth.forms import UserCreationForm
class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
fields = UserCreationForm.Meta.fields + ("email",)

View File

@ -0,0 +1,8 @@
{% extends "base.html" %}
{% block content %}
<p>Logged out!</p>
<p>Thanks for spending some quality time with the NMG fittness calendar site today.
</p>
<a href="{% url 'login'%}">Click here to login again.</a>
{% endblock %}

View File

@ -0,0 +1,29 @@
{% extends 'base.html' %}
{% load bootstrap4 %}
{% block content %}
<div class="col-8">
<h2>Login</h2>
<form method="post">
{% csrf_token %}
{% bootstrap_form form %}
<button type="submit">Login</button>
</p>
</form>
<p>
<a href="{% url 'index' %}">Back to Calendar</a>
</p>
<p>
<a href="{% url 'register' %}">Register</a>
</p>
<p>
<a href="{% url 'password_reset' %}">Reset Password</a>
</p>
</div>
{% endblock %}

View File

@ -0,0 +1,7 @@
{% extends 'base.html' %}
{% block content %}
<h2>Password changed</h2>
<a href="{% url 'index' %}">Back to index</a>
{% endblock %}

View File

@ -0,0 +1,16 @@
{% extends 'base.html' %}
{% load bootstrap4 %}
{% block content %}
<div class="col-8">
<h2>Change Password</h2>
<form method="post">
{% csrf_token %}
{% bootstrap_form form %}
<input type="submit" value="Change">
</form>
<a href="{% url 'index' %}">Back to index</a>
</div>
{% endblock %}

View File

@ -0,0 +1,8 @@
{% extends 'base.html' %}
{% block content %}
<h2>Password reset complete</h2>
<a href="{% url 'login' %}">Back to login</a>
{% endblock %}

View File

@ -0,0 +1,23 @@
{% extends 'base.html' %}
{% load bootstrap4 %}
{% block content %}
<div class="col-8">
<h2>Confirm password reset</h2>
{% if validlink %}
<form method="post">
{% csrf_token %}
{% bootstrap_form form %}
<input type="submit" value="Confirm">
</form>
{% else %}
<p>The password reset link was invalid, possibly because it has already been used. Please request a new password reset.</p>
{% endif %}
</div>
{% endblock %}

View File

@ -0,0 +1,7 @@
{% extends 'base.html' %}
{% block content %}
<h2>Password reset done</h2>
<a href="{% url 'login' %}">Back to login</a>
{% endblock %}

View File

@ -0,0 +1,19 @@
{% extends 'base.html' %}
{% load bootstrap4 %}
{% block content %}
<div class="col-8">
<h2>Send password reset link</h2>
<form method="post">
{% csrf_token %}
{% bootstrap_form form %}
<p>
<input type="submit" value="Reset">
</p>
</form>
<a href="{% url 'index' %}">Back to Calendar</a>
</div>
{% endblock %}

View File

@ -0,0 +1,21 @@
{% extends 'base.html' %}
{% load bootstrap4 %}
{% block content %}
<div class="col-8">
<h2>Register</h2>
<form method="post">
{% csrf_token %}
{% bootstrap_form form %}
<input type="submit" value="Register">
</form>
<a href="{% url 'login' %}">Back to login</a>
</div>
<p>
After registration your account will need to be activated.
Contact someone from the Fintess Commitee with your username to get your account activated.
{% endblock %}

24
users/views.py Normal file
View File

@ -0,0 +1,24 @@
from django.contrib.auth import login
from django.shortcuts import redirect, render
from django.urls import reverse
from users.forms import CustomUserCreationForm
def register(request):
if request.method == "POST":
form = CustomUserCreationForm(request.POST)
if form.is_valid():
user = form.save()
user.is_active = False
user.save()
return redirect(reverse("index"))
else:
form = CustomUserCreationForm()
return render(
request, "users/register.html",
{"form": form}
)