{"id":30850390,"url":"https://github.com/itwebpro/catalog_python_django","last_synced_at":"2026-05-18T04:42:02.081Z","repository":{"id":306330194,"uuid":"1025543640","full_name":"itwebpro/Catalog_Python_Django","owner":"itwebpro","description":"пример веб-приложения на Python + Django для каталога товаров с административной панелью и пользовательским интерфейсом","archived":false,"fork":false,"pushed_at":"2025-07-24T21:30:54.000Z","size":620,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-07-25T03:20:38.690Z","etag":null,"topics":["django","django-framework","python","python3","sqlite3","web","website"],"latest_commit_sha":null,"homepage":"https://itwebpro.ru","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/itwebpro.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-24T12:16:39.000Z","updated_at":"2025-07-24T21:30:58.000Z","dependencies_parsed_at":"2025-07-25T03:20:49.156Z","dependency_job_id":"3ac39051-41ef-452f-bb63-aacb1203d144","html_url":"https://github.com/itwebpro/Catalog_Python_Django","commit_stats":null,"previous_names":["itwebpro/catalog_python_django"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/itwebpro/Catalog_Python_Django","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itwebpro%2FCatalog_Python_Django","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itwebpro%2FCatalog_Python_Django/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itwebpro%2FCatalog_Python_Django/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itwebpro%2FCatalog_Python_Django/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/itwebpro","download_url":"https://codeload.github.com/itwebpro/Catalog_Python_Django/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itwebpro%2FCatalog_Python_Django/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274001213,"owners_count":25205211,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-07T02:00:09.463Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["django","django-framework","python","python3","sqlite3","web","website"],"created_at":"2025-09-07T06:01:17.247Z","updated_at":"2026-05-18T04:42:02.052Z","avatar_url":"https://github.com/itwebpro.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Сatalog_Python_Django\nпример веб-приложения на Python + Django для каталога товаров с административной панелью и пользовательским интерфейсом\n\nПример создания каталога товаров и админ панели на Python + Django. Админ панель: вход по паролю. Добавление, редактирование, удаление товаров. Форма для товаров: название, описание, цена, категория, фото товара (до 10 штук фото файлов). Пользовательная часть: вывод товаров по-странично, сортировка по дате добавления, названию, цене. Форма поиска по названию и описанию.\n\n\n### 1. Создание проекта и приложения\n\n```bash\ndjango-admin startproject catalog_project\ncd catalog_project\npython manage.py startapp catalog\n```\n\n---\n\n### 2. Настройка `settings.py`\n\nДобавьте `catalog` в `INSTALLED_APPS`:\n\n```python\n# catalog_project/settings.py\nINSTALLED_APPS = [\n    # ...\n    'django.contrib.admin',\n    'django.contrib.auth',\n    'django.contrib.contenttypes',\n    'django.contrib.sessions',\n    'django.contrib.messages',\n    'django.contrib.staticfiles',\n    'catalog',  # ваше приложение\n]\n```\n\nзамените ALLOWED_HOSTS = [] на ALLOWED_HOSTS = ['127.0.0.1', 'localhost']\n\n\nНастройте базу данных и медиа файлы:\n\n```python\n# catalog_project/settings.py\nimport os\n\nMEDIA_URL = '/media/'\nMEDIA_ROOT = os.path.join(BASE_DIR, 'media')\n```\n\n---\n\n### 3. Модели товаров\n\nСоздайте модель `Category` и `Product` в `catalog/models.py`:\n\n```python\n# catalog/models.py\nfrom django.db import models\n\nclass Category(models.Model):\n    name = models.CharField(max_length=100)\n\n    def __str__(self):\n        return self.name\n\nclass Product(models.Model):\n    name = models.CharField(max_length=200)\n    description = models.TextField()\n    price = models.DecimalField(max_digits=10, decimal_places=2)\n    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='products')\n    created_at = models.DateTimeField(auto_now_add=True)\n    # Для хранения нескольких фото, используем отдельную модель\n    # или можно использовать JSONField (но лучше отдельная модель)\n    \n    def __str__(self):\n        return self.name\n\nclass ProductImage(models.Model):\n    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='images')\n    image = models.ImageField(upload_to='product_images/')\n\n    def __str__(self):\n        return f\"{self.product.name} Image\"\n```\n\n---\n\n### 4. Миграции\n\n```bash\npython manage.py makemigrations\npython manage.py migrate\n```\n\n---\n\n### 5. Админка\n\nЗарегистрируйте модели в `catalog/admin.py`:\n\n```python\n# catalog/admin.py\nfrom django.contrib import admin\nfrom .models import Category, Product, ProductImage\n\nclass ProductImageInline(admin.TabularInline):\n    model = ProductImage\n    extra = 1\n\n@admin.register(Category)\nclass CategoryAdmin(admin.ModelAdmin):\n    list_display = ('name',)\n\n@admin.register(Product)\nclass ProductAdmin(admin.ModelAdmin):\n    list_display = ('name', 'category', 'price', 'created_at')\n    list_filter = ('category',)\n    search_fields = ('name', 'description')\n    inlines = [ProductImageInline]\n```\n\n---\n\n### 6. URL конфигурация\n\nДобавьте маршруты в `catalog_project/urls.py`:\n\n```python\n# catalog_project/urls.py\nfrom django.contrib import admin\nfrom django.urls import path, include\nfrom django.conf import settings\nfrom django.conf.urls.static import static\n\nurlpatterns = [\n    path('admin/', admin.site.urls),\n    path('', include('catalog.urls')),\n]\n\nif settings.DEBUG:\n    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)\n```\n\nСоздайте `catalog/urls.py` для пользовательской части:\n\n```python\n# catalog/urls.py\nfrom django.urls import path\nfrom . import views\n\nurlpatterns = [\n    path('', views.product_list, name='product_list'),\n]\n```\n\n---\n\n### 7. Представления и шаблоны\n\nСоздайте `views.py` для отображения товаров с пагинацией, сортировкой и поиском:\n\n```python\n# catalog/views.py\nfrom django.shortcuts import render\nfrom .models import Product\nfrom django.core.paginator import Paginator\nfrom django.db import models\n\ndef product_list(request):\n    products = Product.objects.all()\n\n    # Поиск\n    query = request.GET.get('q')\n    if query:\n        products = products.filter(models.Q(name__icontains=query) | models.Q(description__icontains=query))\n    \n    # Сортировка\n    sort = request.GET.get('sort')\n    if sort in ['name', '-name', 'price', '-price', 'created_at', '-created_at']:\n        products = products.order_by(sort)\n\n    # Пагинация\n    paginator = Paginator(products, 10)  # 10 товаров на страницу\n    page_number = request.GET.get('page')\n    page_obj = paginator.get_page(page_number)\n\n    context = {\n        'page_obj': page_obj,\n        'query': query,\n        'sort': sort,\n    }\n    return render(request, 'catalog/product_list.html', context)\n```\n\nСоздайте шаблон `catalog/templates/catalog/product_list.html`:\n\n```html\n\u003c!-- catalog/templates/catalog/product_list.html --\u003e\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n\u003chead\u003e\n    \u003ctitle\u003eКаталог товаров\u003c/title\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n    \u003ch1\u003eКаталог товаров\u003c/h1\u003e\n\n    \u003cform method=\"get\" action=\"\"\u003e\n        \u003cinput type=\"text\" name=\"q\" placeholder=\"Поиск...\" value=\"{{ query }}\"\u003e\n        \u003cbutton type=\"submit\"\u003eНайти\u003c/button\u003e\n    \u003c/form\u003e\n\n    \u003cp\u003eСортировать по:\n        \u003ca href=\"?sort=name\"\u003eНазванию\u003c/a\u003e |\n        \u003ca href=\"?sort=-name\"\u003eНазванию (убыв.)\u003c/a\u003e |\n        \u003ca href=\"?sort=price\"\u003eЦене\u003c/a\u003e |\n        \u003ca href=\"?sort=-price\"\u003eЦене (убыв.)\u003c/a\u003e |\n        \u003ca href=\"?sort=created_at\"\u003eДате добавления\u003c/a\u003e |\n        \u003ca href=\"?sort=-created_at\"\u003eДате (убыв.)\u003c/a\u003e\n    \u003c/p\u003e\n\n    \u003cul\u003e\n        {% for product in page_obj.object_list %}\n            \u003cli\u003e\n                \u003ch2\u003e{{ product.name }}\u003c/h2\u003e\n                \u003cp\u003e{{ product.description }}\u003c/p\u003e\n                \u003cp\u003eЦена: {{ product.price }}\u003c/p\u003e\n                \u003cp\u003eКатегория: {{ product.category.name }}\u003c/p\u003e\n                \u003cp\u003eДобавлено: {{ product.created_at }}\u003c/p\u003e\n                {% if product.images.all %}\n                    {% for img in product.images.all|slice:\":10\" %}\n                        \u003cimg src=\"{{ img.image.url }}\" alt=\"{{ product.name }}\" style=\"max-width:200px;\"\u003e\n                    {% endfor %}\n                {% endif %}\n            \u003c/li\u003e\n        {% endfor %}\n    \u003c/ul\u003e\n\n    \u003cdiv\u003e\n        {% if page_obj.has_previous %}\n            \u003ca href=\"?page={{ page_obj.previous_page_number }}{% if query %}\u0026q={{ query }}{% endif %}{% if sort %}\u0026sort={{ sort }}{% endif %}\"\u003eПредыдущая\u003c/a\u003e\n        {% endif %}\n\n        Страница {{ page_obj.number }} из {{ page_obj.paginator.num_pages }}\n\n        {% if page_obj.has_next %}\n            \u003ca href=\"?page={{ page_obj.next_page_number }}{% if query %}\u0026q={{ query }}{% endif %}{% if sort %}\u0026sort={{ sort }}{% endif %}\"\u003eСледующая\u003c/a\u003e\n        {% endif %}\n    \u003c/div\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n```\n\n---\n\n### 8. Создание суперпользователя и запуск\n\nСоздайте суперпользователя для входа в админку:\n\n```bash\npython manage.py createsuperuser\n```\n\nЗапустите сервер:\n\n```bash\npython manage.py runserver\n```\n\nПерейдите по адресу `http://127.0.0.1:8000/admin/` и войдите под админом. Там вы можете добавлять, редактировать и удалять товары, категории и изображения.\n\nПользовательская часть доступна по `http://127.0.0.1:8000/` Админ часть доступна по `http://127.0.0.1:8000/admin/`\n\n\nесли первый раз используете django, нужно будет его сначала установить pip install django , также возможно дополнительно нужно будет установить python -m pip install Pillow\n\nкод полность рабочий можете сразу запускать python manage.py runserver  админ логин/пароль - admin admin\nснимки экрана примера в папке - _screenshots\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitwebpro%2Fcatalog_python_django","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fitwebpro%2Fcatalog_python_django","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitwebpro%2Fcatalog_python_django/lists"}