ADD: ввод данных
This commit is contained in:
parent
fe9c554fb1
commit
b449e6f4d9
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* НАВИГАЦИЯ - МЕНЮ */
|
/* НАВИГАЦИЯ - МЕНЮ */
|
||||||
|
@ -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()}"
|
||||||
|
@ -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),
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
# Обработчики ошибок
|
# Обработчики ошибок
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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 %}
|
72
rosmorport_tsts/templates-django/input_data.jinja
Normal file
72
rosmorport_tsts/templates-django/input_data.jinja
Normal 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 %}
|
22
rosmorport_tsts/templates-django/save_data.jinja
Normal file
22
rosmorport_tsts/templates-django/save_data.jinja
Normal 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 %}
|
Loading…
Reference in New Issue
Block a user