Обработка форм
Объект Request
request.path Полный путь, не включая домен, но включая ведущий символ слеша (“/hello/”) request.get_host() Доменное имя (“127.0.0.1:8000” или “www.example.com”) request.get_full_path() Путь path вместе со строкой запроса (если присутствует) (“/hello/?print=true”) request.is_secure() True, если запрос отправлен по протоколу HTTPS, иначе False (True или False) request.META - мета заголовки, IP, USER-AGENT и тд. request.GET - данные переданные в GET запросе request.POST - данные перданные в POST запросе
Пример обработки формы
def search(request): if ‘q’ in request.GET and request.GET[‘q’]: q = request.GET[‘q’] books = Book.objects.filter(title__icontains=q) return render_to_response(‘search_results.html’, {‘books’: books, ‘query’: q}) else: return HttpResponse(‘Введите поисковый запрос.’) # Проверка что q сущенствует в GET, # Проверка что GET['q'] не пуст #__icontains = поиск без учета регистра
Шаблон:
{% if books %}
Найдено {{ books|length }} книг{{ books|pluralize }}.
-
- {% for book in books %}
- {{ book.title }}
{% endfor %}
# Query_Set | length — отображает количество объектов Query_Set переданной модели query_set # Query_Set | pluralize — добавляет окончение ‘S’ если кол-ва объектов Query_Set больше одного\
Форма отправки отчетов
from django.core.mail import send_mail from django.http import HttpResponseRedirect from django.shortcuts import render_to_response def contact(request): errors = [] if request.method == ‘POST’: if not request.POST.get(‘subject’, ‘’): errors.append(Введите тему.’) if not request.POST.get(‘message’, ‘’): errors.append(‘Введите сообщение.’) if request.POST.get(‘e-mail’) and ‘@’ not in request.POST[‘e-mail’]: errors.append(‘Введите правильный адрес e-mail.’) if not errors: send_mail( request.POST[‘subject’], request.POST[‘message’], request.POST.get(‘e-mail’, ‘noreply@example.com’), [‘siteowner@example.com’], ) return HttpResponseRedirect(‘/contact/thanks/’) return render_to_response(‘contact_form.html’, ‘errors’: errors}) # return HttpResponseRedirect(‘/contact/thanks/’) - Перенаправление на новый адрес
Библиотека Django.forms
В сообществе принято соглашение помещать все классы Form в отдельный файл forms.py.
from django import forms class ContactForm(forms.Form): subject = forms.CharField(max_length = 100, label = 'Тема', widget=forms.TextInput(attrs={'placeholder': 'Search', 'class':'cust_class',})) e-mail = forms.EmailField(required=False) # required=False - необязательное поля message = forms.CharField(widget = forms.Textarea)
Список всех доступных полей(https://docs.djangoproject.com/en/2.2/topics/forms/modelforms/#modelform)
Примеры:
>>> print f[‘subject’] >>> print f[‘message’] >>> print f.as_ul()
# Вставка форм в html
{{ form.as_table}} # Оббертывает форму в теги table
{{form.as_ul}}, {{form.as_p}} # Оббертывает форму в теги ul, p
……….
Обработка форм в views.py
from django.shortcuts import render_to_response
from mysite.contact.forms import ContactForm
def contact(request):
if request.method == ‘POST’:
form = ContactForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
send_mail(
cd[‘subject’],
cd[‘message’],
cd.get(‘e-mail’, ‘noreply@example.com’),
[‘siteowner@example.com’],
)
return HttpResponseRedirect(‘/contact/thanks/’)
else:
form = ContactForm(
initial = {‘subject’: ‘Начальное значение поля Subject’, }
)
return render_to_response(‘contact_form.html’, {‘form’: form})
# contact_form.html
Свяжитесь с нами
{% if form.errors %}
Исправьте следующие ошибки{{ form.errors|pluralize }}
{% endif %}
{% csrf_tooken %}
{{ form.as_table }}
Приложение
Model field Form field AutoField Not represented in the form BigAutoField Not represented in the form BigIntegerField IntegerField with min_value set to -9223372036854775808 and max_value set to 9223372036854775807. BinaryField CharField, if editable is set to True on the model field, otherwise not represented in the form. BooleanField BooleanField, or NullBooleanField if null=True. CharField CharField with max_length set to the model field’s max_length and empty_value set to None if null=True. DateField DateField DateTimeField DateTimeField DecimalField DecimalField EmailField EmailField FileField FileField FilePathField FilePathField FloatField FloatField ForeignKey ModelChoiceField (see below) ImageField ImageField IntegerField IntegerField IPAddressField IPAddressField GenericIPAddressField GenericIPAddressField ManyToManyField ModelMultipleChoiceField (see below) NullBooleanField NullBooleanField PositiveIntegerField IntegerField PositiveSmallIntegerField IntegerField SlugField SlugField SmallIntegerField IntegerField TextField CharField with widget=forms.Textarea TimeField TimeField URLField URLField