From 7309aef3499c32599c8fa0cafb2b1e7321b6415f Mon Sep 17 00:00:00 2001 From: trevor Date: Fri, 6 Dec 2024 12:37:15 +0900 Subject: [PATCH] db parse module --- mysql-apt-config_0.8.24-1_all.deb | Bin 0 -> 18048 bytes touchh/settings.py | 12 ++++++-- .../management/commands/sync_activity_log.py | 29 ++++++++++++++++++ users/models.py | 24 ++++++++++++++- 4 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 mysql-apt-config_0.8.24-1_all.deb create mode 100644 users/management/commands/sync_activity_log.py diff --git a/mysql-apt-config_0.8.24-1_all.deb b/mysql-apt-config_0.8.24-1_all.deb new file mode 100644 index 0000000000000000000000000000000000000000..631b140b718377d27e2239b0d05fe8f2ce6e08c3 GIT binary patch literal 18048 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 K000001X)^+1n2nx literal 0 HcmV?d00001 diff --git a/touchh/settings.py b/touchh/settings.py index a0c9dc57..850945c5 100644 --- a/touchh/settings.py +++ b/touchh/settings.py @@ -83,10 +83,16 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', - } + }, + 'wordpress': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'u1510415_wp832', + 'USER': 'root', + 'PASSWORD': 'R0sebud', + 'HOST': '0.0.0.0', + 'PORT': '3306', + }, } - - # Password validation # https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators diff --git a/users/management/commands/sync_activity_log.py b/users/management/commands/sync_activity_log.py new file mode 100644 index 00000000..97cc8235 --- /dev/null +++ b/users/management/commands/sync_activity_log.py @@ -0,0 +1,29 @@ +from django.core.management.base import BaseCommand +from users.models import WordPressUserActivityLog +from users.models import LocalUserActivityLog +from asgiref.sync import sync_to_async + +class Command(BaseCommand): + help = "Синхронизация данных из WordPress в локальную базу данных" + + def handle(self, *args, **kwargs): + self.stdout.write("Начало синхронизации данных...") + try: + # Получаем данные из WordPress + wordpress_logs = WordPressUserActivityLog.objects.using('wordpress').all() + + for log in wordpress_logs: + # Сохраняем данные в локальную базу + LocalUserActivityLog.objects.update_or_create( + id=log.id, # Используем уникальный идентификатор + defaults={ + 'user_id': log.user_id, + 'activity_type': log.activity_type, + 'timestamp': log.timestamp, + 'additional_data': log.additional_data, + }, + ) + + self.stdout.write(self.style.SUCCESS("Синхронизация завершена успешно!")) + except Exception as e: + self.stderr.write(self.style.ERROR(f"Ошибка синхронизации: {str(e)}")) diff --git a/users/models.py b/users/models.py index 4760f274..dd32d1fd 100644 --- a/users/models.py +++ b/users/models.py @@ -48,4 +48,26 @@ class UserConfirmation(models.Model): created_at = models.DateTimeField(auto_now_add=True, verbose_name="Created At") def __str__(self): - return f"Confirmation for {self.user.username} - {self.confirmation_code}" \ No newline at end of file + return f"Confirmation for {self.user.username} - {self.confirmation_code}" + +class WordPressUserActivityLog(models.Model): + id = models.AutoField(primary_key=True) + user_id = models.IntegerField() + activity_type = models.CharField(max_length=255) + timestamp = models.DateTimeField() + additional_data = models.JSONField(null=True, blank=True) + + class Meta: + db_table = 'wpts_user_activity_log' # Название таблицы в базе данных WordPress + managed = False # Django не будет управлять этой таблицей + app_label = 'Users' # Замените на имя вашего приложения + +class LocalUserActivityLog(models.Model): + id = models.AutoField(primary_key=True) + user_id = models.IntegerField() + activity_type = models.CharField(max_length=255) + timestamp = models.DateTimeField() + additional_data = models.JSONField(null=True, blank=True) + + def __str__(self): + return f"User {self.user_id} - {self.activity_type}" \ No newline at end of file