Гостевая книга на Django

Тема в разделе 'Блогосфера', создана пользователем f-duck, 29 май 2011.

  1. f-duck Новичок

    Django?

    Django (Джанго) — свободный фреймворк для веб-приложений на языке Python. Изначально проект был создан для управления новостными сайтами LJWorld.com, lawrence.com и KUsports.com, принадлежащими компании The World Company (Лоуренс, Канзас (en), США).

    Сайт на Django строится из одного или нескольких приложений, которые рекомендуется делать отчуждаемыми и подключаемыми. Это одно из существенных архитектурных отличий этого фреймворка от некоторых других (например, Ruby on Rails).

    Также в отличие от других фреймворков обработчики URL в Django конфигурируются явно при помощи регулярных выражений, а не выводятся автоматически из структуры моделей контроллеров.

    Для работы с базой данных Django использует собственный ORM, в котором модель данных описывается классами Python, и по ней генерируется схема базы данных.
    ***Для просмотра ссылок необходимо войти или зарегистрироваться***
    Guestbook
    Сегодня я покажу, как пишется простейшее приложение на Django. Под простейшим приложением я подразумеваю обычную гостевую книгу.

    Хочу заметить, что я не преследую цель написать сложный код, который был бы непонятен новичкам. Например, вместо обычных views можно использовать generic views, но я не буду. Потому что это сложная для понимания тема.

    Пора приступать. Для начала, нужно установить ***Для просмотра ссылок необходимо войти или зарегистрироваться***. Ознакомиться с языком можно, почитав официальный ***Для просмотра ссылок необходимо войти или зарегистрироваться***.
    Установив Python, инсталлируем ***Для просмотра ссылок необходимо войти или зарегистрироваться***. Обзор Django можно почитать ***Для просмотра ссылок необходимо войти или зарегистрироваться***.

    С установкой проблем не должно возникнуть. Поэтому перейдем к настройке проекта.
    Тут придется работать с консолью.
    На данный момент я пишу на Windows 7, но это не очень удобно.

    Запускаем консоль (cmd.exe) и перемещаемся в папку, где будут храниться проекты.

    Теперь в консоли пишем:
    Код:
    django-admin.py startproject guestbook
    Создается проект:

    Не беспокойтесь, если у Вас не все файлы, как на скриншоте. У меня уже готовый, написанный проект, поэтому там уже добавлены конечные файлы.

    Настроим наш проект: для этого открываем файл settings.py
    Ниже я опишу строки, которые редактировал и краткое пояснение.
    Код:
    TIME_ZONE = 'Europe/Moscow' # Для корректной обработки времен
    
    LANGUAGE_CODE = 'ru-RU' # Перевод на русский язык админ. панели
    
    TEMPLATE_DIRS = (
        # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
        # Always use forward slashes, even on Windows.
        # Don't forget to use absolute paths, not relative paths.
        "D:/Python/Projects/guestbook/tpl" # Указываем ПОЛНЫЙ путь до папки с html шаблонами
    )
    
    В INSTALLED_APPS добавляем строку:
    'guestbook.website', (именно с запятой в конце)
    Для чего это строка, я объясню позже
    Теперь нам нужно создать приложение - гостевую книгу. В Django приложения, как плагины.

    В консоли пишем:
    Код:
    cd guestbook
    manage.py startapp website
    Должно получиться нечто подобное:


    Разработку приложения я начинаю с формирования моделей (грубо говоря, база данных. В Django можно не написать ни 1 строки SQL кода.)
    Открываем файл models.py, удаляем все и вставляем следующий код:
    Код:
    from django.db import models
    from django import forms
    
    class Post(models.Model):
        message = models.CharField(max_length=140)
        user_name = models.CharField(max_length=20)
        email = models.EmailField()
        date = models.DateField(auto_now_add=True)
    
    class PostForm(forms.Form):
        user_name = forms.CharField(max_length=20)
        email = forms.EmailField()
        message = forms.CharField()
    Таблица в БД формируется из Python класса, который наследует models.Model из самого фреймворка. Строки - переменные класса. Значения переменных - тип данных я БД. Важный момент: Django сама будет проводить валидацию данных. Т.е. в ячейку с типом models.EmailField() нельзя будет записать ничего, кроме электронной почты.

    Второй класс - это каркас для формы. Тут такой же принцип, только наследуется класс forms.Form. Валидация также относится и к этому классу.

    Все, модель описана, теперь нужно добавить эту модель в настройки, сформировать саму БД.
    Открываем settings.py, и редактриуем код следующим образом:
    Код:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
            'NAME': 'guestbook',                      # Or path to database file if using sqlite3.
            'USER': '',                      # Not used with sqlite3.
            'PASSWORD': '',                  # Not used with sqlite3.
            'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
            'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
        }
    }
    Важный момент:
    В urls.py нужно расскоментировать строки
    Код:
    from django.contrib import admin
    
    admin.autodiscover()
    
    url(/r'^admin/', include(admin.site.urls)),
    А в settings.py расскоментировать 1 строку:
    Код:
    'django.contrib.admin',
    Ранее мы уже добавили в installed apps наше приложение. Пора генерировать БД.
    Открываем консоль и пишем:
    Код:
    manage.py syncdb
    Побегут строки, нам предложат создать суперпользователя, для того, что бы зайти в панель администрирования.
    После этого, запускаем сервер:
    Код:
    manage.py runserver
    И, если все правильно сделано, переходим 127.0.0.1:8000/admin,
    логинимся и видим панель администрирования, которую сделал сам фреймворк. Прелесть, а?

    Отлично, теперь настроим ссылки так, что бы при открытии корневой папки запускалось наше приложение.
    Открываем urls.py и добавляем строки:


    Стоит отметить, что ссылки - простые регулярные выражения.

    Переходим к написанию представления. Открываем views.py и пишем:
    Код:
    # -*- coding: utf-8 -*-
    from django.shortcuts import render_to_response
    from django.http import HttpResponseRedirect
    from django.template import RequestContext
    from website.models import Post, PostForm
    
    def index(request):
        if request.method == 'POST':
            form = PostForm(request.POST)
            if form.is_valid():
                message = form.cleaned_data['message']
                user_name = form.cleaned_data['user_name']
                email = form.cleaned_data['email']
                p = Post(message=message, user_name=user_name, email=email)
                p.save()
                return HttpResponseRedirect('')
        else:
            form = PostForm()
        post_list = Post.objects.all().order_by('-date')
        return render_to_response('index.html', {'post': post_list, 'form': form,}, context_instance=RequestContext(request))
    
    Сначала мы устанавливаем кодировку. Потом импортируем нужные библиотеки и наши модели Post, PostForm, создаем функцию представления index и передаем запрос в аргументе.
    Если была отправлена форма, проверяем и записываем в БД, делаем редирект.
    Иначе создаем форму и выводим все сообщения в шаблон, передав переменные.

    Более подробно можно почитать на djangoproject.com.


    Отлично!
    Осталось создать шаблон, который размещен в папке с названием tpl, в корне проекта.
    В шаблоне используется Django шаблонизатор, который предельно прост:
    Код:
    {{ variable_name }}
    {% синтаксическая конструкция %}
    Для админ. панели создаем файл в website: admin.py:
    Код:
    from django.contrib import admin
    from website.models import Post
    
    class PostAdmin(admin.ModelAdmin):
        list_display = ('user_name', 'date', 'message')
    
    admin.site.register(Post, PostAdmin)
    Сначала заставляем Django отображать названия данных, потом регистрируем наши модели в админ. панель.

    Запускаем сервер, заходим на 127.0.0.1:8000
    И видим следующее:

    На этом все.
    Если описывать более подробно, можно написать целую книгу. Поэтому параллельно нужно читать оф. док-цию: ***Для просмотра ссылок необходимо войти или зарегистрироваться***

    PS. В приложении готовый проект.

    Вложения:

    • guestbook.zip
      Размер файла:
      13 КБ
      Просмотров:
      22
    Khrome, Nieve, XmP и ещё 1-му нравится это.
  2. Admin Админ

    Шикарно оформлено и грамотно написано. Спасибо. Отлично.
  3. Khrome Exterminate!

    Впечатлило! Я обязательно попробую Django на выходных. Найти бы еще подобных примеров :)
  4. f-duck Новичок

    На самом деле это еще цветочки, как я писал в теме, можно было использовать Generic Views, т.е. не писать Views отдельно, а в файле настроек УРЛов прописать их автоматическую генерацию. Но это подойдет только в том случае, когда просто нужно передать данные (что в большинстве случаев и требуется).
  5. Viktor Новичок

    спасибо, очень понятно и интересно расписано! А есть еще темы Django?

Поделиться этой страницей