#python #django #input
Вопрос:
Я новичок в изучении Django/Python и надеюсь на некоторую помощь. Это для задания, и я в замешательстве на последней части. Нам нужно принять входные данные от пользователя (имя в виде строки; вес, рост в дюймах и рост в футах, как int) и рассчитать ИМТ, отображая {{имя}} имт {{имт}}
У меня эта часть работает нормально, но вторая часть того, что мне нужно сделать, — это проверить, что ввод допустим, то есть это не строка, где она должна быть int, а не отрицательное число. Я должен передать это в класс. Я читал об is_valid (), но я еще не использовал его и не совсем уверен, как это сделать. Я предполагаю, что это должно быть утверждение «если бы еще».
views.py
class Home(View):
def get(self, request):
return render(request, 'home.html')
def post(self, request):
n = str(request.POST["name"])
w = int(request.POST["weight"])
hi = int(request.POST["heightinches"])
hf = int(request.POST["heightfeet"])
h = (hf*12) hi
bmi = (703*w) / (h*h)
return render(request, 'response.html',{"name":n,"heightinches":hi,"heightfeet":hf,"weight":w,"height":h,"bmi":bmi}
home.html
{% load static %}
<html>
<head><title>Home</title></head>
<body>
<h1>Hello Repl.it</h1>
<form action="" method="post">
{% csrf_token %}
name: <input type="text" name="name" id="name"/> <br>
weight: <input type="text" name="weight" id="weight"/> pounds<br>
height: <input type="text" name="heightinches" id="heightinches"/> inches<br>
<input type="text" name="heightfeet" id="heightfeet"/> feet<br>
<input type="submit"/>
</form>
</body>
</html>
response.html
{% load static %}
<html>
<head><title>Home</title></head>
<body>
{{name}}'s BMI is {{bmi|floatformat:2}}
<p><a href="home.html">Back</a></p>
</body>
</html>
Заранее спасибо за помощь! С моим инструктором не так-то просто связаться, поэтому я надеюсь, что здесь мне повезет больше :S
Комментарии:
1. Ознакомьтесь с документацией по работе с формами и API форм , конечно, вы можете использовать, если-иначе, но форма будет обрабатывать проверку / очистку за вас.
Ответ №1:
Я использую Django уже некоторое время. Django предлагает подробную библиотеку форм, встроенную в базовую библиотеку Django.
Я настоятельно рекомендую следовать этому руководству о том, как это настроить. https://docs.djangoproject.com/en/3.2/topics/forms/
Если вам требуется пользовательская проверка, вы можете добавить функцию в нижнюю часть класса InputForm, чтобы проверить это и вызвать ошибку проверки, если она не пройдет:
def check_google_url(self):
url = self.cleaned_data['url']
if "https://google.com" not in url:
raise forms.ValidationError("URL does not match Google! Please copy and paste the full google.com URL.")
else:
return url
После настройки формы вы можете использовать четкие формы для определения классов css «ошибка» и «требуется» для этой страницы. Хрустящие Формы — https://django-crispy-forms.readthedocs.io/en/latest/
self.helper.layout = Layout(
Div(
'negatives',
'positives',
'learnings',
'rating',
css_class="final-feedback",
required_css_class="error",
error_css_class="error",
title="Final Comments",
),
)