testing #27
@@ -52,11 +52,10 @@ jobs:
|
|||||||
build-args: |
|
build-args: |
|
||||||
ALLOWED_HOSTS='django-testing.tryton.geeraert.eu'
|
ALLOWED_HOSTS='django-testing.tryton.geeraert.eu'
|
||||||
DEBUG='True'
|
DEBUG='True'
|
||||||
|
CACHE_BUST=${{ env.next_version }}
|
||||||
tags: |
|
tags: |
|
||||||
gitea.tryton.geeraert.eu/pi-ux-ce/django-testing:latest
|
gitea.tryton.geeraert.eu/pi-ux-ce/django-testing:latest
|
||||||
gitea.tryton.geeraert.eu/pi-ux-ce/django-testing:${{ env.next_version }}
|
gitea.tryton.geeraert.eu/pi-ux-ce/django-testing:${{ env.next_version }}
|
||||||
cache-from: type=registry,ref=gitea.tryton.geeraert.eu/pi-ux-ce/django-testing:buildcache
|
|
||||||
cache-to: type=registry,ref=gitea.tryton.geeraert.eu/pi-ux-ce/django-testing:buildcache,mode=max
|
|
||||||
|
|
||||||
- name: update version in the variable
|
- name: update version in the variable
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ python django_code/manage.py makemigrations simpsons
|
|||||||
python django_code/manage.py makemigrations job
|
python django_code/manage.py makemigrations job
|
||||||
python django_code/manage.py makemigrations telegram
|
python django_code/manage.py makemigrations telegram
|
||||||
python django_code/manage.py makemigrations podcast
|
python django_code/manage.py makemigrations podcast
|
||||||
|
python django_code/manage.py makemigrations streaming
|
||||||
|
|
||||||
python django_code/manage.py migrate
|
python django_code/manage.py migrate
|
||||||
python django_code/manage.py migrate --database=cloudmanager_db
|
python django_code/manage.py migrate --database=cloudmanager_db
|
||||||
@@ -19,6 +20,7 @@ python django_code/manage.py migrate --database=redirect_db
|
|||||||
python django_code/manage.py migrate --database=job_db
|
python django_code/manage.py migrate --database=job_db
|
||||||
python django_code/manage.py migrate --database=telegram_db
|
python django_code/manage.py migrate --database=telegram_db
|
||||||
python django_code/manage.py migrate --database=podcast_db
|
python django_code/manage.py migrate --database=podcast_db
|
||||||
|
python django_code/manage.py migrate --database=streaming_db
|
||||||
```
|
```
|
||||||
### Database debug
|
### Database debug
|
||||||
|
|
||||||
@@ -30,6 +32,7 @@ create database simpsons;
|
|||||||
create database job;
|
create database job;
|
||||||
create database telegram;
|
create database telegram;
|
||||||
create database podcast;
|
create database podcast;
|
||||||
|
create database streaming;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -39,6 +42,7 @@ drop database simpsons;
|
|||||||
drop database job;
|
drop database job;
|
||||||
drop database telegram;
|
drop database telegram;
|
||||||
drop database podcast;
|
drop database podcast;
|
||||||
|
drop database streaming;
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
from django.contrib import admin
|
||||||
|
from import_export.admin import ImportExportModelAdmin
|
||||||
|
from .models import streamingData
|
||||||
|
from .utils import full_testing
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@admin.action(description="check the URLs")
|
||||||
|
def check(modeladmin, request, queryset):
|
||||||
|
for query in queryset:
|
||||||
|
website_url = query.url
|
||||||
|
status=full_testing(website_url)[0]
|
||||||
|
result= full_testing(website_url)[1]
|
||||||
|
print(str(query.url)+": "+str(status)+" -> "+str(result))
|
||||||
|
query.status = status
|
||||||
|
query.result = result
|
||||||
|
query.save(update_fields=["status","result"])
|
||||||
|
|
||||||
|
|
||||||
|
# modeladmin.message_user(
|
||||||
|
# request,
|
||||||
|
# ngettext(
|
||||||
|
# "%d episode was successfully marked as seen.",
|
||||||
|
# "%d episodes were successfully marked as seen.",
|
||||||
|
# updated,
|
||||||
|
# )
|
||||||
|
# % updated,
|
||||||
|
# messages.SUCCESS,
|
||||||
|
# )
|
||||||
|
|
||||||
|
@admin.register(streamingData)
|
||||||
|
class streamingAdmin(ImportExportModelAdmin):
|
||||||
|
list_display = ['url','result','status']
|
||||||
|
fields = ['url']
|
||||||
|
actions = [check]
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class StreamingConfig(AppConfig):
|
||||||
|
default_auto_field = 'django.db.models.BigAutoField'
|
||||||
|
name = 'apps.streaming'
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
# Generated by Django 4.2.30 on 2026-08-05 12:00
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='streamingData',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('url', models.CharField(max_length=1000)),
|
||||||
|
('addedDate', models.DateField(auto_now_add=True, null=True, verbose_name='Published')),
|
||||||
|
('status', models.CharField(blank=True, max_length=1000, null=True)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'db_table': 'streaming',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 4.2.30 on 2026-08-05 13:44
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('streaming', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='streamingdata',
|
||||||
|
name='result',
|
||||||
|
field=models.CharField(blank=True, max_length=1000, null=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
||||||
|
class streamingData(models.Model):
|
||||||
|
url = models.CharField(max_length=1000)
|
||||||
|
addedDate = models.DateField('Published', blank=True, null=True, auto_now_add=True)
|
||||||
|
status = models.CharField(max_length=1000, blank=True, null=True)
|
||||||
|
result = models.CharField(max_length=1000, blank=True, null=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
db_table = 'streaming'
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
import requests
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
|
||||||
|
def full_testing(url_website):
|
||||||
|
status = "unknown"
|
||||||
|
|
||||||
|
#step 1 : test without VPN
|
||||||
|
status = test_website(url_website)
|
||||||
|
|
||||||
|
if status == 200:
|
||||||
|
result = "REACHABLE"
|
||||||
|
else:
|
||||||
|
#step 2 : test with VPN
|
||||||
|
status = test_website(url_website,bool_proxy=True)
|
||||||
|
if status != 200:
|
||||||
|
result = "UNREACHABLE"
|
||||||
|
else:
|
||||||
|
result = "VPN REQUIRED"
|
||||||
|
|
||||||
|
return status,result
|
||||||
|
|
||||||
|
|
||||||
|
def test_website(url_website,bool_proxy=False):
|
||||||
|
try:
|
||||||
|
if bool_proxy:
|
||||||
|
status = requests.get(url_website,proxies=settings.PROXIES).status_code
|
||||||
|
else:
|
||||||
|
status = requests.get(url_website).status_code
|
||||||
|
|
||||||
|
except requests.exceptions.ConnectionError:
|
||||||
|
status = "ConnectionError"
|
||||||
|
|
||||||
|
#identify the exception name
|
||||||
|
except Exception as err:
|
||||||
|
print(f"{type(err).__name__} was raised: {err}")
|
||||||
|
status = "exception not targeted"
|
||||||
|
return status
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
# Create your views here.
|
||||||
@@ -2,6 +2,8 @@ from django.contrib import admin
|
|||||||
from .models import historicalData,redirectData
|
from .models import historicalData,redirectData
|
||||||
from .utils import redirect_method
|
from .utils import redirect_method
|
||||||
from import_export.admin import ImportExportModelAdmin
|
from import_export.admin import ImportExportModelAdmin
|
||||||
|
from django.utils.html import format_html
|
||||||
|
|
||||||
|
|
||||||
# Register your models here.
|
# Register your models here.
|
||||||
|
|
||||||
@@ -18,14 +20,17 @@ def re_redirect(modeladmin, request, queryset):
|
|||||||
request,
|
request,
|
||||||
output_generated
|
output_generated
|
||||||
)
|
)
|
||||||
|
|
||||||
@admin.register(historicalData)
|
@admin.register(historicalData)
|
||||||
class historicalAdmin(ImportExportModelAdmin):
|
class historicalAdmin(ImportExportModelAdmin):
|
||||||
list_display = [field.name for field in historicalData._meta.fields if field.name != 'id']
|
list_input = (field.name for field in historicalData._meta.fields if field.name != 'id' or field.name != 'url')
|
||||||
|
list_display = ["clickable_links"]
|
||||||
|
list_display.extend(list_input)
|
||||||
actions = [re_redirect]
|
actions = [re_redirect]
|
||||||
|
|
||||||
|
|
||||||
|
def clickable_links(self, obj):
|
||||||
|
return format_html('<a href="{}">{}</a>', obj.url,obj.url)
|
||||||
|
|
||||||
@admin.register(redirectData)
|
@admin.register(redirectData)
|
||||||
class redirectAdmin(ImportExportModelAdmin):
|
class redirectAdmin(ImportExportModelAdmin):
|
||||||
list_display = [field.name for field in redirectData._meta.fields if field.name != 'id']
|
list_display = [field.name for field in redirectData._meta.fields if field.name != 'id']
|
||||||
|
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.contrib import admin
|
||||||
|
from django.utils.html import format_html
|
||||||
|
|
||||||
class historicalData(models.Model):
|
class historicalData(models.Model):
|
||||||
url = models.CharField(max_length=1000)
|
url = models.CharField(max_length=1000)
|
||||||
|
|||||||
@@ -27,6 +27,9 @@ class ProjectDatabaseRouter:
|
|||||||
if model._meta.app_label == 'podcast':
|
if model._meta.app_label == 'podcast':
|
||||||
return 'podcast_db'
|
return 'podcast_db'
|
||||||
|
|
||||||
|
if model._meta.app_label == 'streaming':
|
||||||
|
return 'streaming_db'
|
||||||
|
|
||||||
return 'default'
|
return 'default'
|
||||||
|
|
||||||
def db_for_write(self, model, **hints):
|
def db_for_write(self, model, **hints):
|
||||||
@@ -50,14 +53,17 @@ class ProjectDatabaseRouter:
|
|||||||
if model._meta.app_label == 'podcast':
|
if model._meta.app_label == 'podcast':
|
||||||
return 'podcast_db'
|
return 'podcast_db'
|
||||||
|
|
||||||
|
if model._meta.app_label == 'streaming':
|
||||||
|
return 'streaming_db'
|
||||||
|
|
||||||
return 'default'
|
return 'default'
|
||||||
|
|
||||||
def allow_relation(self, obj1, obj2, **hints):
|
def allow_relation(self, obj1, obj2, **hints):
|
||||||
"""Allow relations if both models are in the same database."""
|
"""Allow relations if both models are in the same database."""
|
||||||
# Prevents accidental foreign key relationships across different physical DBs
|
# Prevents accidental foreign key relationships across different physical DBs
|
||||||
if (
|
if (
|
||||||
obj1._meta.app_label in ['cloudmanager', 'simpsons', 'redirect', 'job', 'telegram', 'podcast'] or
|
obj1._meta.app_label in ['cloudmanager', 'simpsons', 'redirect', 'job', 'telegram', 'podcast', 'streaming'] or
|
||||||
obj2._meta.app_label in ['cloudmanager', 'simpsons', 'redirect', 'job', 'telegram', 'podcast']
|
obj2._meta.app_label in ['cloudmanager', 'simpsons', 'redirect', 'job', 'telegram', 'podcast', 'streaming']
|
||||||
):
|
):
|
||||||
return obj1._meta.app_label == obj2._meta.app_label
|
return obj1._meta.app_label == obj2._meta.app_label
|
||||||
return None
|
return None
|
||||||
@@ -83,8 +89,11 @@ class ProjectDatabaseRouter:
|
|||||||
if app_label == 'podcast':
|
if app_label == 'podcast':
|
||||||
return db == 'podcast_db'
|
return db == 'podcast_db'
|
||||||
|
|
||||||
|
if app_label == 'streaming':
|
||||||
|
return db == 'streaming_db'
|
||||||
|
|
||||||
# Ensure default Django apps (auth, sessions, etc.) don't migrate into simpsons/cloudmanager
|
# Ensure default Django apps (auth, sessions, etc.) don't migrate into simpsons/cloudmanager
|
||||||
if db in ['cloudmanager_db', 'simpsons_db', 'redirect_db', 'job_db', 'telegram_db', 'podcast_db']:
|
if db in ['cloudmanager_db', 'simpsons_db', 'redirect_db', 'job_db', 'telegram_db', 'podcast_db', 'streaming_db']:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ https://docs.djangoproject.com/en/4.2/ref/settings/
|
|||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from urllib import request as urllib_request
|
||||||
|
|
||||||
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||||
@@ -49,6 +50,7 @@ INSTALLED_APPS = [
|
|||||||
'apps.job_dashboard.apps.JobDashboardConfig',
|
'apps.job_dashboard.apps.JobDashboardConfig',
|
||||||
'apps.telegram_communication.apps.TelegramCommunicationConfig',
|
'apps.telegram_communication.apps.TelegramCommunicationConfig',
|
||||||
'apps.podcast_aggregator.apps.PodcastAggregatorConfig',
|
'apps.podcast_aggregator.apps.PodcastAggregatorConfig',
|
||||||
|
'apps.streaming.apps.StreamingConfig',
|
||||||
'import_export',
|
'import_export',
|
||||||
'djangoql',
|
'djangoql',
|
||||||
]
|
]
|
||||||
@@ -153,6 +155,14 @@ DATABASES = {
|
|||||||
'HOST': os.environ.get('DB_HOST'),
|
'HOST': os.environ.get('DB_HOST'),
|
||||||
'PORT': os.environ.get('DB_PORT'),
|
'PORT': os.environ.get('DB_PORT'),
|
||||||
},
|
},
|
||||||
|
'streaming_db': {
|
||||||
|
'ENGINE': 'django.db.backends.postgresql',
|
||||||
|
'NAME': 'streaming',
|
||||||
|
'USER': os.environ.get('DB_USERNAME'),
|
||||||
|
'PASSWORD': os.environ.get('DB_PASSWORD'),
|
||||||
|
'HOST': os.environ.get('DB_HOST'),
|
||||||
|
'PORT': os.environ.get('DB_PORT'),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
DATABASE_ROUTERS = ['core.routers.ProjectDatabaseRouter']
|
DATABASE_ROUTERS = ['core.routers.ProjectDatabaseRouter']
|
||||||
#DATABASE_ROUTERS = []
|
#DATABASE_ROUTERS = []
|
||||||
@@ -214,3 +224,23 @@ CELERY_IMPORTS = [
|
|||||||
'apps.random_simpsons.utils'
|
'apps.random_simpsons.utils'
|
||||||
# Add other app tasks here if needed
|
# Add other app tasks here if needed
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
###########################################################################################
|
||||||
|
#
|
||||||
|
# Custom settings
|
||||||
|
#
|
||||||
|
###########################################################################################
|
||||||
|
|
||||||
|
|
||||||
|
PROXY_URL = 'http://gluetun-svc.gluetun.svc:8888'
|
||||||
|
PROXY = urllib_request.ProxyHandler({
|
||||||
|
'http': PROXY_URL,
|
||||||
|
'https': PROXY_URL # Add the handler for HTTPS
|
||||||
|
})
|
||||||
|
|
||||||
|
PROXIES = {
|
||||||
|
"http" : PROXY_URL,
|
||||||
|
"https" : PROXY_URL
|
||||||
|
}
|
||||||
|
|||||||
@@ -93,5 +93,4 @@ urlpatterns = [
|
|||||||
################### cloudmanager ###################
|
################### cloudmanager ###################
|
||||||
path('podcast/', podcast_views.execute_podcast),
|
path('podcast/', podcast_views.execute_podcast),
|
||||||
|
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ python django_code/manage.py makemigrations simpsons
|
|||||||
python django_code/manage.py makemigrations job
|
python django_code/manage.py makemigrations job
|
||||||
python django_code/manage.py makemigrations telegram
|
python django_code/manage.py makemigrations telegram
|
||||||
python django_code/manage.py makemigrations podcast
|
python django_code/manage.py makemigrations podcast
|
||||||
|
python django_code/manage.py makemigrations streaming
|
||||||
|
|
||||||
python django_code/manage.py migrate
|
python django_code/manage.py migrate
|
||||||
python django_code/manage.py migrate --database=cloudmanager_db
|
python django_code/manage.py migrate --database=cloudmanager_db
|
||||||
@@ -15,6 +16,8 @@ python django_code/manage.py migrate --database=redirect_db
|
|||||||
python django_code/manage.py migrate --database=job_db
|
python django_code/manage.py migrate --database=job_db
|
||||||
python django_code/manage.py migrate --database=telegram_db
|
python django_code/manage.py migrate --database=telegram_db
|
||||||
python django_code/manage.py migrate --database=podcast_db
|
python django_code/manage.py migrate --database=podcast_db
|
||||||
|
python django_code/manage.py migrate --database=streaming_db
|
||||||
|
|
||||||
|
|
||||||
python django_code/manage.py runserver "0.0.0.0:8000"
|
python django_code/manage.py runserver "0.0.0.0:8000"
|
||||||
|
|
||||||
|
|||||||
@@ -15,19 +15,19 @@ RUN apt-get update && \
|
|||||||
apt-get install -y git nano && \
|
apt-get install -y git nano && \
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# CACHE_BUST forces this layer (and everything after it) to re-run on every
|
||||||
|
# build, otherwise Docker reuses a cached clone from a previous build and the
|
||||||
|
# image silently keeps stale code.
|
||||||
|
ARG CACHE_BUST=1
|
||||||
|
RUN echo "cache bust: ${CACHE_BUST}" && \
|
||||||
|
git clone --depth 1 -b testing https://gitea.tryton.geeraert.eu/pi-ux-ce/Django_kube.git .
|
||||||
|
|
||||||
# Copy only the requirements file first (Changes infrequently)
|
RUN pip install --cache-dir=/opt/hostedtoolcache/pip --upgrade pip
|
||||||
COPY requirements.txt ./
|
|
||||||
|
|
||||||
RUN pip install --cache-dir=/opt/hostedtoolcache/pip --upgrade pip
|
|
||||||
RUN pip list --cache-dir=/opt/hostedtoolcache/pip --outdated
|
RUN pip list --cache-dir=/opt/hostedtoolcache/pip --outdated
|
||||||
RUN pip install --cache-dir=/opt/hostedtoolcache/pip --upgrade wheel
|
RUN pip install --cache-dir=/opt/hostedtoolcache/pip --upgrade wheel
|
||||||
RUN pip install --cache-dir=/opt/hostedtoolcache/pip --upgrade setuptools
|
RUN pip install --cache-dir=/opt/hostedtoolcache/pip --upgrade setuptools
|
||||||
RUN pip install --cache-dir=/opt/hostedtoolcache/pip -r requirements.txt
|
RUN pip install --cache-dir=/opt/hostedtoolcache/pip -r requirements.txt
|
||||||
|
|
||||||
# Copy the rest of your application code (Changes frequently, invalidates subsequent cache)
|
|
||||||
COPY . ./
|
|
||||||
|
|
||||||
COPY infra/testing/entrypoint.sh /code/entrypoint.sh
|
COPY infra/testing/entrypoint.sh /code/entrypoint.sh
|
||||||
RUN chmod +x /code/entrypoint.sh
|
RUN chmod +x /code/entrypoint.sh
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
cd Django_kube
|
git pull origin testing
|
||||||
|
|
||||||
#another methid but needs to rm -rf before
|
|
||||||
#git clone --depth 1 -b main https://gitea.tryton.geeraert.eu/pi-ux-ce/Django_kube.git
|
|
||||||
git stash
|
|
||||||
git pull
|
|
||||||
|
|
||||||
pip install -r requirements.txt
|
pip install -r requirements.txt
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
python django_code/manage.py makemigrations
|
python django_code/manage.py makemigrations
|
||||||
python django_code/manage.py makemigrations redirect
|
python django_code/manage.py makemigrations redirect
|
||||||
python django_code/manage.py makemigrations cloudmanager
|
python django_code/manage.py makemigrations cloudmanager
|
||||||
@@ -16,6 +14,7 @@ python django_code/manage.py makemigrations simpsons
|
|||||||
python django_code/manage.py makemigrations job
|
python django_code/manage.py makemigrations job
|
||||||
python django_code/manage.py makemigrations telegram
|
python django_code/manage.py makemigrations telegram
|
||||||
python django_code/manage.py makemigrations podcast
|
python django_code/manage.py makemigrations podcast
|
||||||
|
python django_code/manage.py makemigrations streaming
|
||||||
|
|
||||||
python django_code/manage.py migrate
|
python django_code/manage.py migrate
|
||||||
python django_code/manage.py migrate --database=cloudmanager_db
|
python django_code/manage.py migrate --database=cloudmanager_db
|
||||||
@@ -24,6 +23,7 @@ python django_code/manage.py migrate --database=redirect_db
|
|||||||
python django_code/manage.py migrate --database=job_db
|
python django_code/manage.py migrate --database=job_db
|
||||||
python django_code/manage.py migrate --database=telegram_db
|
python django_code/manage.py migrate --database=telegram_db
|
||||||
python django_code/manage.py migrate --database=podcast_db
|
python django_code/manage.py migrate --database=podcast_db
|
||||||
|
python django_code/manage.py migrate --database=streaming_db
|
||||||
|
|
||||||
python django_code/manage.py runserver "0.0.0.0:8000"
|
python django_code/manage.py runserver "0.0.0.0:8000"
|
||||||
|
|
||||||
|
|||||||
@@ -19,3 +19,4 @@ bitwarden_sdk
|
|||||||
xmltodict
|
xmltodict
|
||||||
whitenoise
|
whitenoise
|
||||||
djangoql
|
djangoql
|
||||||
|
python-json-logger
|
||||||
|
|||||||
Reference in New Issue
Block a user