Dashboard Ready

This commit is contained in:
Ekaropolus 2025-05-12 23:53:58 -06:00
parent 4091bba01a
commit 9e310e0a0c
2632 changed files with 517280 additions and 56 deletions

View File

@ -1,21 +1,20 @@
kind: pipeline
type: docker
name: default
name: deploy-polisplexity
clone:
depth: 1
submodules: true # Ensure submodules like pxy_city_digital_twins are cloned
submodules: true
steps:
- name: install dependencies and check Django project
- name: install dependencies and run Django checks
image: python:3.10
environment:
DATABASE_URL:
from_secret: DATABASE_URL
SECRET_KEY:
from_secret: SECRET_KEY
DEBUG:
from_secret: DEBUG
DEBUG: "False"
NEO4J_URI:
from_secret: NEO4J_URI
NEO4J_USERNAME:
@ -31,10 +30,10 @@ steps:
commands:
- python -m pip install --upgrade pip
- pip install -r requirements.txt
- python manage.py check
- echo "✅ Django check completed"
- python manage.py check --deploy --fail-level WARNING
- echo "✅ Django deploy checks passed"
- name: deploy to production
- name: deploy to production server
image: appleboy/ssh
settings:
host:
@ -49,4 +48,7 @@ steps:
- git pull origin main
- docker compose down
- docker compose up -d --build
- echo "🚀 Deployment complete"
- docker compose exec web python manage.py migrate --noinput
- docker compose exec web python manage.py collectstatic --noinput
- echo "🚀 Production deployment complete"

View File

