Принцип работы простейшей формы Django изображен на рисунке:
Данные при отправке формы помещаются в объект request.POST.
1. Создадим приложение формы обратной связи:
2. Отредактируем главный файл роутов нашего проекта - urls.py:
Таким образом, если перейти по адресу /contact/, то будет подключен файл contact/urls.py роутов приложения contact.
3. Создадим файл роутов приложения contact/urls.py:
Получается, что если перейти по адресу /contact/, то будет вызван метод contact, расположенный в файле contact/views.py.
4. Создадим представление views.py:
Это представление отвечает за вывод формы, а также за обработку данных формы
5. Создадим шаблон формы contact.html:
6. Теперь зайдите по адресу /contact/. Попробуйте отправить форму, заполнив только поле Имя. Будут показано 2 сообщения об ошибке, информация в поле Имя будет сохранена:

Вот таков принцип обработки веб-форм в Django. Но представьте, если полей будет 20, а то и 30. Сколько же тогда изменений придется вносить в html и представление views.py! При таком положении очень легко будет допустить ошибку. Именно по этому в Django есть инструменты, которые позволяют создавать формы с существенно меньшим объемом кода и за значительно меньшее время. И это справедливо, т.к. Django - веб-фреймворк, созданный, чтобы облегчить жизнь разработчикам.
Данные при отправке формы помещаются в объект request.POST.
1. Создадим приложение формы обратной связи:
manage.py startapp contact
2. Отредактируем главный файл роутов нашего проекта - urls.py:
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# ...
# будем подключать urls.py приложения contact
url(r'^contact/', include('contact.urls')),
)
Таким образом, если перейти по адресу /contact/, то будет подключен файл contact/urls.py роутов приложения contact.
3. Создадим файл роутов приложения contact/urls.py:
from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^$', 'contact.views.contact', name='contact'),
)
Получается, что если перейти по адресу /contact/, то будет вызван метод contact, расположенный в файле contact/views.py.
4. Создадим представление views.py:
# -*- coding: utf-8 -*-
from django.shortcuts import render
from django.http import HttpResponse
def contact(request):
errors = []
form = {}
if request.POST:
form['name'] = request.POST.get('name')
form['email'] = request.POST.get('email')
form['message'] = request.POST.get('message')
if not form['name']:
errors.append('Заполните имя')
if '@' not in form['email']:
errors.append('Введите корректный e-mail')
if not form['message']:
errors.append('Введите сообщение')
if not errors:
# ... сохранение данных в базу
return HttpResponse('Спасибо за ваше сообщение!')
return render(request, 'contact.html', {'errors': errors, 'form':form})
Это представление отвечает за вывод формы, а также за обработку данных формы
5. Создадим шаблон формы contact.html:
<html>
<head>
<title>Django</title>
</head>
<body>
{% if errors %}
-
{% for error in errors %}
- {{ error }} {% endfor %}
6. Теперь зайдите по адресу /contact/. Попробуйте отправить форму, заполнив только поле Имя. Будут показано 2 сообщения об ошибке, информация в поле Имя будет сохранена:

Вот таков принцип обработки веб-форм в Django. Но представьте, если полей будет 20, а то и 30. Сколько же тогда изменений придется вносить в html и представление views.py! При таком положении очень легко будет допустить ошибку. Именно по этому в Django есть инструменты, которые позволяют создавать формы с существенно меньшим объемом кода и за значительно меньшее время. И это справедливо, т.к. Django - веб-фреймворк, созданный, чтобы облегчить жизнь разработчикам.

Комментариев нет:
Отправить комментарий