Django — Проверка типа ввода, отображение сообщения об ошибке в случае ошибки

#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",
    ),
)