ADD: ввод данных

This commit is contained in:
e-serg 2024-04-14 20:39:45 +03:00
parent fe9c554fb1
commit b449e6f4d9
7 changed files with 145 additions and 6 deletions

View File

@ -35,6 +35,8 @@ body {
font-family: "Lobster", sans-serif; font-family: "Lobster", sans-serif;
font-weight: 400; font-weight: 400;
font-style: normal; font-style: normal;
color: silver;
display: inline-block;
} }
/* НАВИГАЦИЯ - МЕНЮ */ /* НАВИГАЦИЯ - МЕНЮ */

View File

@ -11,9 +11,10 @@ class TbPetsClones(models.Model):
"""Модель для хранения клонов питомцев""" """Модель для хранения клонов питомцев"""
class PetType(models.IntegerChoices): class PetType(models.IntegerChoices):
"""Тип питомца""" """Тип питомца"""
DOG = 1, "Собака" DOG = 1, "Собачка"
CAT = 2, "Кошка" CAT = 2, "Кошечка"
BIR = 3, "Птица" BIR = 3, "Птичка"
FIS = 6, "Рыбка"
ROD = 4, "Грызун" ROD = 4, "Грызун"
REP = 5, "Рептилия" REP = 5, "Рептилия"
OTH = 0, "Неизвестная зверушка" OTH = 0, "Неизвестная зверушка"
@ -93,8 +94,12 @@ class TbPetsClones(models.Model):
def __str__(self): def __str__(self):
return self.__unicode__() return self.__unicode__()
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
if self.szPetName == "":
# если имя не задано, то генерируем его
self.szPetName = (f"{chr(random.randint(65, 90))}"
f"{chr(random.randint(65, 90))}"
f"{chr(random.randint(65, 90))}")
if not self.pk: if not self.pk:
# если объект новый, то генерируем серийный номер # если объект новый, то генерируем серийный номер
self.szPetSerNum = (f"{pytils.translit.slugify(self.szPetName)[:3].upper()}" self.szPetSerNum = (f"{pytils.translit.slugify(self.szPetName)[:3].upper()}"

View File

@ -28,6 +28,9 @@ urlpatterns = [
re_path(r'^logout$', views.my_logout), re_path(r'^logout$', views.my_logout),
re_path(r'^login$', views.my_login), re_path(r'^login$', views.my_login),
re_path(r'^not-auth$', views.not_auth), re_path(r'^not-auth$', views.not_auth),
re_path(r'add-clone$', views.add_clone),
re_path(r'save-clone$', views.save_clone),
] ]
# Обработчики ошибок # Обработчики ошибок

View File

@ -3,6 +3,8 @@ from django.shortcuts import render, HttpResponseRedirect
from django.http import HttpRequest, HttpResponse from django.http import HttpRequest, HttpResponse
from django.contrib.auth import authenticate, login, logout from django.contrib.auth import authenticate, login, logout
from django.template.exceptions import TemplateDoesNotExist, TemplateSyntaxError from django.template.exceptions import TemplateDoesNotExist, TemplateSyntaxError
from rosmorport_tsts.models import TbPetsClones
def index(request: HttpRequest) -> HttpResponse: def index(request: HttpRequest) -> HttpResponse:
@ -57,3 +59,36 @@ def not_auth(request: HttpRequest) -> HttpResponse:
""" """
to_template = {"META_REFRESH": "15; url=/"} to_template = {"META_REFRESH": "15; url=/"}
return render(request, template_name="not_auth.jinja", context=to_template, status=401) return render(request, template_name="not_auth.jinja", context=to_template, status=401)
def add_clone(request: HttpRequest) -> HttpResponse:
""" Добавление клонированного питомца
:param
:return response: исходящий http-ответ
"""
to_template = {
"META_REFRESH": "3600; url=/logout", # автоматический logout через 1 час бездействия
"PET_TYPES": TbPetsClones.PetType.choices,
"PET_SEXES": TbPetsClones.PetSex.choices
}
return render(request, template_name="input_data.jinja", context=to_template)
def save_clone(request: HttpRequest) -> HttpResponse:
""" Сохранение записи о клонированном питомце
:param
:return response: исходящий http-ответ
"""
to_template = {
"META_REFRESH": "2; url=/add-clone", # автоматический
}
if request.method == 'POST':
try:
print(request.POST['pay'])
print(request.POST)
except KeyError:
return HttpResponseRedirect('/add-clone')
return render(request, template_name="save_data.jinja", context=to_template)

View File

@ -2,7 +2,7 @@
{% block CONTENT %}<div class="position-relative" style="height: 90vh;"> {% block CONTENT %}<div class="position-relative" style="height: 90vh;">
<div class="position-absolute top-50 start-50 translate-middle"> <div class="position-absolute top-50 start-50 translate-middle">
<p style="color: slategray" class="text-sm-end small mb-0 me-2">решены проблемы любви и пропитания</p> <p style="color: slategray" class="text-sm-end small mb-0 me-2">анонимные решения проблем любви и пропитания</p>
<h1 style="color: silver" id="index-logo" class="my-0">Клонирование домашних питомцев</h1> <h1 id="index-logo" class="my-0">Клонир<u>ование питом</u>цев</h1>
</div> </div>
</div>{% endblock CONTENT %} </div>{% endblock CONTENT %}

View File

@ -0,0 +1,72 @@
{% extends 'base.jinja' %}
{% block CONTENT %}<form action="/save-clone" method="post">
<div class="row">
<div class="col-12 px-4 my-2">
<h1>Регистрация клонированного питомца</h1>
</div>
</div>
<div class="row px-3">
<div class="col-6">
<div class="input-group mb-3">
<span class="input-group-text" id="pet-type"><i class="fa-solid fa-paw"></i></span>
<select class="form-select" aria-label="Тип питомца" name="type">{% for TYPE in PET_TYPES %}
<option{% if forloop.last %} selected{% endif %} value="{{ TYPE.0 }}">{{ TYPE.1 }}</option>{% endfor %}
</select>
<select class="form-select" aria-label="Пол" name="sex">{% for SEX in PET_SEXES %}
<option{% if forloop.last %} selected{% endif %} value="{{ SEX.0 }}">{{ SEX.1 }}</option>{% endfor %}
</select>
</div>
</div>
<div class="col-3">
<div class="form-check pt-2 mb-3">
<input class="form-check-input" type="checkbox" value="1" id="IsAlive" name="is-alive" checked>
<label class="form-check-label" for="IsAlive">
Живой
</label>
</div>
</div>
<div class="col-6">
<div class="input-group mb-3">
<span class="input-group-text" id="basic-addon1"><i class="fa-solid fa-paw"></i></span>
<input type="text" class="form-control" placeholder="имя питомца с которого сделан клон" aria-label="name"
name="name">
</div>
</div>
<div class="col-9">
<div class="input-group mb-3">
<span class="input-group-text" id="basic-addon1"><i class="fa-solid fa-comment mb-5 pb-5"></i></span>
<textarea class="form-control" aria-label="note" rows="6" name="note"></textarea>
</div>
</div>
<div class="col-4">
<div class="input-group input-group-lg mb-3">
<span class="input-group-text ps-3 pe-2 py-3 bg-dark text-light" id="basic-addon1"><i class="fa-solid fa-ruble-sign"></i></span>
<input type="text" class="form-control" placeholder="Заплачено наличными" aria-label="Заплачено"
name="pay" required>
<span class="input-group-text">.00</span>
</div>
</div>
<div class="col-3">
<div class="form-check pt-3 mb-3">
<input class="form-check-input" type="checkbox" value="1" id="reg">
<label class="form-check-label" for="flexCheckDefault">
Без регистрации
</label>
</div>
</div>
</div>
<div class="row px-3">
<div class="col-12">
{% csrf_token %}
<a type="button" class="btn btn-secondary" href="/">Отмена</a>
<button type="submit" class="btn btn-primary ms-2">Регистрация</button>
</div>
</div>
</form>{% endblock CONTENT %}

View File

@ -0,0 +1,22 @@
{% extends 'base.jinja' %}{% block CONTENT %}<div class="position-relative" style="height: 90vh;">
<div class="position-absolute top-50 start-50 translate-middle">
<div class="progress mb-3" role="progressbar" aria-label="клонирование" aria-valuemin="0" aria-valuemax="100">
<div id="progress-bar" class="progress-bar progress-bar-striped progress-bar-animated" style="width: 1%"></div>
</div>
<p style="color: slategray" class="text-sm-end small mb-0 me-2">анонимные решения проблем любви и пропитания</p>
<h1 id="index-logo" class="my-0">Клонир<u>ование питом</u>цев</h1>
</div>
</div>{% endblock CONTENT %}
{% block JS_1 %}<script type="text/javascript">
$(document).ready(function() {
let count = 2;
const counter = setInterval(function () {
if (count++ > 100) {
clearInterval(counter);
return;
}
$('#progress-bar').css('width', count + '%');
}, 10);
});
</script>{% endblock %}