Содержание страницы
Продолжая развитие нашей доски объявлений на Django 4, в этой статье мы добавим поиск и создание объявлений не через админку для авторизованных пользователей. Это позволит пользователям нашего сайта легко находить нужные объявления и добавлять свои. Если вы еще не знакомы с созданием доски объявлений на Django 4, рекомендуем сначала ознакомиться с нашей предыдущей статьей об авторизации и регистрации на доске объявлений на Django 4.
Предыдущие части цикла создания доски объявлений на Django 4:
Создание доски объявлений на Django 4: шаг за шагом. Часть 1
Добавляем авторизацию и регистрацию к доске объявлений на Django 4. Часть 2
Добавление функционала поиска по параметрам
Для того чтобы добавить функционал поиска по параметрам, мы воспользуемся формами Django и добавим соответствующий код во views.py и templates.
1.1. Создание формы поиска
Сначала создадим форму для поиска в файле forms.py:
from django import forms
class SearchForm(forms.Form):
query = forms.CharField(label='Поиск', max_length=100)
1.2. Добавление функционала поиска по параметрам в views.py
Теперь добавим функционал поиска в наш views.py:
from django.shortcuts import render
from .models import Ad
from .forms import SearchForm
def search(request):
ads = Ad.objects.all()
form = SearchForm(request.GET)
if form.is_valid():
query = form.cleaned_data['query']
ads = ads.filter(title__icontains=query)
return render(request, 'search.html', {'form': form, 'ads': ads})
1.3. Создание шаблона для поиска
Создайте файл search.html в каталоге templates и добавьте следующий код:
{% extends 'base.html' %}
{% block content %}
<h1>Поиск объявлений</h1>
<form method="get">
{{ form.as_p }}
<button type="submit">Поиск</button>
</form>
<ul>
{% for ad in ads %}
<li>{{ ad.title }}</li>
{% empty %}
<li>Ничего не найдено</li>
{% endfor %}
</ul>
{% endblock %}
1.4. Добавление URL-шаблона
Добавьте новый путь в файле urls.py:
from django.urls import path
from . import views
urlpatterns = [
# ...
path('search/', views.search, name='search'),
]
Добавление функционала создания объявлений
Для того чтобы разрешить пользователям создавать объявления без доступа к админке, мы добавим форму создания объявлений и соответствующий код во views.py и templates.
2.1. Создание формы создания объявлений
Добавьте форму создания объявлений в файле forms.py:
from .models import Ad
class AdForm(forms.ModelForm):
class Meta:
model = Ad
fields = ['title', 'description', 'price', 'image']
2.2. Добавление функционала создания объявлений в views.py
Теперь добавим функционал создания объявлений в наш views.py:
from django.shortcuts import render, redirect
from .forms import AdForm
def create_ad(request):
if request.method == 'POST':
form = AdForm(request.POST, request.FILES)
if form.is_valid():
ad = form.save(commit=False)
ad.user = request.user
ad.save()
return redirect('ads_list')
else:
form = AdForm()
return render(request, 'create_ad.html', {'form': form})
2.3. Создание шаблона для создания объявлений
Создайте файл create_ad.html в каталоге templates и добавьте следующий код:
{% extends 'base.html' %}
{% block content %}
<h1>Создать объявление</h1>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Создать</button>
</form>
{% endblock %}
2.4. Добавление URL-шаблона
Добавьте новый путь в файле urls.py:
from django.urls import path
from . import views
urlpatterns = [
# ...
path('create_ad/', views.create_ad, name='create_ad'),
]
2.5. Ограничение доступа к странице создания объявлений
Чтобы разрешить доступ к странице создания объявлений только авторизованным пользователям, используйте декоратор login_required:
from django.contrib.auth.decorators import login_required
@login_required
def create_ad(request):
# оставшийся код функции
Не забудьте импортировать декоратор login_required
в начале файла views.py.
Теперь у вас есть поиск по параметрам и создания новых объявлений для авторизованных пользователей на вашей доске объявлений на Django 4. В предыдущих статьях мы рассмотрели, как создать основную структуру доски объявлений и добавить авторизацию и регистрацию. С этими знаниями вы можете продолжить развивать свой проект и добавлять новые возможности!