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-weight: 400;
font-style: normal;
color: silver;
display: inline-block;
}
/* НАВИГАЦИЯ - МЕНЮ */

View File

@ -11,9 +11,10 @@ class TbPetsClones(models.Model):
"""Модель для хранения клонов питомцев"""
class PetType(models.IntegerChoices):
"""Тип питомца"""
DOG = 1, "Собака"
CAT = 2, "Кошка"
BIR = 3, "Птица"
DOG = 1, "Собачка"
CAT = 2, "Кошечка"
BIR = 3, "Птичка"
FIS = 6, "Рыбка"
ROD = 4, "Грызун"
REP = 5, "Рептилия"
OTH = 0, "Неизвестная зверушка"
@ -93,8 +94,12 @@ class TbPetsClones(models.Model):
def __str__(self):
return self.__unicode__()
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:
# если объект новый, то генерируем серийный номер
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'^login$', views.my_login),
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.contrib.auth import authenticate, login, logout
from django.template.exceptions import TemplateDoesNotExist, TemplateSyntaxError
from rosmorport_tsts.models import TbPetsClones
def index(request: HttpRequest) -> HttpResponse:
@ -57,3 +59,36 @@ def not_auth(request: HttpRequest) -> HttpResponse:
"""
to_template = {"META_REFRESH": "15; url=/"}
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;">
<div class="position-absolute top-50 start-50 translate-middle">
<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>
<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 %}

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 %}