@ -1,14 +1,12 @@
# Use official Python image
FROM python:3.10
# Etapa base: Python oficial
FROM python:3.10-slim as base
# Set working directory
WORKDIR /app
# Variables de entorno para producción
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Copy application code
COPY . .
# Add before pip install step
RUN apt-get update && apt-get install -y \
# Instala dependencias del sistema
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
libgeos-dev \
libspatialindex-dev \
@ -20,11 +18,20 @@ RUN apt-get update && apt-get install -y \
python3-dev \
&& rm -rf /var/lib/apt/lists/*
# Install dependencies
# Crea directorio de trabajo
WORKDIR /app
# Copia requirements primero (mejor cacheo)
COPY requirements.txt .
# Instala dependencias Python
RUN pip install --no-cache-dir -r requirements.txt
# Expose the application port
# Copia el resto del proyecto
COPY . .
# Expone el puerto del contenedor
EXPOSE 8000
# Run Gunicorn server
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "polisplexity.wsgi:application"]
# Comando por defecto para producción con Gunicorn
CMD ["gunicorn", "polisplexity.wsgi:application", "--bind", "0.0.0.0:8000", "--workers=3", "--timeout=120"]

View File

@ -5,12 +5,12 @@ services:
image: postgres:15
container_name: polisplexity_postgres
restart: always
ports:
- "5434:5432"
volumes:
- pgdata:/var/lib/postgresql/data
env_file:
- .env
ports:
- "5434:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
@ -24,14 +24,20 @@ services:
depends_on:
db:
condition: service_healthy
volumes:
- .:/app # Sync local code into container for live reload
ports:
- "8001:8001"
env_file:
- .env
command: python manage.py runserver 0.0.0.0:8001
command: >
sh -c "python manage.py migrate &&
python manage.py collectstatic --noinput &&
gunicorn polisplexity.wsgi:application --bind 0.0.0.0:8001"
volumes:
- static_data:/app/static
- media_data:/app/media
# - .:/app # ←❌ No lo uses en producción: desactiva para evitar sobrescribir
volumes:
pgdata:
static_data:
media_data:

View File

@ -1,33 +1,16 @@
"""
Django settings for polisplexity project.
Generated by 'django-admin startproject' using Django 5.0.3.
For more information on this file, see
https://docs.djangoproject.com/en/5.0/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/5.0/ref/settings/
"""
from pathlib import Path
import os
import dj_database_url
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
BASE_URL = "https://app.polisplexity.tech"
# SECURITY WARNING: keep the secret key used in production secret!
# Core security settings
SECRET_KEY = os.getenv("SECRET_KEY")
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = os.getenv("DEBUG") == "True"
DEBUG = os.getenv("DEBUG", "False") == "True"
ALLOWED_HOSTS = os.getenv("ALLOWED_HOSTS", "").split(",")
# Application definition
@ -38,6 +21,8 @@ INSTALLED_APPS = [
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
# App modules
"core",
"pxy_de",
"pxy_cr",
@ -48,6 +33,11 @@ INSTALLED_APPS = [
"pxy_meta_pages",
"pxy_langchain",
"pxy_neo4j",
"pxy_dashboard",
"pxy_dashboard.custom",
"pxy_dashboard.apps",
"pxy_dashboard.components",
"pxy_dashboard.layouts",
]
MIDDLEWARE = [
@ -80,7 +70,7 @@ TEMPLATES = [
WSGI_APPLICATION = "polisplexity.wsgi.application"
# Database Configuration
# Database
DATABASES = {
"default": dj_database_url.config(default=os.getenv("DATABASE_URL"))
}
@ -99,26 +89,31 @@ TIME_ZONE = "UTC"
USE_I18N = True
USE_TZ = True
# Static and Media Files
# Static & Media Files
STATIC_URL = "/static/"
STATIC_ROOT = os.getenv("STATIC_ROOT", os.path.join(BASE_DIR, "static"))
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "polisplexity/pxy_dashboard/static/dashboard"), # Jidox assets
]
MEDIA_URL = "/media/"
MEDIA_ROOT = os.getenv("MEDIA_ROOT", os.path.join(BASE_DIR, "media"))
MEDIA_ROOT = os.path.join(BASE_DIR, "mediafiles")
# Default primary key field type
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
# Facebook API Tokens
# External services
PAGE_ACCESS_TOKEN = os.getenv("PAGE_ACCESS_TOKEN")
VERIFY_TOKEN = os.getenv("VERIFY_TOKEN")
# Async-safe for Neo4j or Celery
os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"
# Neo4j Database Configuration
# Neo4j
NEO4J_URI = os.getenv("NEO4J_URI")
NEO4J_USERNAME = os.getenv("NEO4J_USERNAME")
NEO4J_PASSWORD = os.getenv("NEO4J_PASSWORD")
# OpenAI API Key
# OpenAI
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")

View File

@ -25,11 +25,13 @@ admin.site.index_title = "Welcome to Polisplexity City Technologies Portal"
urlpatterns = [
path("admin/", admin.site.urls),
path('', include('pxy_dashboard.urls')),
path('', include('core.urls')),
path('', include('pxy_city_digital_twins.urls')),
path('pxy_whatsapp/', include('pxy_whatsapp.urls')),
path('bots/', include('pxy_bots.urls')), # Webhook URL: /bots/webhook/<bot_name>/
path('pxy_meta_pages/', include('pxy_meta_pages.urls', namespace='pxy_meta_pages')),
]
if settings.DEBUG:

View File

3
pxy_dashboard/admin.py Normal file
View File

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

6
pxy_dashboard/apps.py Normal file
View File

@ -0,0 +1,6 @@
from django.apps import AppConfig
class PxyDashboardConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'pxy_dashboard'

View File

View File

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

View File

@ -0,0 +1,5 @@
from django.apps import AppConfig
class AppsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'pxy_dashboard.apps'

View File

@ -0,0 +1,3 @@
from django.db import models
# Create your models here.

View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

View File

@ -0,0 +1,31 @@
from django.urls import path
from pxy_dashboard.apps.views import (
apps_calendar_view,
apps_chat_view,
apps_email_inbox_view,
apps_email_read,
apps_tasks,
apps_tasks_details,
apps_kanban_board,
apps_file_manager,
)
app_name = "apps"
urlpatterns = [
# Calaendar
path("calendar", view=apps_calendar_view, name="calendar"),
# Chat
path("chat", view=apps_chat_view, name="chat"),
# Email
path("email-inbox", view=apps_email_inbox_view, name="email-inbox"),
path("email-read", view=apps_email_read, name="email-read"),
# Tasks
path("tasks", view=apps_tasks, name="tasks"),
path("tasks-details", view=apps_tasks_details, name="tasks-details"),
# Kanban
path("kanban-board", view=apps_kanban_board, name="kanban"),
# File Manager
path("file-manager", view=apps_file_manager, name="file-manager"),
]

View File

@ -0,0 +1,22 @@
from django.views.generic.base import TemplateView
from django.contrib.auth.mixins import LoginRequiredMixin
class AppsView(LoginRequiredMixin,TemplateView):
pass
# Calendar
apps_calendar_view = AppsView.as_view(template_name="apps/apps-calendar.html")
# Chat
apps_chat_view = AppsView.as_view(template_name="apps/apps-chat.html")
# Mail Box
apps_email_inbox_view = AppsView.as_view(template_name="apps/apps-email-inbox.html")
apps_email_read = AppsView.as_view(template_name="apps/apps-email-read.html")
# Tasks
apps_tasks = AppsView.as_view(template_name="apps/apps-tasks.html")
apps_tasks_details = AppsView.as_view(template_name="apps/apps-tasks-details.html")
# Kanban
apps_kanban_board = AppsView.as_view(template_name="apps/apps-kanban.html")
# File Manager
apps_file_manager = AppsView.as_view(template_name="apps/apps-file-manager.html")

View File

View File

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

View File

@ -0,0 +1,5 @@
from django.apps import AppConfig
class ComponentsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'pxy_dashboard.components'

View File

@ -0,0 +1,3 @@
from django.db import models
# Create your models here.

View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

View File

@ -0,0 +1,166 @@
from django.urls import path
from pxy_dashboard.components.views import (
accordions_view,
alerts_view,
avatars_view,
badges_view,
breadcrumb_view,
buttons_view,
cards_view,
carousel_view,
collapse_view,
dropdowns_view,
embed_video_view,
grid_view,
links_view,
list_group_view,
modals_view,
notifications_view,
offcanvas_view,
placeholders_view,
pagination_view,
popovers_view,
progress_view,
spinners_view,
tabs_view,
tooltips_view,
typography_view,
utilities_view,
extended_dragula_view,
extended_range_slider_view,
extended_ratings_view,
extended_scrollbar_view,
extended_scrollspy_view,
widgets_view,
icons_remixicons_view,
icons_bootstrap_view,
icons_material_view,
apex_area_view,
apex_bar_view,
apex_bubble_view,
apex_candlestick_view,
apex_column_view,
apex_heatmap_view,
apex_line_view,
apex_mixed_view,
apex_timeline_view,
apex_boxplot_view,
apex_treemap_view,
apex_pie_view,
apex_radar_view,
apex_radialbar_view,
apex_scatter_view,
apex_polar_area_view,
apex_sparklines_view,
chartjs_area_view,
chartjs_bar_view,
chartjs_line_view,
chartjs_other_view,
form_elements_view,
form_advanced_view,
form_wizard_view,
form_fileuploads_view,
form_editors_view,
tables_basic_view,
tables_datatable_view,
google_map_view,
vector_map_view,
form_validation_view,
)
urlpatterns = [
# Base Ui
path("accordions", view=accordions_view, name="accordions"),
path("alerts", view=alerts_view, name="alerts"),
path("avatars", view=avatars_view, name="avatars"),
path("badges", view=badges_view, name="badges"),
path("breadcrumb", view=breadcrumb_view, name="breadcrumb"),
path("buttons", view=buttons_view, name="buttons"),
path("cards", view=cards_view, name="cards"),
path("carousel", view=carousel_view, name="carousel"),
path("collapse", view=collapse_view, name="collapse"),
path("dropdowns", view=dropdowns_view, name="dropdowns"),
path("embed-video", view=embed_video_view, name="embed-video"),
path("grid", view=grid_view, name="grid"),
path("links", view=links_view, name="links"),
path("list-group", view=list_group_view, name="list-group"),
path("modals", view=modals_view, name="modals"),
path("notifications", view=notifications_view, name="notifications"),
path("offcanvas", view=offcanvas_view, name="offcanvas"),
path("placeholders", view=placeholders_view, name="placeholders"),
path("pagination", view=pagination_view, name="pagination"),
path("popovers", view=popovers_view, name="popovers"),
path("progress", view=progress_view, name="progress"),
path("spinners", view=spinners_view, name="spinners"),
path("tabs", view=tabs_view, name="tabs"),
path("tooltips", view=tooltips_view, name="tooltips"),
path("typography", view=typography_view, name="typography"),
path("utilities", view=utilities_view, name="utilities"),
# Extended Ui
path("extended-dragula", view=extended_dragula_view, name="extended-dragula"),
path(
"extended-range-slider",
view=extended_range_slider_view,
name="extended-range-slider",
),
path("extended-ratings", view=extended_ratings_view, name="extended-ratings"),
path("extended-scrollbar", view=extended_scrollbar_view, name="extended-scrollbar"),
path("extended-scrollspy", view=extended_scrollspy_view, name="extended-scrollspy"),
# Widgets
path("widgets", view=widgets_view, name="widgets"),
# Icons
path("icons-remixicons", view=icons_remixicons_view, name="icons-remixicons"),
path("icons-bootstrap", view=icons_bootstrap_view, name="icons-bootstrap"),
path("icons-material-symbol", view=icons_material_view, name="icons-material"),
# Charts
# Apex
path("apex-area", view=apex_area_view, name="apex-area"),
path("apex-bar", view=apex_bar_view, name="apex-bar"),
path("apex-bubble", view=apex_bubble_view, name="apex-bubble"),
path("apex-candlestick", view=apex_candlestick_view, name="apex-candlestick"),
path("apex-column", view=apex_column_view, name="apex-column"),
path("apex-heatmap", view=apex_heatmap_view, name="apex-heatmap"),
path("apex-line", view=apex_line_view, name="apex-line"),
path("apex-mixed", view=apex_mixed_view, name="apex-mixed"),
path("apex-timeline", view=apex_timeline_view, name="apex-timeline"),
path("apex-boxplot", view=apex_boxplot_view, name="apex-boxplot"),
path("apex-treemap", view=apex_treemap_view, name="apex-treemap"),
path("apex-pie", view=apex_pie_view, name="apex-pie"),
path("apex-radar", view=apex_radar_view, name="apex-radar"),
path("apex-radialbar", view=apex_radialbar_view, name="apex-radialbar"),
path("apex-scatter", view=apex_scatter_view, name="apex-scatter"),
path("apex-polar-area", view=apex_polar_area_view, name="apex-polar-area"),
path("apex-sparklines", view=apex_sparklines_view, name="apex-sparklines"),
# ChartJs
path("chartjs-area", view=chartjs_area_view, name="chartjs-area"),
path("chartjs-bar", view=chartjs_bar_view, name="chartjs-bar"),
path("chartjs-line", view=chartjs_line_view, name="chartjs-line"),
path("chartjs-other", view=chartjs_other_view, name="chartjs-other"),
# Forms
path("form-elements", view=form_elements_view, name="form-elements"),
path("form-advanced", view=form_advanced_view, name="form-advanced"),
path("form-validation", view=form_validation_view, name="form-validation"),
path("form-wizard", view=form_wizard_view, name="form-wizard"),
path("form-fileuploads", view=form_fileuploads_view, name="form-fileuploads"),
path("form-editors", view=form_editors_view, name="form-editors"),
# Tables
path("tables-basic", view=tables_basic_view, name="tables-basic"),
path("tables-datatable", view=tables_datatable_view, name="tables-datatable"),
# Maps
path("google-map", view=google_map_view, name="google-map"),
path("vector-map", view=vector_map_view, name="vector-map"),
]

View File

@ -0,0 +1,193 @@
from django.views.generic.base import TemplateView
from django.contrib.auth.mixins import LoginRequiredMixin
class ComponentView(LoginRequiredMixin,TemplateView):
pass
# Base Ui
accordions_view = ComponentView.as_view(
template_name="components/base-ui/accordions.html"
)
alerts_view = ComponentView.as_view(template_name="components/base-ui/alerts.html")
avatars_view = ComponentView.as_view(template_name="components/base-ui/avatars.html")
badges_view = ComponentView.as_view(template_name="components/base-ui/badges.html")
breadcrumb_view = ComponentView.as_view(
template_name="components/base-ui/breadcrumb.html"
)
buttons_view = ComponentView.as_view(template_name="components/base-ui/buttons.html")
cards_view = ComponentView.as_view(template_name="components/base-ui/cards.html")
carousel_view = ComponentView.as_view(template_name="components/base-ui/carousel.html")
collapse_view = ComponentView.as_view(template_name="components/base-ui/collapse.html")
dropdowns_view = ComponentView.as_view(
template_name="components/base-ui/dropdowns.html"
)
embed_video_view = ComponentView.as_view(
template_name="components/base-ui/embed-video.html"
)
grid_view = ComponentView.as_view(template_name="components/base-ui/grid.html")
links_view = ComponentView.as_view(template_name="components/base-ui/links.html")
list_group_view = ComponentView.as_view(
template_name="components/base-ui/list-group.html"
)
modals_view = ComponentView.as_view(template_name="components/base-ui/modals.html")
notifications_view = ComponentView.as_view(
template_name="components/base-ui/notifications.html"
)
offcanvas_view = ComponentView.as_view(
template_name="components/base-ui/offcanvas.html"
)
placeholders_view = ComponentView.as_view(
template_name="components/base-ui/placeholders.html"
)
pagination_view = ComponentView.as_view(
template_name="components/base-ui/pagination.html"
)
popovers_view = ComponentView.as_view(template_name="components/base-ui/popovers.html")
progress_view = ComponentView.as_view(template_name="components/base-ui/progress.html")
spinners_view = ComponentView.as_view(template_name="components/base-ui/spinners.html")
tabs_view = ComponentView.as_view(template_name="components/base-ui/tabs.html")
tooltips_view = ComponentView.as_view(template_name="components/base-ui/tooltips.html")
typography_view = ComponentView.as_view(
template_name="components/base-ui/typography.html"
)
utilities_view = ComponentView.as_view(
template_name="components/base-ui/utilities.html"
)
# Extended Ui
extended_dragula_view = ComponentView.as_view(
template_name="components/extended-ui/extended-dragula.html"
)
extended_range_slider_view = ComponentView.as_view(
template_name="components/extended-ui/extended-range-slider.html"
)
extended_ratings_view = ComponentView.as_view(
template_name="components/extended-ui/extended-ratings.html"
)
extended_scrollbar_view = ComponentView.as_view(
template_name="components/extended-ui/extended-scrollbar.html"
)
extended_scrollspy_view = ComponentView.as_view(
template_name="components/extended-ui/extended-scrollspy.html"
)
# Widgets
widgets_view = ComponentView.as_view(template_name="components/widgets/widgets.html")
# Icons
icons_remixicons_view = ComponentView.as_view(
template_name="components/icons/icons-remixicons.html"
)
icons_bootstrap_view = ComponentView.as_view(
template_name="components/icons/icons-bootstrap.html"
)
icons_material_view = ComponentView.as_view(
template_name="components/icons/icons-material-symbol.html"
)
# Charts
# Apex
apex_area_view = ComponentView.as_view(
template_name="components/charts/apex-charts/apex-area.html"
)
apex_bar_view = ComponentView.as_view(
template_name="components/charts/apex-charts/apex-bar.html"
)
apex_bubble_view = ComponentView.as_view(
template_name="components/charts/apex-charts/apex-bubble.html"
)
apex_candlestick_view = ComponentView.as_view(
template_name="components/charts/apex-charts/apex-candlestick.html"
)
apex_column_view = ComponentView.as_view(
template_name="components/charts/apex-charts/apex-column.html"
)
apex_heatmap_view = ComponentView.as_view(
template_name="components/charts/apex-charts/apex-heatmap.html"
)
apex_line_view = ComponentView.as_view(
template_name="components/charts/apex-charts/apex-line.html"
)
apex_mixed_view = ComponentView.as_view(
template_name="components/charts/apex-charts/apex-mixed.html"
)
apex_timeline_view = ComponentView.as_view(
template_name="components/charts/apex-charts/apex-timeline.html"
)
apex_boxplot_view = ComponentView.as_view(
template_name="components/charts/apex-charts/apex-boxplot.html"
)
apex_treemap_view = ComponentView.as_view(
template_name="components/charts/apex-charts/apex-treemap.html"
)
apex_pie_view = ComponentView.as_view(
template_name="components/charts/apex-charts/apex-pie.html"
)
apex_radar_view = ComponentView.as_view(
template_name="components/charts/apex-charts/apex-radar.html"
)
apex_radialbar_view = ComponentView.as_view(
template_name="components/charts/apex-charts/apex-radialbar.html"
)
apex_scatter_view = ComponentView.as_view(
template_name="components/charts/apex-charts/apex-scatter.html"
)
apex_polar_area_view = ComponentView.as_view(
template_name="components/charts/apex-charts/apex-polar-area.html"
)
apex_sparklines_view = ComponentView.as_view(
template_name="components/charts/apex-charts/apex-sparklines.html"
)
# ChartJs
chartjs_area_view = ComponentView.as_view(
template_name="components/charts/chartjs/chartjs-area.html"
)
chartjs_bar_view = ComponentView.as_view(
template_name="components/charts/chartjs/chartjs-bar.html"
)
chartjs_line_view = ComponentView.as_view(
template_name="components/charts/chartjs/chartjs-line.html"
)
chartjs_other_view = ComponentView.as_view(
template_name="components/charts/chartjs/chartjs-other.html"
)
# Forms
form_elements_view = ComponentView.as_view(
template_name="components/forms/form-elements.html"
)
form_advanced_view = ComponentView.as_view(
template_name="components/forms/form-advanced.html"
)
form_validation_view = ComponentView.as_view(
template_name="components/forms/form-validation.html"
)
form_wizard_view = ComponentView.as_view(
template_name="components/forms/form-wizard.html"
)
form_fileuploads_view = ComponentView.as_view(
template_name="components/forms/form-fileuploads.html"
)
form_editors_view = ComponentView.as_view(
template_name="components/forms/form-editors.html"
)
# Tables
tables_basic_view = ComponentView.as_view(
template_name="components/tables/tables-basic.html"
)
tables_datatable_view = ComponentView.as_view(
template_name="components/tables/tables-datatable.html"
)
# Maps
google_map_view = ComponentView.as_view(
template_name="components/maps/maps-google.html"
)
vector_map_view = ComponentView.as_view(
template_name="components/maps/maps-vector.html"
)

View File

View File

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

View File

@ -0,0 +1,6 @@
from django.apps import AppConfig
class CustomConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'pxy_dashboard.custom'

View File

@ -0,0 +1,3 @@
from django.db import models
# Create your models here.

View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

View File

@ -0,0 +1,34 @@
from django.urls import path
from pxy_dashboard.custom.views import pages_profile_view,pages_invoice_view,pages_faq_view,pages_pricing_view,pages_maintenance_view,pages_starter_view,pages_preloader_view,pages_timeline_view,auth_login_view,auth_login2_view,auth_register_view,auth_register2_view,auth_logout_view,auth_logout2_view,auth_recoverpw_view,auth_recoverpw2_view,auth_lock_screen_view,auth_lock_screen2_view,auth_confirm_mail_view,auth_confirm_mail2_view,error_404_view,error_404_alt_view,error_500_view
app_name = "custom"
urlpatterns = [
# Pages
path("profile", view=pages_profile_view, name="profile"),
path("invoice", view=pages_invoice_view, name="invoice"),
path("faq", view=pages_faq_view, name="faq"),
path("pricing", view=pages_pricing_view, name="pricing"),
path("maintenance", view=pages_maintenance_view, name="maintenance"),
path("starter-page", view=pages_starter_view, name="starter"),
path("preloader", view=pages_preloader_view, name="preloader"),
path("timeline", view=pages_timeline_view, name="timeline"),
# Auth Pages
path("login", view=auth_login_view, name="login"),
path("login-2", view=auth_login2_view, name="login-2"),
path("register", view=auth_register_view, name="register"),
path("register-2", view=auth_register2_view, name="register-2"),
path("logout", view=auth_logout_view, name="logout"),
path("logout-2", view=auth_logout2_view, name="logout-2"),
path("recoverpw", view=auth_recoverpw_view, name="recoverpw"),
path("recoverpw-2", view=auth_recoverpw2_view, name="recoverpw-2"),
path("lock-screen", view=auth_lock_screen_view, name="lock-screen"),
path("lock-screen-2", view=auth_lock_screen2_view, name="lock-screen-2"),
path("confirm-mail", view=auth_confirm_mail_view, name="confirm-mail"),
path("confirm-mail-2", view=auth_confirm_mail2_view, name="confirm-mail-2"),
# Error Pages
path("error-404", view=error_404_view, name="error-404"),
path("error-404-alt", view=error_404_alt_view, name="error-404-alt"),
path("error-500", view=error_500_view, name="error-500"),
]

View File

@ -0,0 +1,34 @@
from django.views.generic.base import TemplateView
from django.contrib.auth.mixins import LoginRequiredMixin
class CustomView(LoginRequiredMixin,TemplateView):
pass
#Pages
pages_profile_view = CustomView.as_view(template_name="custom/pages/pages-profile.html")
pages_invoice_view = CustomView.as_view(template_name="custom/pages/pages-invoice.html")
pages_faq_view = CustomView.as_view(template_name="custom/pages/pages-faq.html")
pages_pricing_view = CustomView.as_view(template_name="custom/pages/pages-pricing.html")
pages_maintenance_view = CustomView.as_view(template_name="custom/pages/pages-maintenance.html")
pages_starter_view = CustomView.as_view(template_name="custom/pages/pages-starter.html")
pages_preloader_view = CustomView.as_view(template_name="custom/pages/pages-preloader.html")
pages_timeline_view = CustomView.as_view(template_name="custom/pages/pages-timeline.html")
# Auth Pages
auth_login_view = CustomView.as_view(template_name="custom/auth-pages/auth-login.html")
auth_login2_view = CustomView.as_view(template_name="custom/auth-pages/auth-login-2.html")
auth_register_view = CustomView.as_view(template_name="custom/auth-pages/auth-register.html")
auth_register2_view = CustomView.as_view(template_name="custom/auth-pages/auth-register-2.html")
auth_logout_view = CustomView.as_view(template_name="custom/auth-pages/auth-logout.html")
auth_logout2_view = CustomView.as_view(template_name="custom/auth-pages/auth-logout-2.html")
auth_recoverpw_view = CustomView.as_view(template_name="custom/auth-pages/auth-recoverpw.html")
auth_recoverpw2_view = CustomView.as_view(template_name="custom/auth-pages/auth-recoverpw-2.html")
auth_lock_screen_view = CustomView.as_view(template_name="custom/auth-pages/auth-lock-screen.html")
auth_lock_screen2_view = CustomView.as_view(template_name="custom/auth-pages/auth-lock-screen-2.html")
auth_confirm_mail_view = CustomView.as_view(template_name="custom/auth-pages/auth-confirm-mail.html")
auth_confirm_mail2_view = CustomView.as_view(template_name="custom/auth-pages/auth-confirm-mail-2.html")
# Error Pages
error_404_view = CustomView.as_view(template_name="custom/error-pages/error-404.html")
error_404_alt_view = CustomView.as_view(template_name="custom/error-pages/error-404-alt.html")
error_500_view = CustomView.as_view(template_name="custom/error-pages/error-500.html")

View File

View File

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

View File

@ -0,0 +1,6 @@
from django.apps import AppConfig
class LayoutsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'pxy_dashboard.layouts'

View File

@ -0,0 +1,3 @@
from django.db import models
# Create your models here.

View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

View File

@ -0,0 +1,14 @@
from django.urls import path
from pxy_dashboard.layouts.views import horizontal_view,detached_view,full_view,fullscreen_view,hover_view,compact_view,icon_view
urlpatterns = [
# Layouts
path("horizontal", view=horizontal_view, name="horizontal"),
path("detached", view=detached_view, name="detached"),
path("full", view=full_view, name="full"),
path("fullscreen", view=fullscreen_view, name="fullscreen"),
path("hover", view=hover_view, name="hover"),
path("compact", view=compact_view, name="compact"),
path("icon-view", view=icon_view, name="icon-view"),
]

View File

@ -0,0 +1,14 @@
from django.views.generic.base import TemplateView
from django.contrib.auth.mixins import LoginRequiredMixin
class LayoutView(LoginRequiredMixin,TemplateView):
pass
# Layouts
horizontal_view = LayoutView.as_view(template_name="custom/layouts/horizontal.html")
detached_view = LayoutView.as_view(template_name="custom/layouts/detached.html")
full_view = LayoutView.as_view(template_name="custom/layouts/full.html")
fullscreen_view = LayoutView.as_view(template_name="custom/layouts/fullscreen.html")
hover_view = LayoutView.as_view(template_name="custom/layouts/hover.html")
compact_view = LayoutView.as_view(template_name="custom/layouts/compact.html")
icon_view = LayoutView.as_view(template_name="custom/layouts/icon-view.html")

View File

3
pxy_dashboard/models.py Normal file
View File

@ -0,0 +1,3 @@
from django.db import models
# Create your models here.

View File

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,116 @@
[
{
"id": "node_1",
"icon": "ri-folder-line icon-lg text-success",
"text": "Node - 1",
"children": [
{
"id": "node_4",
"icon": "ri-article-line icon-lg text-warning",
"text": "Node - 1.1",
"children": false
},
{
"id": "node_5",
"icon": "ri-article-line icon-lg text-warning",
"text": "Node - 1.2",
"children": false
},
{
"id": "node_6",
"icon": "ri-folder-line icon-lg text-success",
"text": "Node - 1.3",
"children": [
{
"id": "node_13",
"icon": "ri-article-line icon-lg text-warning",
"text": "Node - 1.3.1",
"children": false
},
{
"id": "node_15",
"icon": "ri-article-line icon-lg text-warning",
"text": "Node - 1.3.2",
"children": false
}
]
}
]
},
{
"id": "node_2",
"icon": "ri-folder-line icon-lg text-success",
"text": "Node - 2",
"children": [
{
"id": "node_7",
"icon": "ri-article-line icon-lg text-warning",
"text": "Node - 2.1",
"children": false
},
{
"id": "node_8",
"icon": "ri-article-line icon-lg text-warning",
"text": "Node - 2.2",
"children": false
},
{
"id": "node_9",
"icon": "ri-folder-line icon-lg text-success",
"text": "Node - 2.3",
"children": [
{
"id": "node_16",
"icon": "ri-article-line icon-lg text-warning",
"text": "Node - 2.3.1",
"children": false
},
{
"id": "node_17",
"icon": "ri-article-line icon-lg text-warning",
"text": "Node - 2.3.2",
"children": false
}
]
}
]
},
{
"id": "node_3",
"icon": "ri-folder-line icon-lg text-success",
"text": "Node - 3",
"children": [
{
"id": "node_10",
"icon": "ri-article-line icon-lg text-warning",
"text": "Node - 3.1",
"children": false
},
{
"id": "node_11",
"icon": "ri-article-line icon-lg text-warning",
"text": "Node - 3.2",
"children": false
},
{
"id": "node_12",
"icon": "ri-folder-line icon-lg text-success",
"text": "Node - 3.3",
"children": [
{
"id": "node_18",
"icon": "ri-article-line icon-lg text-warning",
"text": "Node - 3.3.1",
"children": false
},
{
"id": "node_19",
"icon": "ri-article-line icon-lg text-warning",
"text": "Node - 3.3.2",
"children": false
}
]
}
]
}
]

Binary file not shown.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 2.0 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 701 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

Some files were not shown because too many files have changed in this diff Show More