add benchcoach user profile, implement login

This commit is contained in:
2021-12-17 12:58:02 -06:00
parent 96d3801fae
commit 212d2d0ac1
10 changed files with 1281 additions and 13 deletions

View File

@@ -1,5 +1,6 @@
from django.contrib import admin from django.contrib import admin
from .models import Profile from .models import Profile, TeamsnapSettings
# Register your models here. # Register your models here.
admin.site.register(Profile) admin.site.register(Profile)
admin.site.register(TeamsnapSettings)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,23 @@
# Generated by Django 3.2.6 on 2021-12-16 18:53
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('teamsnap', '0019_auto_20211216_1851'),
('benchcoach', '0006_alter_profile_avatar'),
]
operations = [
migrations.CreateModel(
name='TeamsnapSettings',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('managed_team', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='teamsnap.team')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='benchcoach.profile')),
],
),
]

View File

@@ -0,0 +1,20 @@
# Generated by Django 3.2.6 on 2021-12-16 18:56
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('teamsnap', '0019_auto_20211216_1851'),
('benchcoach', '0007_teamsnapsettings'),
]
operations = [
migrations.AlterField(
model_name='profile',
name='teamsnap_user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='teamsnap.user'),
),
]

View File

@@ -1,5 +1,5 @@
from django.db import models from django.db import models
from teamsnap.models import User as TeamsnapUser from teamsnap.models import User as TeamsnapUser, Team as TeamsnapTeam
from django.contrib.auth.models import User from django.contrib.auth.models import User
@@ -10,5 +10,9 @@ def user_directory_path(instance, filename):
class Profile(models.Model): class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE) user = models.OneToOneField(User, on_delete=models.CASCADE)
teamsnap_access_token = models.CharField(null=True, max_length=50) teamsnap_access_token = models.CharField(null=True, max_length=50)
teamsnap_user = models.ForeignKey(TeamsnapUser, on_delete=models.CASCADE, null=True) teamsnap_user = models.ForeignKey(TeamsnapUser, on_delete=models.CASCADE, null=True, blank=True)
avatar = models.ImageField(upload_to="avatar", null=True, blank=True) avatar = models.ImageField(upload_to="avatar", null=True, blank=True)
class TeamsnapSettings(models.Model):
user = models.OneToOneField(Profile, on_delete=models.CASCADE)
managed_team = models.ForeignKey(TeamsnapTeam, on_delete=models.CASCADE)

View File

@@ -18,7 +18,7 @@ from django.urls import path, include
from django.conf.urls.static import static from django.conf.urls.static import static
from django.conf import settings from django.conf import settings
from .views import welcome from .views import welcome, user_login
urlpatterns = [ urlpatterns = [
path('', welcome, name="home"), path('', welcome, name="home"),
@@ -28,5 +28,6 @@ urlpatterns = [
path('venues/', include('venues.urls')), path('venues/', include('venues.urls')),
path('players/', include('players.urls')), path('players/', include('players.urls')),
path('lineups/', include('lineups.urls')), path('lineups/', include('lineups.urls')),
path('teamsnap/', include('teamsnap.urls')) path('teamsnap/', include('teamsnap.urls')),
path('login', user_login, name="login")
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

View File

@@ -1,6 +1,31 @@
from django.http import HttpResponse from django.http import HttpResponse
from django.shortcuts import render from django.shortcuts import render,redirect, reverse, HttpResponseRedirect
from django.contrib.auth import login,authenticate
def welcome(request): def welcome(request):
pages = ['events list', 'teams list', 'venues list', 'players list', 'teamsnap list events', 'teamsnap home'] pages = ['events list', 'teams list', 'venues list', 'players list', 'teamsnap list events', 'teamsnap home', 'login']
return render(request,'home.html',{'pages':pages}) return render(request,'home.html',{'pages':pages})
def user_login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
try:
user = authenticate(request, username=username, password=password)
if user is not None:
print('Login')
login(request,user)
return redirect(reverse('home'))
else:
print("Someone tried to login and failed.")
print("They used username: {} and password: {}".format(username, password))
return redirect('/')
except Exception as identifier:
return redirect('/')
else:
return render(request, 'login.html')

View File

@@ -23,12 +23,13 @@ def edit_event(request, id):
return redirect(event.edit_url) return redirect(event.edit_url)
def home(request): def home(request):
current_benchcoach_user = BenchcoachUser.objects.get(id=1) current_benchcoach_user = request.user
current_teamsnap_user = current_benchcoach_user.teamsnap_user current_teamsnap_user = request.user.profile.teamsnap_user
current_teamsnap_team = request.user.profile.teamsnapsettings.managed_team
context= { context= {
'user': request.user,
'benchcoach_user': current_benchcoach_user, 'benchcoach_user': current_benchcoach_user,
'teamsnap_user': current_teamsnap_user 'teamsnap_user': current_teamsnap_user,
'teamsnap_team':current_teamsnap_team
} }
return render(request, 'teamsnap/home.html', context) return render(request, 'teamsnap/home.html', context)

20
templates/login.html Normal file
View File

@@ -0,0 +1,20 @@
{% extends "base.html" %}{% load static %}
{% block title %}Bench Coach Home{% endblock %}
{% block content %}
<form method="post" action="{% url "login" %}">
{% csrf_token %}
<header>Login</header>
<label>Username <span>*</span></label>
<input type="text" name="username" placeholder="Username" required="" />
<div class="help">At least 5 character</div>
<label>Password <span>*</span></label>
<input type="password" name="password" placeholder="Password" required="" />
<div class="help">Use upper and lowercase letters as well</div>
<button type="submit">Login</button>
</form>
{% endblock %}