@yann1nnn

Почему не отправляются post запросы?

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS
from gevent import pywsgi

app = Flask(__name__)

# Конфигурация базы данных (в данном примере используем SQLite)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# Инициализация базы данных
db = SQLAlchemy(app)
CORS(app, resources={r"/*": {"origins": "https://yann1n.github.io"}})


# Модель пользователя
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)  # ID пользователя (уникальный)
    username = db.Column(db.String(80), nullable=False)  # Никнейм пользователя

    def __repr__(self):
        return f"<User {self.id} - {self.username}>"


# Создание таблицы пользователей (если она еще не создана)
with app.app_context():
    db.create_all()


# Маршрут для сохранения данных пользователя
@app.route('/save_user', methods=['POST'])
def save_user():
    data = request.json
    user_id = data.get('id')
    username = data.get('username')

    if user_id and username:
        # Проверяем, существует ли уже пользователь с таким ID
        user = User.query.get(user_id)
        if user:
            # Если пользователь существует, обновляем его никнейм
            user.username = username
            message = "Данные пользователя обновлены"
        else:
            # Если пользователя нет, создаем нового
            user = User(id=user_id, username=username)
            db.session.add(user)
            message = "Пользователь создан"

        # Сохраняем изменения в базе данных
        db.session.commit()

        return jsonify({"message": message, "user": {"id": user.id, "username": user.username}}), 200
    else:
        return jsonify({"error": "Неверные данные"}), 400


if __name__ == '__main__':
    context = ('server.crt', 'server.key')  # certificate and key files
    app.run(host='0.0.0.0', debug=True, ssl_context=context)


<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="viewport-fit=cover, width=device-width, initial-scale=1.0, user-scalable=no">
    <link href="https://fonts.googleapis.com/css?family=Open+Sans&display=swap" rel="stylesheet">
    <script src="https://telegram.org/js/telegram-web-app.js"></script>
    <title>Мой Кликер</title>
    <style>
        /* Общие стили */
     
    </style>
</head>
<body>
    <!-- Экран загрузки -->
    <div id="loadingScreen">
        <div class="loading-icon">
            <img src="sorrel.png" alt="Иконка щавеля">
            <div class="spinner"></div>
        </div>
    </div>

    <header class="top-panel">
        <div class="bonus-block"> 
            <img src="present.png" alt="Иконка подарка">
            <span>
                <span>ЕЖЕДНЕВНЫЙ</span>
                <span>БОНУС</span>
            </span>
        </div>

        <div class="settings-block">
            <img src="sorrel.png" alt="Иконка листика"> 
            <span>+20 В ЧАС</span>
            <img src="settings.png" alt="Иконка настроек">
        </div>
    </header>

    <main class="container">
        <section class="counter">
            <img src="sorrel.png" alt="Иконка листика">
            <span>25689348589</span>
        </section>
        <div class="seedbed-container" id="seedbedContainer">
            <img draggable="false" src="seedbed.png" alt="Иконка грядки" class="seedbed" id="seedbed">
            <div class="glow"></div> 
        </div>
    </main>

    <footer class="bottom-panel">
        <a href="friends.html" style="text-decoration: none; color: inherit;">
            <div class="bottom-panel-item">
                <img src="refs.png" alt="Иконка друзей">
                <span>ДРУЗЬЯ</span>
            </div>
        </a>
        <div class="separator"></div> 
        <div class="bottom-panel-item">
            <img src="shovel.png" alt="Иконка лопаты">
            <span>ЩОВЭЛ</span>
        </div>
        <div class="separator"></div> 
        <div class="bottom-panel-item">
            <img src="coins.png" alt="Иконка монет">
            <span>ЗАДАНИЯ</span>
        </div>
        <div class="separator"></div> 
        <div class="bottom-panel-item">
            <img src="game.png" alt="Иконка мини-игр">
            <span>МИНИ-ИГРЫ</span>
        </div>
    </footer>

    <script>
        // Функция для получения данных пользователя из Telegram
        function getTelegramUserData() {
            // Проверяем, доступен ли объект Telegram Web App
            if (window.Telegram.WebApp) {
                const tg = window.Telegram.WebApp;
                
                // Получаем данные пользователя
                const userId = tg.initDataUnsafe.user.id;
                const userName = tg.initDataUnsafe.user.first_name;

                // Отправляем данные пользователя на сервер
                fetch('https://185.105.88.12:5000/save_user', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    body: JSON.stringify({
                        id: userId,
                        username: userName
                    })
                })
                .then(response => response.json())
                .then(data => {
                    console.log('Данные пользователя сохранены:', data);
                })
                .catch(error => {
                    console.error('Ошибка при сохранении данных пользователя:', error);
                });
            } else {
                console.error('Telegram Web App API недоступен');
            }
        }

        // Вызываем функцию получения данных пользователя после загрузки страницы
        window.addEventListener('load', getTelegramUserData);


        const seedbedContainer = document.getElementById('seedbedContainer');
        const seedbed = document.getElementById('seedbed');
        const loadingScreen = document.getElementById('loadingScreen');
        const container = document.querySelector('.container');

        // Функция для скрытия экрана загрузки после загрузки страницы
        window.addEventListener('load', () => {
            setTimeout(() => {
                loadingScreen.classList.add('hidden');
                setTimeout(() => {
                    container.style.display = 'flex';
                }, 300); // Задержка для плавного перехода
            }, 3300); // 5000 миллисекунд = 5 секунд (можно изменить на 7000 для 7 секунд)
        });

        // Функция для проверки попадания клика в область изображения
        function isClickInsideSeedbed(event) {
            const rect = seedbed.getBoundingClientRect(); // Получаем размеры и положение изображения
            const clickX = event.clientX;
            const clickY = event.clientY;
            
            // Проверяем, находится ли клик в пределах изображения
            return (
                clickX >= rect.left &&
                clickX <= rect.right &&
                clickY >= rect.top &&
                clickY <= rect.bottom
            );
        }

        // Обработчик клика по контейнеру
        seedbedContainer.addEventListener('click', (event) => {
            if (isClickInsideSeedbed(event)) {
                seedbed.classList.add('clicked');
                setTimeout(() => {
                    seedbed.classList.remove('clicked');
                }, 200);
            }
        });
    </script>
</body>
</html>


66e1f4bccb073199490356.png66e1f4c0ec4af833587358.png66e1f4c594767679601497.png
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
xenon
@xenon
Too drunk to fsck
Похоже, на cross-origin, у вас страничка на yann1n.github.io хостится? Этот адрес не может отправлять на https://185.105.88.12:5000/save_user

Почитайте про Cross-Origin запросы, посмотрите на хидер Access-Control-Allow-Origin и как его во Flask сделать - там не сложно - будет работать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы