Make the webinterface ready for 2022 #1
Open
seba
wants to merge 9 commits from cleanup-and-fixes-2022
into master
@ -0,0 +1,7 @@
|
||||
from .models import Contest
|
||||
|
||||
|
||||
def current_contest(self):
|
||||
return {
|
||||
'current_contest': Contest.get_current_contest(),
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
# Generated by Django 4.0.1 on 2022-01-22 16:18
|
||||
|
||||
import django.contrib.auth.validators
|
||||
import django.core.validators
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('contest', '0020_auto_20190122_2348'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='qso',
|
||||
name='otherNo',
|
||||
field=models.IntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(1000000)], verbose_name='No-R'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='qso',
|
||||
name='ownNo',
|
||||
field=models.IntegerField(validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(1000000)], verbose_name='No'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='dncall',
|
||||
field=models.CharField(blank=True, default='', help_text='If you have a DN call that you will offer to SWLs please enter it here', max_length=16, verbose_name='DN-Call'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='extra2m70cm',
|
||||
field=models.BooleanField(default=False, help_text='Will you bring an additional 2m/70cm TRX to lend to other participants?', verbose_name='Additional 2m/70cm TRX'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='first_name',
|
||||
field=models.CharField(blank=True, max_length=150, verbose_name='first name'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='last_name',
|
||||
field=models.CharField(blank=True, max_length=150, verbose_name='last name'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='qrv2m',
|
||||
field=models.BooleanField(default=False, help_text='Will you be QRV on 2m during the contest?', verbose_name='QRV on 2m'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='qrv70cm',
|
||||
field=models.BooleanField(default=False, help_text='Will you be QRV on 70cm during the contest?', verbose_name='QRV on 70cm'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='regTime',
|
||||
field=models.DateTimeField(blank=True, default=None, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='username',
|
||||
field=models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username'),
|
||||
),
|
||||
]
|
@ -0,0 +1,20 @@
|
||||
# Generated by Django 4.0.1 on 2022-01-22 17:52
|
||||
|
||||
import django.core.validators
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('contest', '0021_alter_qso_otherno_alter_qso_ownno_alter_user_dncall_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='contest',
|
||||
name='contestNo',
|
||||
field=models.IntegerField(default=1, help_text='Running number of contest (for vanity reasons)', validators=[django.core.validators.MinValueValidator(1)]),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
@ -0,0 +1,19 @@
|
||||
# Generated by Django 4.0.1 on 2022-01-22 17:56
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('contest', '0022_contest_contestno'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='contest',
|
||||
name='rulesetLink',
|
||||
field=models.TextField(default='', help_text='URL to the ruleset pdf for this contest'),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
@ -1,35 +1,22 @@
|
||||
"""cqtu URL Configuration
|
||||
|
||||
The `urlpatterns` list routes URLs to views. For more information please see:
|
||||
https://docs.djangoproject.com/en/1.10/topics/http/urls/
|
||||
Examples:
|
||||
Function views
|
||||
1. Add an import: from my_app import views
|
||||
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
|
||||
Class-based views
|
||||
1. Add an import: from other_app.views import Home
|
||||
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
|
||||
Including another URLconf
|
||||
1. Import the include() function: from django.conf.urls import url, include
|
||||
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
|
||||
"""
|
||||
from django.conf.urls import url
|
||||
from django.urls import re_path
|
||||
|
||||
|
||||
import contest.views as contest_views
|
||||
from contest.cbrparser import uploadCBR
|
||||
|
||||
app_name = 'context'
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', contest_views.contestIndex, name='index'),
|
||||
url(r'^regref/$', contest_views.registerRefs, name='registerRefs'),
|
||||
url(r'^regref/edit/(?P<uid>\d+)/$', contest_views.updateRef, {"shadow": False}, name='updateRef'),
|
||||
url(r'^regref/shadow/edit/(?P<uid>\d+)/$', contest_views.updateRef, {"shadow": True}, name='updateShadowRef'),
|
||||
url(r'^regref/qsos/all/$', contest_views.viewAllQSOs, name='viewAllQSOs'),
|
||||
url(r'^regref/qsos/user/(?P<uid>\d+)/$', contest_views.viewUserQSOs, name='viewUserQSOs'),
|
||||
url(r'^overview/$', contest_views.overview, name='overview'),
|
||||
url(r'^log/$', contest_views.log, name='log'),
|
||||
url(r'^log/edit/(?P<qsoid>\d+)/$', contest_views.logEdit, name='logEdit'),
|
||||
url(r'^log/delete/(?P<qsoid>\d+)/$', contest_views.logDelete, name='logDelete'),
|
||||
url(r'^uploadcbr/$', uploadCBR, name='uploadCBR'),
|
||||
url(r'^regref/recheckqsos/$', contest_views.recheckAllQSOs, name='recheckAllQSOs'),
|
||||
re_path(r'^$', contest_views.contestIndex, name='index'),
|
||||
re_path(r'^regref/$', contest_views.registerRefs, name='registerRefs'),
|
||||
re_path(r'^regref/edit/(?P<uid>\d+)/$', contest_views.updateRef, {"shadow": False}, name='updateRef'),
|
||||
re_path(r'^regref/shadow/edit/(?P<uid>\d+)/$', contest_views.updateRef, {"shadow": True}, name='updateShadowRef'),
|
||||
re_path(r'^regref/qsos/all/$', contest_views.viewAllQSOs, name='viewAllQSOs'),
|
||||
re_path(r'^regref/qsos/user/(?P<uid>\d+)/$', contest_views.viewUserQSOs, name='viewUserQSOs'),
|
||||
re_path(r'^overview/$', contest_views.overview, name='overview'),
|
||||
re_path(r'^log/$', contest_views.log, name='log'),
|
||||
re_path(r'^log/edit/(?P<qsoid>\d+)/$', contest_views.logEdit, name='logEdit'),
|
||||
re_path(r'^log/delete/(?P<qsoid>\d+)/$', contest_views.logDelete, name='logDelete'),
|
||||
re_path(r'^uploadcbr/$', uploadCBR, name='uploadCBR'),
|
||||
re_path(r'^regref/recheckqsos/$', contest_views.recheckAllQSOs, name='recheckAllQSOs'),
|
||||
]
|
||||
|
@ -1,27 +1,25 @@
|
||||
from django.core import validators
|
||||
from django.utils import six
|
||||
from django.utils.deconstruct import deconstructible
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
import re
|
||||
|
||||
|
||||
@deconstructible
|
||||
class CallUsernameValidator(validators.RegexValidator):
|
||||
#regex = r'^[\w.@+-]+$'
|
||||
regex = r'^(?:[A-Z]+/)?[A-Z]{1,2}[0-9][A-Z]{1,4}(?:-[0-9])??$'
|
||||
message = _(
|
||||
'Enter a valid Callsign as Username, ALL UPPERCASE, if needed with -1 / -2,'
|
||||
'e.g. DL7BST, DN1BER-1, DL/OE1FOO.'
|
||||
)
|
||||
flags = re.ASCII if six.PY3 else 0
|
||||
flags = re.ASCII
|
||||
|
||||
|
||||
@deconstructible
|
||||
class CallLogValidator(validators.RegexValidator):
|
||||
#regex = r'^[\w.@+-]+$'
|
||||
regex = r'^(?:[A-Z]+/)?[A-Z]{1,2}[0-9][A-Z]{1,4}(?:-[0-9])?(?:/[A-Z]{1,3})?$'
|
||||
message = _(
|
||||
'Enter a valid callsign, ALL UPPERCASE, if needed with -1 / -2,'
|
||||
'e.g. DL7BST, DN1BER-1, DL/OE1FOO, DN1FTW-1/p'
|
||||
)
|
||||
flags = re.ASCII if six.PY3 else 0
|
||||
flags = re.ASCII
|
||||
|
@ -1,43 +1,18 @@
|
||||
"""cqtu URL Configuration
|
||||
|
||||
The `urlpatterns` list routes URLs to views. For more information please see:
|
||||
https://docs.djangoproject.com/en/1.10/topics/http/urls/
|
||||
Examples:
|
||||
Function views
|
||||
1. Add an import: from my_app import views
|
||||
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
|
||||
Class-based views
|
||||
1. Add an import: from other_app.views import Home
|
||||
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
|
||||
Including another URLconf
|
||||
1. Import the include() function: from django.conf.urls import url, include
|
||||
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
|
||||
"""
|
||||
from django.conf.urls import url, include
|
||||
from django.urls import include, path
|
||||
from django.contrib import admin
|
||||
|
||||
from django.contrib.auth import views as auth_views
|
||||
#from django.views.generic.edit import CreateView
|
||||
#from django.contrib.auth.forms import UserCreationForm
|
||||
|
||||
#from contest.forms import CustomUserCreationForm
|
||||
from contest.views import index, register, profile
|
||||
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
url('^$', index, name="index"),
|
||||
url('^cqtufm2019/', include('contest.urls', namespace='contest')),
|
||||
path('', index, name="index"),
|
||||
path('contest/', include('contest.urls', namespace='contest')),
|
||||
|
||||
url(r'^admin/', admin.site.urls),
|
||||
url(r'^login/$', auth_views.login, name='login'),
|
||||
url(r'^logout/$', auth_views.logout, {'next_page': '/'}, name='logout'),
|
||||
url(r'^register/$', register, name='register'),
|
||||
url(r'^profile/$', profile, name='profile'),
|
||||
url(r'^api/', include('api.urls')),
|
||||
#url(r'^register/$', CreateView.as_view(
|
||||
# template_name='registration/register.html',
|
||||
# form_class=CustomUserCreationForm,
|
||||
# success_url='/',
|
||||
#), name='register'),
|
||||
path('admin/', admin.site.urls),
|
||||
path('login/', auth_views.LoginView.as_view(), name='login'),
|
||||
path('logout/', auth_views.LogoutView.as_view(), {'next_page': '/'}, name='logout'),
|
||||
path('register/', register, name='register'),
|
||||
path('profile/', profile, name='profile'),
|
||||
path('api/', include('api.urls')),
|
||||
]
|
||||
|
@ -1,4 +1,4 @@
|
||||
Django<1.12
|
||||
Django==4.0.1
|
||||
django-crispy-forms
|
||||
django-rest-framework
|
||||
django-filter
|
||||
|
Loading…
Reference in new issue