DjangoPython

Добавляем поиск и создания объявлений в доске объявлений на Django 4 Часть 3

Продолжая развитие нашей доски объявлений на 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. В предыдущих статьях мы рассмотрели, как создать основную структуру доски объявлений и добавить авторизацию и регистрацию. С этими знаниями вы можете продолжить развивать свой проект и добавлять новые возможности!

3/5 - (2 голоса)

Добавить комментарий

Back to top button