L o a d i n g
Создание REST API для блога на Python с Django и Django REST Framework Парсинг данных

Написание собственного API для блога — это полезный навык, который позволяет лучше понять принципы построения RESTful API и их взаимодействия с фронтендом. Используем Django и Django REST framework (DRF) для создания API, который будет обрабатывать CRUD-операции для постов блога. Разберем создание моделей, сериализацию данных, настройку маршрутов и контроллеров, а также добавим несколько лайфхаков для удобства разработки и безопасности.

Подготовка окружения

Перед началом убедитесь, что у вас установлены Django и Django REST framework. Если нет, установим их через pip:

pip install django djangorestframework

Создадим проект и приложение для нашего блога:

django-admin startproject blog_projectcd blog_projectdjango-admin startapp blog

Зарегистрируем наше приложение и rest_framework в INSTALLED_APPS в settings.py:

# blog_project/settings.pyINSTALLED_APPS = [    # остальные приложения    'rest_framework',    'blog',]

Шаг 1. Создание моделей для блога

Определим модель для поста блога с полями для заголовка, содержимого и даты публикации.

# blog/models.pyfrom django.db import modelsclass Post(models.Model):    title = models.CharField(max_length=200)    content = models.TextField()    created_at = models.DateTimeField(auto_now_add=True)    def __str__(self):        return self.title

Выполним миграции, чтобы создать таблицу в базе данных:

python manage.py makemigrationspython manage.py migrate

Шаг 2. Настройка сериализаторов

Создадим сериализатор для модели Post:

# blog/serializers.pyfrom rest_framework import serializersfrom .models import Postclass PostSerializer(serializers.ModelSerializer):    class Meta:        model = Post        fields = ['id', 'title', 'content', 'created_at']

Шаг 3. Создание представлений для API

Используем ModelViewSet для автоматического создания методов CRUD:

# blog/views.pyfrom rest_framework import viewsetsfrom .models import Postfrom .serializers import PostSerializerclass PostViewSet(viewsets.ModelViewSet):    queryset = Post.objects.all().order_by('-created_at')    serializer_class = PostSerializer

Шаг 4. Настройка маршрутов

Теперь подключим маршруты для нашего API:

# blog/urls.pyfrom django.urls import path, includefrom rest_framework.routers import DefaultRouterfrom .views import PostViewSetrouter = DefaultRouter()router.register(r'posts', PostViewSet)urlpatterns = [    path('', include(router.urls)),]

Добавим blog/urls.py в основной файл маршрутов:

# blog_project/urls.pyfrom django.contrib import adminfrom django.urls import path, includeurlpatterns = [    path('admin/', admin.site.urls),    path('api/', include('blog.urls')),]

Шаг 5. Лайфхаки для улучшения API

1. Пагинация

Добавим пагинацию, задав количество элементов на странице в settings.py:

# blog_project/settings.pyREST_FRAMEWORK = {    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',    'PAGE_SIZE': 10,}

2. Фильтрация и поиск

Добавим фильтрацию и поиск по заголовку поста:

# blog/views.pyfrom rest_framework import viewsets, filtersfrom django_filters.rest_framework import DjangoFilterBackendfrom .models import Postfrom .serializers import PostSerializerclass PostViewSet(viewsets.ModelViewSet):    queryset = Post.objects.all().order_by('-created_at')    serializer_class = PostSerializer    filter_backends = [DjangoFilterBackend, filters.SearchFilter]    filterset_fields = ['created_at']    search_fields = ['title']

Шаг 6. Тестирование API

Настройте Postman или используйте команду curl для тестирования:

curl -X POST http://localhost:8000/api/posts/ \  -H "Content-Type: application/json" \  -d '{"title": "Первый пост", "content": "Содержание первого поста"}'

Шаг 7. Безопасность и авторизация

Добавим JWT авторизацию:

pip install djangorestframework-simplejwt

Подключаем JWT в settings.py:

# blog_project/settings.pyREST_FRAMEWORK = {    'DEFAULT_AUTHENTICATION_CLASSES': (        'rest_framework_simplejwt.authentication.JWTAuthentication',    ),}

Добавим маршруты для получения токена:

# blog/urls.pyfrom rest_framework_simplejwt.views import (    TokenObtainPairView,    TokenRefreshView,)urlpatterns += [    path('token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),    path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),]

Заключение

Мы создали полноценный REST API для блога, настроили маршруты, добавили пагинацию, фильтрацию и авторизацию. Такой API легко подключить к фронтенду, будь то мобильное приложение или SPA (например, на React или Vue).

Теперь у вас есть базовый API для блога, который можно легко адаптировать и расширять.

Написать комментарий

Вы можете оставить комментарий автору статьи Обязательные поля помечены *