Ответы пользователя по тегу Flask
  • Как сделать редирект VueJS & Flask?

    @domanskiy
    У самого сейчас проект учебный RestAPI на Flask + Vue

    Тебе нужно в ретурне отдавать JSON и код 200 если всё ОК
    В JSON пихнуть токен, юзернаме, роль юзера, и т.д.

    Токен, используя Vuex запихнуть в стайт и использовать в запросах
    Я использую Vuex. Советую

    Про редирект.
    <script>
        import {mapGetters, mapActions} from 'vuex'
    
        export default {
            name: 'login',
            data() {
                return {
                    form: {
                        email: null,
                        password: null,
                    }
                }
            },
            // computed: mapGetters(['user/USER_AUTH']),
            methods: {
                ...mapActions({
                    loginUser: 'user/LOGIN_USER'
                }),
                submit() {
                    this.loginUser(this.form)
                        .then(() => this.$router.push('/'))
                        .catch(err => console.log(err))
                }
            }
        }
    </script>


    Т.е. метод отправляет в экшен данные формы.
    Экшен Vuex отправляет данные на сервер через API, и т.д.
    actions: {
            async LOGIN_USER({ commit }, form) {
                const response = await axios.post('api/v1/login', form)
    
                const user = await response.data
                commit('UPDATE_USER_AUTH', user)
            },


    Может не самый оптимальный код. Но пока так. Рефакторинг потом устрою.
    Запись в локалсторе, что бы не терять данные при перезагрузке страницы.
    Мутация:
    mutations: {
            UPDATE_USER_AUTH(state, user) {
                localStorage.token = user.token
                localStorage.email = user.email
                localStorage.name = user.name
                localStorage.role = user.role
                state.token = user.token
                state.email = user.email
                state.name = user.name
                state.role = user.role
            }
    Ответ написан
    Комментировать
  • Как оформить запрос к связанным таблицам O2M через ORM sqlalchemy?

    @domanskiy Автор вопроса
    Разобрался.
    Модели у меня были ошибочно сделаны M2M
    Ответ написан
    Комментировать
  • Как избежать дублирования кода в проекте с использованием Flask-RESTplus + Marsmallow?

    @domanskiy
    Очень помогло использование метода SQLAlchemyAutoSchema в последней версии flask-marshmallow
    Сам генерирует схему )

    class DieCutSchema(ma.SQLAlchemyAutoSchema):
        class Meta:
            model = DieCut


    @api.route('/diecuts')
    def index():
        items = DieCut.query.all()
        items_schema = DieCutSchema(many=True)
        result = items_schema.dump(items)
        return jsonify(result)
    Ответ написан
    4 комментария
  • Как добиться автоматической генерации Shema модели используя Marshmallow и SQLAlchemyAutoSchema?

    @domanskiy Автор вопроса
    Нашел решение
    items = TypeMaterial.query.all()
        items_schema = TypeMaterialSchema(many=True)
        results = items_schema.dump(items)
        print(results)
        return jsonify(results)


    Мне кажется очень удобным использование SQLAlchemyAutoSchema
    Может кто напишет, есть ли у него подводные камни?
    Ответ написан
  • Flask-Migrate не видит изменений в БД?

    @domanskiy
    Попробуй
    stamp head
    migrate
    upgrade

    Более радикальный вариант.
    В доках указано что compare_type по дефолту False. Изза этого Auto Generating Migrations не "видит" изменений в типах колонок.
    Как я это победил.

    В папке migrations в файле env.py меняем функцию def run_migrations_online():
    Вариант 1
    compare_type = True
    with connectable.connect() as connection:
            context.configure(
                connection=connection,
                target_metadata=target_metadata,
                process_revision_directives=process_revision_directives,
                **current_app.extensions['migrate'].configure_args,
                # compare_type=True
                compare_type=my_compare_type


    Вариант 2
    Добавляем к параметру функцию my_compare_type в run_migrations_online

    def my_compare_type(context, inspected_column,
                            metadata_column, inspected_type, metadata_type):
            # return False if the metadata_type is the same as the inspected_type
            # or None to allow the default implementation to compare these
            # types. a return value of True means the two types do not
            # match and should result in a type change operation.
            return None
    
    
        with connectable.connect() as connection:
            context.configure(
                connection=connection,
                target_metadata=target_metadata,
                process_revision_directives=process_revision_directives,
                **current_app.extensions['migrate'].configure_args,
                compare_type=my_compare_type
    
            )


    Далее
    manage.py db migrate -m "Initial migration."
    Затем manage.py db upgrade
    Ответ написан
    Комментировать