Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (3)

Наибольший вклад в теги

Все теги (29)

Лучшие ответы пользователя

Все ответы (27)
  • Работа с CSV-файлами в Python?

    @serhiops
    Python/JavaScript/C++
    Чтобы
    понять, как это все работает
    нужно смотреть документацию/гайды. Абсолютно ничего сложного в этом нет.
    Чтение
    Запись
    Если будет возникать конкретная ошибка, то уже пиши в коментариях.
    Ответ написан
    1 комментарий
  • Как найти максимальные значения элементов массива?

    @serhiops
    Python/JavaScript/C++
    Самый оптимальный вариант:
    import heapq
    a = [1, 11, 23, 41]
    largest = heapq.nlargest(2, a)   #[23,41]
    smallest =heapq.nsmallest(2, a)  #[1,11]
    Ответ написан
    Комментировать
  • Если бы вам предложили написать свою ОС с нуля (никаких Linux), какой ЯП вы бы выбрали?

    @serhiops
    Python/JavaScript/C++
    Операционные системы пишут ,в основном, на следующих языках: С, С++, C#, язык ассамблера. Обычно, их смешивают - где особо производительность не нужна - С++, С#. В местах, где важна каждая миллисикунда - С, ассамблер.
    На самом деле, как альтернативу в данный момент я вижу только Go. Ненамного медленнее, а скорость разработки растет в разы.
    Проблема в том, что большинство популярных ныне языков программирования попросту не настолько низкоуровневые, чтобы сделать хоть что-то весомое в этой области.
    На практике вам не придется выбирать на каком языке писать ОС, потому что 95% разработки это поддерживание/переделывание старого кода.
    Ответ написан
    9 комментариев
  • Как сделать таблицу через sqlite 3?

    @serhiops
    Python/JavaScript/C++
    Ошибка тут (и даже не одна):
    async def on_member_join(member):
        if cursor.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone() is None:
            cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 1)")
            db.commit()
        else:
            pass

    1. В sqlite можно добавлять только примитивные типы данных : int, str, bool, etc.. А ты пытаешься положить туда экземпляр класса:
    cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 1)")
    Ты не можешь положить member, обратись к его атрибутам, как ты это сделал с member.id
    2. Я хз где большинство людей смотрят гайды по sqlite, ибо подобные вопросы возникают очень часто, а ошибки одни и теже (возьму тот-же пример):
    cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 1)")
    при помощи f-строки или других способов конкатинации строк нельзя строить sqlite-запросы. Вы ,как минимум, не защищаете себя от sql-иньекций. Правильный вариант:
    cursor.execute("INSERT INTO users VALUES (?,?,?,?,?)", (member.atribute,member.id,0, 0, 1 ))
    3. Такие вопросы задаются очень часто, вот последниц, на который я давал ответ 2 дня назад:
    link
    4. Саму функцию вы тоже странно написали, зачем блок else?
    @client.event
    async def on_member_join(member):
        if cursor.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone() is None:
            cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 1)")
            db.commit()
    Этого должно хватить
    Ответ написан
  • Как принять body из POST запроса и вернуть данные на front?

    @serhiops
    Python/JavaScript/C++
    Достаточно странное прописание api...
    class SizeDiskSet(viewsets.ReadOnlyModelViewSet):
    
        queryset = SizeDisk.objects.all()
        serializer_class = SizeDiskSerializer
        permission_classes = [permissions.AllowAny]
    
        def get_serializer_class(self):
            return SizeDiskSerializer

    1.Вы прописали явно класс сериалайзера в атрибутах класса, зачем вы пишете функцию get_serializer_class?
    2. Вы прописуете модификатор доступа permissions.AllowAny, но это поведение по-умолчанию, явно его указывать не нужно(если вы ,конечно, не изменяли значение по умолчанию в settings.py)
    3.Вас не смущает, что вы используете viewsets.ReadOnlyModelViewSet для добавления в базу данных? Разве название не говорит само за себя?

    serializers.py:
    from rest_framework import serializers
    from .models import YourModel
    
    class YourModelSerializer(serializers.ModelSerializer):
        class Meta:
            model = YourModel
            fields = "__all__"  #Выберет все поля, но рекомендуется указываять явно при помощи списка или кортежа:['field1', 'field2']

    api.py:
    from rest_framework.viewsets import ModelViewSet
    from .serializers import YourModelSerializer
    from .models import YourModel
    
    class YourModelViewset(ModelViewSet):
        queryset = YourModel.objects.all()
        serializer_class = YourModelSerializer

    urls.py
    from django.urls import path, include
    from . import api
    from rest_framework import routers
    
    router = routers.SimpleRouter()
    router.register(r'model-list', api.YourModelViewset)
    
    urlpatterns = [
        ...
       path('api/v1', include(router.urls)),
    ]

    Теперь список всех записей будет доступен по ссылке api/v1/model-list/
    По этой же ссылке вы можете делать POST И GET запросы.
    По адресу api/v1/model-list/pk/ Вы получите 1 запись по первичному ключу
    По этой ссылке вы сможете делать GET, PUT, PATCH и DELETE запросы (мб еще какие-то но я другие не использовал).
    После того, как вы все это проделаете можно будет приступить к выполнению задачи. Первое что пришло мне на ум - переопределить метод create, Метод прописан в миксине CreateModelMixin и состоит в классе ModelViewSet:

    from rest_framework.response import Response
    
    class YourModelViewset(ModelViewset):
       #то, что мы рантше писали
       def create(self, request, *args, **kwargs):
            serializer =  YourModelSerializer(data = request.data)
            serializer.is_valid(raise_exception = True)
            serializer.save()
            return Response({"data":serializer.data})

    После этого вам вернутся только что сохраненные данные
    Ответ написан
    Комментировать