Профиль пользователя заблокирован сроком с 12 апреля 2022 г. и навсегда по причине: спам
Ответы пользователя по тегу Flask
  • Почему этот код жалуется на "несколько значений"?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Потому что count - это атрибут объекта, который создается при инициализации объекта класса. Более того он и создан неправильно.
    Ты делаешь какой то абсолютно неадекватный бред, может стоить хоть основы Python выучить?
    Ответ написан
    Комментировать
  • Как настроить двухстороннюю связь между flask и JS?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    1. Пишешь API на Flask. Статей в интернете куча, например эта.
    2. Из своего JS скрипта обращаешься к API, например используя fetch.
    3. Довольствуешься результатом.
    Ответ написан
    Комментировать
  • Можно ли подружить aiogram и flask?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Можешь запустить в отдельном процессе, что бы потом при необходимости иметь возможность остановить этот процесс:
    from multiprocessing import Process
    
    from flask import Flask
    from aiogram import Bot, Dispatcher, executor, types
    
    import config
    
    app = Flask(import_name=__name__)
    
    bot = Bot(token=config.BOT_TOKEN)
    dispatcher = Dispatcher(bot=bot)
    
    
    def bot_start_polling():
        executor.start_polling(dispatcher=dispatcher, skip_updates=True)
    
    
    @dispatcher.message_handler(commands=['start'])
    async def bot_handler_start(message: types.Message):
        await message.reply('Foo')
    
    
    @app.get(rule='/start_bot')
    def start_bot():
        bot_process = Process(target=bot_start_polling)
        bot_process.start()
    
        return str(bot_process.pid)
    
    
    if __name__ == '__main__':
        app.run()

    Но это очень тупо так делать, раз уж ты используешь flask, то повесь webhook и делай нормально. Любое решение помимо будет очень странным костылем.
    Ответ написан
  • Оцените тестовое задание?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Потому что все очень плохо, буквально в каждой строчке кода. Полное несоблюдение PEP8 везде, где только можно.
    main.py и settings.py принято держать в корне проекта.
    Хранить какие либо ключи и/или пароли прямо в .py файле и тем более заливать это в github - отвратительная практика.

    Структура проекта отсутствует в принципе:
    - Почему у тебя в папке models конфигурация БД?
    - Почему у тебя параметр подключения к БД прямо в файле, где происходит подключение, а не в конфиге?
    - Зачем вообще файл create_database.py?

    Пробежавшись по остальным файлам разбирать их чисто для комментария нет никакого желания - там полный мрак.
    Ответ написан
    1 комментарий
  • Почему не работает функция внутри @app.route?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Давай хотя бы так, а то чет страшно выглядит...

    @app.route('/result')
    def result():
        username = request.args.get('username')
    
        ok_message=''
        reject_message=''
        uppercase_err_message=''
        num_err_message=''
    
        has_upper = any([i.isupper() for i in username])
        has_digit = any([i.isdigit() for i in username])
    
        if not has_upper:
            uppercase_err_message = 'Need an UPPERCASE'
        elif not has_digit:
            num_err_message = 'need a NUM'
    
        if has_upper and has_digit:
            ok_message = 'ALL GOOD!'
        else:
            reject_message = 'NOT GOOD...'
    
        return render_template(
            'result.html',
            username=username,
            ok_message=ok_message,
            reject_message=reject_message,
            uppercase_err_message=uppercase_err_message,
            num_err_message=num_err_message
        )
    Ответ написан
    Комментировать
  • Не могу создать миграцию.FLASK + Postgresql + SQLAlchemy. Что я делаю не так?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Зачем?
    def __init__(self, username, password):
        self.username = username
        self.password = password
    Ответ написан
  • Flask. TypeError: Object of type Product is not JSON serializable?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    jsonify не умеет сериализовывать классы, для начала нужно информацию подготовить:
    data = [{'id': p.id, 'uid': p.user_id, 'pid': p.product_id} for p in Product.query.all()]
    return jsonify(data)
    Ответ написан
    Комментировать
  • Где ошибка в коде?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    У тебя "проверка" пользователя должна быть в блоке if:
    if request.method == 'POST':
        username = request.form.get('username')  # запрос к данным формы
        password = request.form.get('password')
    
        if username == 'root' and password == 'pass':
            message = "Correct username and password"
        else:
            message = "Wrong username or password"

    Потому что если метод запроса не POST, то переменные username и password созданы не будут, но ты к ним пытаешься обратиться.
    Ответ написан
    Комментировать
  • Как исправить ошибку в flask request.form?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Потому что у тебя текстовое поле не привязано к форме, добавь к форме id а к текстовому поля указатель на форму:
    <label>
        <textarea name="recipe" rows="15" cols="55" form="some-form"></textarea>
    </label>
    <form id="some-form" action="/save" method="POST">
        <input type="submit" value="Сохранить">
    </form>
    Ответ написан
    Комментировать
  • TypeError: The view function did not return a valid response.The function either returned None or ended without a return statement как решить в Flask?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Роут всегда должен что то возвращать, а у тебя в случае ошибки он ничего не возвращает. Более того, из-за того, что ты решил просто "замолчать" ошибку, ты не знаешь почему у тебя случается эта ошибка, а мог бы сделать вот так:
    import logging
    
    @app.route('/create-poem/', methods=['POST', 'GET'])
    def create():
        if request.method == 'POST':
            ...
            try:
                ...
            except Exception:
                logging.exception('')
                return ''
        else:
            ...


    Тогда бы ты увидел ошибку, в которой говорится
    sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: ivan

    Тогда бы ты мог открыть свою БД и увидеть, что в ней действительно нет нужной тебе таблицы, а нет её потому, что ты её не создал. А вот что бы создать таблицу, нужно :
    db.create_all()
    app.run(debug=True)
    Ответ написан
    1 комментарий
  • Как обработать данные присланные на сервер Flask?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Все данные хранятся в request.

    from flask import request
    
    @app.route('/api/index.php', methods=['POST'])
    def listen():
        # json данные
        print(request.json)
    
        # данные формы
        print(request.form.to_dict())
    
        # заголовки
        print(dict(request.headers))
    
        # аргументы
        print(request.args)
    
        return "ok"
    Ответ написан
    1 комментарий
  • Методы или функции для работы с БД через SQLAlchemy?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Общие запросы, которые могут повторяться множество раз в коде пишешь в классе модели, что бы потом не дублировать код, всё остальное по месту, то есть в самих роутах. Выносить в какой то там отдельный файл по 1-2 строчки кода, которые используются 1 раз в 1 месте - такая себе идея.
    Ответ написан
    5 комментариев
  • Как сделать поиск без учета регистра в Flask Sqlite?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Я так понимаю у тебя sqlalchemy, попробуй ilike, но не знаю работает ли он корректно с sqlite:

    ru_riddles = riddles.query.filter(riddles.ruText.ilike(q)).all()
    Ответ написан
    4 комментария
  • Ошибка 404 при обработке get запроса flask?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    В правилах роута ты можешь задавать только параметры адреса, то есть если ты пишешь
    @app.route(rule='/<foo>/<bar>', methods=['GET'])
    def index(foo, bar):
        ....

    То это будет означать, что foo и bar - это параметры адреса, то есть example.com/asda/dasda. Если тебе нужно получить аргументы адреса, например example.com/?foo=asda, то нужно использовать request.args, то есть:
    from flask import request
    
    @app.route(rule='/', methods=['GET'])
    def index():
        if request.args.get('foo'):
            return f'{request.args["foo"]}'
        ....
    Ответ написан
    Комментировать
  • На чем лучше реализовать API Flask или flask_restful?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    FastAPI. Flask годится разве что для ознакомления.
    Ответ написан
    2 комментария
  • Как во flask сделать приватный get/post запрос?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Токены нужно передавать с клиента в заголовках, а на сервере использовать валидацию для роутов, например с flask-jwt-extended

    Минимально рабочий вариант:
    from flask import Flask, request, jsonify
    from flask_jwt_extended import (
        JWTManager,
        create_access_token,
        jwt_required,
        get_jwt_identity
    )
    
    app = Flask(__name__)
    
    app.config['SECRET_KEY'] = 'super-secret'
    app.config['JWT_SECRET_KEY'] = app.config['SECRET_KEY']
    app.config['JWT_ACCESS_TOKEN_EXPIRES'] = False
    
    jwt = JWTManager(app)
    
    users = ['kshnkvn']
    
    
    @app.route('/login', methods=['POST'])
    def login():
        user = request.json.get('user')
    
        if user not in users:
            return jsonify(
                {'status': False, 'result': 'User not exists'})
        else:
            return jsonify(
                {'status': True, 'result': create_access_token(identity=user)})
    
    
    @app.route('/user', methods=['GET'])
    @jwt_required
    def user():
        user = get_jwt_identity()
        return jsonify({'status': True, 'result': user})
    
    
    if __name__ == '__main__':
        app.run(debug=True, port=6061)


    В итоге если шлем запрос на /user без заголовка с авторизацией, то получаем в ответ:
    {
        "msg": "Missing Authorization Header"
    }

    Для получения токена отправляем POST запрос на /login где в теле запроса отправляем JSON с именем пользователя, а в ответ получаем токен:
    {
        "status": true,
        "result": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2MDYzOTk0NjcsIm5iZiI6MTYwNjM5OTQ2NywianRpIjoiMTgxZmY2ZGQtN2FmNS00ZTUxLTlhMzAtODA3MTNhYzNlZGJlIiwiaWRlbnRpdHkiOiJrc2hua3ZuIiwiZnJlc2giOmZhbHNlLCJ0eXBlIjoiYWNjZXNzIn0.DwzxBd-6Hz1Gg6O-7JIoFrBm_XzCoiOD6xIRhFUjG0Q"
    }

    После этого в каждый запрос добавляем заголовок
    "Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2MDYzOTk0NjcsIm5iZiI6MTYwNjM5OTQ2NywianRpIjoiMTgxZmY2ZGQtN2FmNS00ZTUxLTlhMzAtODA3MTNhYzNlZGJlIiwiaWRlbnRpdHkiOiJrc2hua3ZuIiwiZnJlc2giOmZhbHNlLCJ0eXBlIjoiYWNjZXNzIn0.DwzxBd-6Hz1Gg6O-7JIoFrBm_XzCoiOD6xIRhFUjG0Q"
    и заходим на нужную ссылку, например для /user будет следующий ответ:
    {
        "status": true,
        "result": "kshnkvn"
    }
    Ответ написан
    2 комментария
  • Как сделать две базы данный в Flask?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Минимально рабочий вариант:
    from datetime import datetime
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
    app.config['SQLALCHEMY_BINDS'] = {
        'messages': 'sqlite:///message.db'
    }
    
    db = SQLAlchemy(app)
    
    
    class Article(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        title = db.Column(db.String(100), nullable=False)
        intro = db.Column(db.String(300), nullable=False)
        text = db.Column(db.Text, nullable=False)
        date = db.Column(db.DateTime, default=datetime.utcnow)
    
    
        def __repr__(self):
            return '<Article %r>' % self.id
    
    
    class Message(db.Model):
    
        __bind_key__ = 'messages'
    
        id = db.Column(db.Integer, primary_key=True)
        Name = db.Column(db.Text, nullable=False)
        Surname = db.Column(db.Text, nullable=False)
        text = db.Column(db.Text, nullable=False)
        date = db.Column(db.DateTime, default=datetime.utcnow)
    
    
        def __repr__(self):
            return '<Message %r>' % self.Name
    
    
    @app.route('/add_message')
    def add_message():
        message = Message(Name='name', Surname='surname', text='foo')
        db.session.add(message)
        db.session.commit()
        return 'True'
    
    
    db.create_all()
    db.create_all(bind='messages')
    
    
    if __name__ == '__main__':
        app.run(debug=1)
    Ответ написан
    Комментировать
  • Как обработать POST запрос во Flask?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Легко. Можешь не благодарить.
    Ответ написан
    Комментировать
  • Почему не отображается css в Flask?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Папку static создайте и в неё кидайте ваши css.
    Вот так это должно выглядеть:
    /server.py
    /static/style.css
    /templates/index.html
    -------------/images

    Подключение, соответственно:
    <link rel="stylesheet" href='/static/style.css' />
    Ответ написан
    1 комментарий
  • Реализация авторизации в flask?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    from flask import session
    
    
    @app.route('/')
    def index():
        if not session.get('logged_in'):
            return redirect('/submit')
        else:
            return render_template('index.html')
    
    
    @app.route('/submit', methods = ['POST'])
    def post():
        if request.form.get('login') == 'admin':
            session['logged_in'] = True
            return jsonify({'type':'success','msg':'success'})
        return jsonify({'type':'error','msg':'error'})
    Ответ написан
    1 комментарий