Принцип работы простейшей формы 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 - веб-фреймворк, созданный, чтобы облегчить жизнь разработчикам.
Комментариев нет:
Отправить комментарий