@normandeccc

Какой наиболее правильный способ обработки данных простейшей формы в Django?

Здравствуйте.
В учебных целях я поставил себе следующую задачу:
Создать страницу на которой пользователь вводит свое имя в поле формы, после чего он переходит на страницу, где его приветствуют по имени. Т.е, пользователь вводит имя "Вася" и на другой странице видит приветствие "Здравствуй, Вася"
Вчерне задача решена следующим способом:
Есть вьюха Put_your_name, которая принимает имя пользователя.
def Put_your_name(request):
    if request.method == 'POST':
        form = NameForm(request.POST)
        if form.is_valid():
            return HttpResponseRedirect('/Hello_user/')
    else:
        form = NameForm()

    return render(request, 'Put_your_name.html', {'form': form})

Эта вьюха практически полная копия примера из документации Django
Класс Django Form:
class NameForm(forms.Form):
    your_name = forms.CharField(label='Введите свое имя:', max_length=20)

Есть еще одна вьюха Hello_user, которая отображает введенные данные.
def Hello_user(request):
    name_of_user = request.POST['your_name']
    return render(request, 'Hello_user.html', {'form_name': name_of_user})

Код самой формы на странице Put_your_name.html таков:
<form action="/Hello_user/" method="POST">
{% csrf_token %}
{{form}}
 <p><input type="submit" value="Привет" /></p>
 </form>

Код приветствия на странице Hello_user.html таков:
<h1>Привет, {{form_name}}</h1>
Урлы:
urlpatterns = [
    url ('^name/$', Put_your_name),
    url ('^Hello_user/$', Hello_user),
]

Сам вопрос:
Правильно ли все сделано? Мне кажется, я что-то упустил, или не до конца понял назначение и возможности форм.
Во вьюхе Put_your_name я просто проверяю правильность заполнения формы и все. Данные никуда не передаются. Нельзя ли данные из вьюхи Put_your_name передать в Hello_user и не брать их из request.POST['your_name']?
Хотелось бы узнать краткое и наиболее верное решение.
Заранее спасибо за ответы и ваше внимание.
  • Вопрос задан
  • 536 просмотров
Пригласить эксперта
Ответы на вопрос 1
@kgbplus
В таком случае надо не POST, а GET использовать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы