Коли йдеться про створення сучасних додатків, поєднання потужності веб-фреймворку, такого як Django, з настільним GUI-фреймворком, як PyQt, може призвести до надзвичайно універсальних рішень. У цьому блозі ми розглянемо, як і чому можна інтегрувати PyQt з Django та створимо маленький додаток для демонстрації цієї концепції.
Чому варто використовувати PyQt і Django разом?
Потужність Django:
- Django — це потужний, високорівневий Python веб-фреймворк, що спрощує розробку бекенду.
- Він надає потужні інструменти для роботи з базами даних, аутентифікацією та API.
Потужність PyQt:
- PyQt дозволяє створювати професійні настільні додатки з багатим графічним інтерфейсом (GUI).
- Він забезпечує рідний вигляд і зручність, роблячи настільні додатки інтуїтивно зрозумілими та відзивчивими.
Варіанти використання інтеграції:
Припустимо, у вас є API або бекенд-сервіс на Django, і ви хочете створити настільного клієнта для користувачів, щоб вони могли взаємодіяти з цим сервісом. Ось де PyQt стане в нагоді. Поєднуючи Django і PyQt, ви можете:
- Використовувати Django для логіки бекенду та управління базою даних.
- Використовувати PyQt для створення настільного додатку як фронтенду.
Налаштування віртуального середовища
Що таке віртуальне середовище?
Віртуальне середовище — це ізольоване Python середовище, де ви можете встановлювати залежності для вашого проєкту, не впливаючи на глобальну інсталяцію Python. Воно забезпечує незалежне керування залежностями проєкту, що полегшує його підтримку та розгортання.
Чому варто використовувати віртуальне середовище для Django-проєктів?
- Управління залежностями: Зберігає залежності, специфічні для проєкту, окремо від глобальних Python пакетів.
- Контроль версій: Дозволяє різним проєктам використовувати різні версії одних і тих самих пакетів без конфліктів.
- Портативність: Спрощує передачу проєкту іншим, оскільки файл
requirements.txt
міститиме всі залежності.
Як налаштувати віртуальне середовище?
- Встановіть
virtualenv
, якщо у вас його ще немає:
pip install virtualenv
- Створіть віртуальне середовище:
virtualenv venv
Це створить директорію з назвою venv
у вашій проєктній папці.
- Активуйте віртуальне середовище:
- На Windows:
venv\Scripts\activate
- На macOS/Linux:
source venv/bin/activate
- Встановіть Django та інші залежності всередині віртуального середовища:
pip install django
- Для деактивації віртуального середовища, коли ви закінчите:
deactivate
Створення простого додатку: Менеджер завдань
Ми створимо менеджер завдань, де Django слугуватиме бекенд API, а PyQt — настільним GUI. Користувачі зможуть:
- Додавати завдання через GUI.
2.
Отримання та відображення завдань з бекенду.
Попередні вимоги:
- Python має бути встановлений на вашій системі.
- Базові знання Python, Django та PyQt.
Крок 1: Налаштування бекенду на Django
1.1 Встановлення Django
pip install django
1.2 Створення нового проєкту Django
django-admin startproject task_manager
cd task_manager
1.3 Створення додатку Django
python manage.py startapp tasks
1.4 Налаштування settings.py
Додайте 'tasks'
до списку INSTALLED_APPS
у settings.py
.
1.5 Опис моделей у tasks/models.py
from django.db import models
class Task(models.Model):
title = models.CharField(max_length=100)
completed = models.BooleanField(default=False)
def __str__(self):
return self.title
1.6 Запуск міграцій
python manage.py makemigrations
python manage.py migrate
1.7 Створення простого API у tasks/views.py
from django.http import JsonResponse
from .models import Task
# Отримати всі завдання
def get_tasks(request):
tasks = list(Task.objects.values())
return JsonResponse(tasks, safe=False)
# Додати нове завдання
def add_task(request):
title = request.GET.get('title')
if title:
Task.objects.create(title=title)
return JsonResponse({'message': 'Task added successfully'})
return JsonResponse({'error': 'Title is required'}, status=400)
1.8 Налаштування URL у tasks/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('get_tasks/', views.get_tasks, name='get_tasks'),
path('add_task/', views.add_task, name='add_task'),
]
Включіть tasks/urls.py
у головний urls.py
:
from django.urls import include, path
urlpatterns = [
path('tasks/', include('tasks.urls')),
]
1.9 Запуск сервера розробки
python manage.py runserver
Тепер ваше API доступне за адресою http://127.0.0.1:8000/tasks/
.
Крок 2: Налаштування фронтенду PyQt
2.1 Встановлення PyQt5
pip install pyqt5
2.2 Створення PyQt GUI
Створіть новий файл main.py
:
import sys
import requests
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget, QPushButton, QLineEdit, QListWidget
class TaskManager(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle('Task Manager')
self.layout = QVBoxLayout()
self.task_input = QLineEdit(self)
self.task_input.setPlaceholderText('Enter a new task')
self.layout.addWidget(self.task_input)
self.add_task_btn = QPushButton('Add Task', self)
self.add_task_btn.clicked.connect(self.add_task)
self.layout.addWidget(self.add_task_btn)
self.refresh_btn = QPushButton('Refresh Tasks', self)
self.refresh_btn.clicked.connect(self.fetch_tasks)
self.layout.addWidget(self.refresh_btn)
self.task_list = QListWidget(self)
self.layout.addWidget(self.task_list)
self.setLayout(self.layout)
def fetch_tasks(self):
response = requests.get('http://127.0.0.1:8000/tasks/get_tasks/')
if response.status_code == 200:
self.task_list.clear()
tasks = response.json()
for task in tasks:
self.task_list.addItem(f"{task['title']} - {'Done' if task['completed'] else 'Pending'}")
def add_task(self):
title = self.task_input.text()
if title:
requests.get(f'http://127.0.0.1:8000/tasks/add_task/?title={title}')
self.task_input.clear()
self.fetch_tasks()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = TaskManager()
window.show()
sys.exit(app.exec_())
Ось остаточна структура файлів:
task_manager/
├── manage.py
├── task_manager/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── tasks/
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
main.py
Запуск додатку
- Запустіть сервер Django:
python manage.py runserver
2.
Запустіть додаток PyQt:
python main.py
Тепер у вас є працюючий десктопний додаток, який взаємодіє з бекендом на Django!
Ресурси:
Примітка: Я продовжуватиму оновлювати цей блог, ділячись своїми знаннями та досвідом з часом.
Перекладено з: Integrating pyqt with django