четверг, 24 октября 2013 г.

Простейшая форма на 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 %}
{% endif %}
{% csrf_token %}
</body> </html>

6. Теперь зайдите по адресу /contact/. Попробуйте отправить форму, заполнив только поле Имя. Будут показано 2 сообщения об ошибке, информация в поле Имя будет сохранена:



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

Комментариев нет:

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