1
0
Fork 0
mirror of https://github.com/Findus23/acronomy.git synced 2024-09-19 15:33:45 +02:00

better login form and validators

This commit is contained in:
Lukas Winkler 2020-06-13 22:36:46 +02:00
parent d88e58f5c0
commit 77012ee325
Signed by: lukas
GPG key ID: 54DE4D798D244853
8 changed files with 103 additions and 24 deletions

View file

@ -59,3 +59,6 @@ admin.site.register(PaperReference, PaperAdmin)
admin.site.register(Tag, TagAdmin)
admin.site.register(Acronym, AcronymAdmin)
admin.site.register(Host)
admin.site.site_header="Acronomy Administration"
admin.site.site_title="Acronomy Administration"

View file

@ -0,0 +1,28 @@
# Generated by Django 3.0.6 on 2020-06-13 20:11
import acros.models.Acronym
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('acros', '0030_auto_20200608_1823'),
]
operations = [
migrations.RemoveField(
model_name='historicalacronym',
name='created_date',
),
migrations.AlterField(
model_name='acronym',
name='name',
field=models.CharField(max_length=100),
),
migrations.AlterField(
model_name='historicalacronym',
name='name',
field=models.CharField(max_length=100),
),
]

View file

@ -0,0 +1,24 @@
# Generated by Django 3.0.6 on 2020-06-13 20:14
import acros.models.Acronym
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('acros', '0031_auto_20200613_2011'),
]
operations = [
migrations.AlterField(
model_name='acronym',
name='name',
field=models.CharField(max_length=100, validators=[acros.models.valid_acronym]),
),
migrations.AlterField(
model_name='historicalacronym',
name='name',
field=models.CharField(max_length=100, validators=[acros.models.valid_acronym]),
),
]

View file

@ -1,3 +1,4 @@
from django.core.exceptions import ValidationError
from django.db import models
from django.urls import reverse
from django.utils.text import slugify
@ -7,8 +8,13 @@ from acros.models import Tag
from acros.utils.conversion import md_to_html
def valid_acronym(value: str):
if ":" in value:
raise ValidationError('Acronyms are not allowed to contain a ":"')
class Acronym(models.Model):
name = models.CharField(max_length=100)
name = models.CharField(max_length=100, validators=[valid_acronym])
full_name = models.CharField(max_length=1000)
slug = models.SlugField(null=False, unique=True)
description_md = models.TextField(blank=True)
@ -35,3 +41,12 @@ class Acronym(models.Model):
class Meta:
ordering = ["name"]
def clean(self):
new_slug = slugify(self.name)
try:
found = Acronym.objects.get(slug=new_slug)
except Acronym.DoesNotExist:
found = False
if found:
raise ValidationError(f"slug '{new_slug}' already exists")

View file

@ -1,5 +1,5 @@
from .Tag import Tag
from .Acronym import Acronym
from .Acronym import Acronym,valid_acronym
from .Host import Host
from .PaperReference import PaperReference
from .Weblink import Weblink

View file

@ -1,4 +1,5 @@
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.messages.views import SuccessMessageMixin
from django.http import HttpResponse
from django.views import generic
from rest_framework import viewsets, filters
@ -34,10 +35,11 @@ class EditView(LoginRequiredMixin, generic.UpdateView):
form_class = EditForm
class AddView(LoginRequiredMixin, generic.CreateView):
class AddView(LoginRequiredMixin, SuccessMessageMixin, generic.CreateView):
template_name = "acros/add.html"
form_class = AddForm
model = Acronym
success_message = 'Acronym "%(name)s" was created successfully'
class TagListView(generic.ListView):

View file

@ -34,7 +34,7 @@
//@import "node_modules/bootstrap/scss/progress";
//@import "node_modules/bootstrap/scss/media";
//@import "node_modules/bootstrap/scss/list-group";
//@import "node_modules/bootstrap/scss/close";
@import "node_modules/bootstrap/scss/close";
//@import "node_modules/bootstrap/scss/toasts";
//@import "node_modules/bootstrap/scss/modal";
@import "node_modules/bootstrap/scss/tooltip";

View file

@ -1,29 +1,36 @@
{% extends "base.html" %}
{% load bootstrap4 %}
{% load static %}
{% block containerclasses %}text-center{% endblock %}
{% block heading %}
<h1>Login</h1>
{% endblock %}
{#{% block containerclasses %}text-center{% endblock %}#}
{% block extra_head %}
<link rel="stylesheet" href="{% static "login.css" %}">
{# <link rel="stylesheet" href="{% static "login.css" %}">#}
{% endblock %}
{% block content %}
{% if next %}
<div class="alert alert-info">
You need to log in before you can access
<code>{{ next }}</code>.
</div>
{% endif %}
<form class="form-signin" method="post" action="{% url 'login' %}">
<form action="{% url 'login' %}" method="post" class="form">
{% csrf_token %}
<h1 class="h3 mb-3 font-weight-normal">Anmeldung</h1>
<label for="{{ form.username.id_for_label }}" class="sr-only">Benutzername</label>
<input class="form-control" id="{{ form.username.id_for_label }}" maxlength="30"
name="{{ form.username.html_name }}" type="text"
placeholder="Benutzername"/>
{# <input type="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>#}
<label for="{{ form.password.id_for_label }}" class="sr-only">Passwort</label>
<input type="password" id="{{ form.password.id_for_label }}" name="{{ form.password.html_name }}"
class="form-control" placeholder="Passwort" required>
<input type="hidden" name="next" value="{{ next }}">
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
{{ form.non_field_errors }}
{% bootstrap_form form %}
{% url 'admin_password_reset' as password_reset_url %}
<div class="password-reset-link">
<a href="{% url 'password_reset' %}">Forgotten your password or username?</a>
</div>
{% buttons %}
<button type="submit" class="btn btn-lg btn-primary btn-block">
Sign in
</button>
{% endbuttons %}
</form>
{% endblock %}