diff --git a/.gitignore b/.gitignore index e3f5dc5..97c1edd 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,6 @@ config_root_ids __pycache__ log.txt bot.db +adminpanelapp/migrations +adminpanel/__init__.py +.env \ No newline at end of file diff --git a/README.md b/README.md index 24d9c56..02bf2ac 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## TPlatformBot +TPlatformBot ### Видеоинструкции @@ -17,25 +17,25 @@ 3. Профиль пользователя 4. Права доступа 5. Пользователи и группы пользователей -4. Проекты -5. Задачи -6. Потребности -7. Комментарии -8. Языки (сообщения и кнопки) -9. Заказы -10. Подписки +6. Проекты +7. Задачи +8. Потребности +9. Комментарии +10. Языки (сообщения и кнопки) +11. Заказы +12. Подписки ---------- +--- Данный бот позволяет создать свою площадку для взаимодействия на некоммерческой основе в мессенджере Telegram и обмениваться ресурсами и компетенциями для реализации различных проектов. Сам бот разработан на языке программирования **Python** с использованием фреймворка **Aiogram**. База данных - **SQLite3**. ------- +--- **Установка, первичная настройка и запуск** ->Для работы требуется, как минимум, Python 3.8. +> Для работы требуется, как минимум, Python 3.8. *** Загрузка зависимостей *** @@ -45,7 +45,7 @@ `sudo apt-get install python3-modules-sqlite3` -`python3 -m pip install -r requirements.txt` +`python3 -m pip install -r requirements.txt` *** Запуск *** @@ -65,4 +65,27 @@ ## Тестовая версия Тестовая версия запущена по ссылке -http://t.me/Test_TPlatform_bot \ No newline at end of file +http://t.me/Test_TPlatform_bot + +## Запуск Админ панели + +## 1. Выполните миграции + +python manage.py migrate +2. Создайте суперпользователя +python manage.py createsuperuser +3. Введите имя пользователя, почту и пароль +4. Запустите сервер +python manage.py runserver +5. Перейдите по адерсу http://127.0.0.1:8000/ (адрес выведится в терминале) и введите данные ранее созданного пользователя и пароль + +## 2. Создайте SECRET_KEY для джанго + +1. Создайте в корне проекта файл .env +2. Сгенерирйте секретный ключ. Для этого в терминале (python manage.py shell) выполните следующие команды. + + from django.core.management.utils import get_random_secret_key + get_random_secret_key() +3. Вставьте полученный ключ в файл .env + + SECRET_KEY='ваш секретный ключ' diff --git a/adminpanel/__init__.py b/adminpanel/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/adminpanel/asgi.py b/adminpanel/asgi.py deleted file mode 100644 index 65ed7db..0000000 --- a/adminpanel/asgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -ASGI config for adminpanel project. - -It exposes the ASGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/ -""" - -import os - -from django.core.asgi import get_asgi_application - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'adminpanel.settings') - -application = get_asgi_application() diff --git a/adminpanel/config.py b/adminpanel/config.py index e19304d..8444255 100644 --- a/adminpanel/config.py +++ b/adminpanel/config.py @@ -4,8 +4,6 @@ g_telegram_bot_api_token = '' telegram_bot_api_token_file_name = 'config_telegram_bot_api_token' # --------------------------------------------------------- # Дополнительные функции -def ClearReadLine(a_Line): - return a_Line[:-1] def GetFirstLineFromFile(a_FileName): f = open(a_FileName, 'r') result = f.readline() @@ -21,5 +19,5 @@ def GetAllLinesFromFile(a_FileName): def GetTelegramBotApiToken(): global g_telegram_bot_api_token if len(g_telegram_bot_api_token) == 0: - g_telegram_bot_api_token = ClearReadLine(GetFirstLineFromFile(telegram_bot_api_token_file_name)) + g_telegram_bot_api_token = str().strip(GetFirstLineFromFile(telegram_bot_api_token_file_name)) return g_telegram_bot_api_token \ No newline at end of file diff --git a/adminpanel/settings.py b/adminpanel/settings.py index f471600..a2d687e 100644 --- a/adminpanel/settings.py +++ b/adminpanel/settings.py @@ -11,21 +11,22 @@ https://docs.djangoproject.com/en/4.1/ref/settings/ """ import os from pathlib import Path +from dotenv import load_dotenv # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent - # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = 'django-insecure-13x&cmg=f1gx9u(i@s(xplh+4x=+@ucyujcqf2t3hu7@i(k=fe' +load_dotenv() +SECRET_KEY = os.getenv('SECRET_KEY') # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -ALLOWED_HOSTS = [] +ALLOWED_HOSTS = ['127.0.0.1', 'mirocod.svo.ru'] # Application definition @@ -106,7 +107,7 @@ AUTH_PASSWORD_VALIDATORS = [ # Internationalization # https://docs.djangoproject.com/en/4.1/topics/i18n/ -LANGUAGE_CODE = 'en-us' +LANGUAGE_CODE = 'ru' TIME_ZONE = 'UTC' diff --git a/adminpanel/urls.py b/adminpanel/urls.py deleted file mode 100644 index 6f7db62..0000000 --- a/adminpanel/urls.py +++ /dev/null @@ -1,11 +0,0 @@ -from django.contrib import admin -from django.urls import path, include -from django.views.generic import RedirectView -from django.conf import settings -from django.conf.urls.static import static - -urlpatterns = [ -path('admin/', admin.site.urls), -path('', include('adminpanelapp.urls')), -path('', RedirectView.as_view(url='/admin/adminpanelapp/orders'), name='') -] \ No newline at end of file diff --git a/adminpanel/wsgi.py b/adminpanel/wsgi.py deleted file mode 100644 index d976b1e..0000000 --- a/adminpanel/wsgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -WSGI config for adminpanel project. - -It exposes the WSGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/ -""" - -import os - -from django.core.wsgi import get_wsgi_application - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'adminpanel.settings') - -application = get_wsgi_application() diff --git a/adminpanelapp/__init__.py b/adminpanelapp/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/adminpanelapp/admin.py b/adminpanelapp/admin.py deleted file mode 100644 index e066c49..0000000 --- a/adminpanelapp/admin.py +++ /dev/null @@ -1,44 +0,0 @@ -from django.http import HttpResponseRedirect -from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME -from django.utils.safestring import mark_safe -from .models import Orders - - -from django.contrib import admin, messages -from django.urls import reverse - - - -class OrdersAdmin(admin.ModelAdmin): - list_display = ('orderName', 'orderCreateDateTime', 'orderDesc', 'orderAddress', 'show_photo', 'show_photopay') - actions =['send_message'] - exclude = ['orderAccess', 'userID', 'orderPhoto', 'orderPhotoPay'] - - def show_photo(self, obj): - html = obj.get_photo_html() - return mark_safe(html) - - show_photo.short_description = 'Фото' - - def show_photopay(self, obj): - html = obj.get_photopay_html() - return mark_safe(html) - - show_photopay.short_description = 'Чек' - - def send_message(orders, request, queryset): - selected_objects = request.POST.getlist(ACTION_CHECKBOX_NAME) - if len(selected_objects) != 1: - messages.error(request, "Выберите только один объект") - return - - selected_user_id = int(selected_objects[0]) - obj = queryset.get(orderID=selected_user_id) - user_id = obj.userID - url = reverse('send_telegram_message', kwargs={'chat_id': user_id}) - return HttpResponseRedirect(url) - - - send_message.short_description = 'Отправка сообщения' - -admin.site.register(Orders, OrdersAdmin) diff --git a/adminpanelapp/apps.py b/adminpanelapp/apps.py deleted file mode 100644 index f186ec5..0000000 --- a/adminpanelapp/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class AdminpanelappConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'adminpanelapp' diff --git a/adminpanelapp/migrations/__init__.py b/adminpanelapp/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/adminpanelapp/models.py b/adminpanelapp/models.py index 4f039a1..de24dc4 100644 --- a/adminpanelapp/models.py +++ b/adminpanelapp/models.py @@ -1,3 +1,4 @@ +import time from urllib.parse import quote import requests @@ -14,7 +15,7 @@ class Orders(models.Model): orderName = models.CharField(max_length=100, verbose_name='наименование', null=True) orderDesc = models.TextField(verbose_name='описание', null=True) orderPhoto = models.ImageField(verbose_name='фото', null=True) - orderPhotoPay = models.ImageField(upload_to='photo/', verbose_name='чек') + orderPhotoPay = models.ImageField(verbose_name='чек') orderAddress = models.CharField(max_length=100, verbose_name='адрес доставки', blank=True, null=True) orderAccess = models.CharField(max_length=100, verbose_name='доступ', blank=True, null=True) orderCreateDateTime = models.DateTimeField(auto_now_add=True, null=True, verbose_name='дата и время создания') @@ -37,12 +38,13 @@ class Orders(models.Model):
- Увеличить фото + Увеличить фото