Задать вопрос
  • Не могу понять, почему код работает не так?

    Код бы конечно в тэг обернуть и отформатировать по-человечески.

    Ну и в коде дичь, конечно. Вы же спрашиваете у пользователя номер документа, а по нему потом не сверяетесь.

    Да и с переменными беда аргумент people, а передаете туда documents. Что вообще происходит?

    У вас есть документы и директории (полки?). Полки вроде даже и не используются в задаче. Соответсвтенно, нужно перебрать список документов, сверить номера с введенным пользователем и вывести имя.
  • Как настроить debug_toolbar для django?

    Код можно по-человечески в тэг обернуть?

    В документации указано же, что нужно дебаг тулбар после django.contrib.* секции подключить в INSTALLED_APPS.
  • Как хранить файлы в python скрипте?

    kokapuk, можно даже сделать скрипт, который из нужного файла сделает скрипт, который при запуске создаст файл :)

    На выходе получится скрипт, который я выше привел примером.

    def main():
        INPUT_FILE = 'img.png'
        OUTPUT_SCRIPT = 'qwerty.py'
    
        with open(INPUT_FILE, 'rb') as IN, open(OUTPUT_SCRIPT, 'wb') as OUT:
            OUT.write(f'''
    def main():
        with open('{INPUT_FILE}', 'wb') as f:
            f.write({IN.read()})
    
    
    if __name__ == '__main__':
        main()        
    '''.lstrip().encode())
    
    
    if __name__ == '__main__':
        main()


    Немного расширив скрипт, можно и несколько файлов туда запихать. Применить алгоритм сжатия какой и получится самопальный самораспаковывающийся архив. Питонячий скрипт вроде как можно и в exe запихать. Но такие вещи на Go вероятно вообще шикарно делать, почти то же самое + его в бинарник под любую ОС собрать сильно проще.
  • Как хранить файлы в python скрипте?

    Так а что поменяется? Считай файл побайтово, запиши в переменную. Будет тебе exe также записываться.

    Пример с картинкой (логотип питона):
    def main():
        with open('python.png', 'wb') as f:
            f.write(b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\x00\x00\x03\'IDATx^\xc5\x96\xcfk\xd3`\x18\xc7\xcb\x10\xd9\x1f\xe1\xc9\x93\x0c\xf1O\x90B\x92vlI:\xc4\xc9\x04\x1d;x\x12\x91Q\xc7\x18c\xb4\x8c!"C\x846i\x8fcL\x10\xdda\x0c\x91\xe1Q\x86\x0c\xd1&\x99\xec"\x1eD\xc6\x0eCT\xc8\x9bN\xd3\xb7\x10\x9f\'Yg\xfb$k\x97-\xe0\x03\x1fV\xba>\xcf\xf7y\x93\xe7\xc7\x9bJ\xc5\xb0\xd1\x97\xdeyIw2B\xc9\x9e\x95*\xec\xb9X\xb6_#R\x99=\xcfT\xeasY\xdd\x19L/y\xfd\xd4\xef\xcc\x96.z\xe7D\xcd\x99\x145\xb6\x07x=\xd8\x17\xca\xf64&K\xe3\x9c\xca\x8a\x9e\xd7\'\xeal\r\x83\x0b\x1a\xfb%h\x8e\x1b!\x1a\x02\x9e\xd2\x06&N\xe3\xc56Ag\xd7\xfd\xa0\xf0\xa8\xf1T\xe9\xd2\xc1\x05H\xe4;\x15\x8cDw\xc6i\xbc\xd8\x06\xc23\x18L\xaa8\xf9\xa3\xef4\xb6\x19\x12\x8b\x00\x12\x9do\x8fu*\x13\xabA\x02\xc0^\xb6\xcanH\x9a\x93\x17"\xc4\xa2H:\x81\xd8$\x92\x00\xb6\x1d\x14\xa1~\x0cU*z\xea\x04\x8aE\xafO\xa8\xb2\xb1l\xa5^8)(@E;\xa8\xb0\x85\xa6\xa9\x8cpC)\xb4hZ\xea-\xcfKwv\x87\xdf\xe7\xe5\xa0\xd5\x92\x04\x13l\x98\xca\n\xe0\xb5\xe3Z\xca\x86\xb73\xfaoNdJ\xec>uN\x02I\xab\x17\x1a\xe6\xf0\x0b\x9a\x00\xc2\x8d\xdc\xcc\xd1\xe9%\x8d\xedR\xe7$\xc0\x89\xc8Me\x8d\x8a\x07\xc8\xfb\xde\xd7\x89\xfe\xd4`\x95\xa5\xa9cR\xe0nh\x18\xf2VX<\xa0i\xe6\x86`\xd08S\xd41\t\xe0\xfd\x9b\xf6\xc7\x9b\x97\xa8h;X\x94)\x98\xedK\xd49\x01\xbe<x\xb63\xe0\x9a\xf2;*\xda\x8e\x0b\xf5\x01O\x80\xadG\x04\x08\x01\'\xfa\x06cyY\xd4\xedEQ?x\x04m\xf8\x10\xab\\\x82v\xc4U\x9c)\xd5\xe7\xfc5\xad\xdb\x13\x9f6\x8b\x17\xff\x98\xea[*Hqk\xca\x1bL\xa0k\xfb\t\xe5\xa0\x98\xd8\xf6\xed\xcbX\xb9p\xaa\xc7PX\x8b\rK}\x02\x7f\x9f\xba\xf0\xd95\xd4\x05n)\xf3\r\x03\xbe3\xe4un\xca.\x15\x8b\x02\xdb1\x95\xed\xf5\n`\x19\xc1\x8f\'\xb8u\xb2\xa0qpM\x15_A\xd7"\xfc\xf1\xb36~\xa5a(\x9c:\'\x81_\x84C\xda\xef\xab\x11\xc2-j\xf0\xc3I\xea\x98\x14\xbc64\xe8\x0f"\xbf\xc0\xc2\xe2Px\xf6\x07x\xcfS\xd41\x19\x0e\x07\x11\x1a\x14\xda]*\x8ed4\xe7=7\xd5\xe9\xb0\xf3\xd9\xc1\x83\x1d\xed\x82\xc3q\xbcJ\x13\x80\x0e\xd9\xc2\xca\xa7\xceg\x05:\xe7U\xc72B\xc3\xcb\'\xde\xff\x82+w\x00\xde\xe9z%\x00\xff/\xf0\xed\xdc\xec\xc9Pf\x9b\x86:\x16Z\xc7\xdd\x8c[\xbd\x12\xf0\xe7\xc1b$\x96\x92\xa1\xf1b[\xaf\x04\xba\x81\xc3\x89\xc6\x8bmq\x12\x80a\x95\xc7\r\x07\x13\xf1\xf3\x7fH@6[>\xf0\xf9Nb\t\xc0\x1d\xeeZX,\n\xb9\xee\x1a\xb9\x01\xec\xed\xd6%\x04\xef\x7f4^l\xf3\xbcb\x1f\xcc\x82\xd5\xb0\xe0q\x04;\xc3o\xb58\xd5\xde\xcd0\x10l\xbf{\xb0<v\xc3\x82\x9d\xc06\xdc\xe3\x96\x9a\x0f\xf5y\x12\x86\x89ps$\x8d\xd3\x11\xd6\xf22\xae^<)\x08\xaf`\xadpcX\x8c+\xfc\x17\xd0\xd6\xf7co\xe6q"\x00\x00\x00\x00IEND\xaeB`\x82')
    
    
    if __name__ == '__main__':
        main()
  • Нужен ли мне k8s?

    mystdeim, вам там выше Swarm рекомендуют, вот если по какой-то причине вам уже не хватает docker-compose, то +1 за Swarm. Но у меня вот на VDSке сервисков 6-8 крутится, стоит nginx, а за ним всякие вещи в docker-compose, некоторые даже просто в Docker и хватает. Я все хочу поднять Swarm и заменить nginx на traefik, но лень. И так все годами хорошо работает.
  • Нужен ли мне k8s?

    mystdeim, я вам даже не со стороны жора ресурсов его не рекомендую, сложность деплоя сервисов и поддержание работоспособности всего этого счастья неоправдано вырастет в вашем случае. Попробуйте для чисто себя интереса ради в гугле или амазоне (они вроде дают беслпатные пробные периоды) развернуть кубик (благо они чуть ли не в одну кнопку его дают развернуть, а на своем железе не прибегая к вещам типа Rancher та ещё работенка) и задеплоить какой-нибудь простенький сервисок.
  • Как исправить ошибку при открытие txt с помощью json?

    А что в плане документации неверно?

    with open('name.txt', 'r') as f:
        test = json.loads(f.read())


    Аналогично:
    with open('name.txt', 'r') as f:
        test = json.load(f)
  • Как исправить ошибку при открытие txt с помощью json?

    NewUser9901, проблема именно в файле. У вас даже в трейсбеке `test1 = json.loads(f1.read())`, то есть первый файл верно считался и распарсился в json.
  • Как исправить ошибку при открытие txt с помощью json?

    Было бы неплохо показать что внутри файлов. Верятно там невалидный JSON?
  • Python. Найти строку в текстовом документе и редактировать её сохранив остальные строки. поможете?

    А в чем проблема то? Какие действия были предприняты, чтобы решить проблему?
    Если вводится строка целиком для замены, то replace вам в помощь. Если только номер строки или её начало, то придеться заморочиться с seek, найти начало и конец строки и заменить. В обоих случаях учесть \n и все.
  • Как подключить Vue к DRF?

    Виктор Юрченко, Vue это клиент, он общается с бэкендом. Если речь о чистом Vue без SSR, то его должно что-то отдать клиенту, какой-то веб-сервер типа nginx, apache2 или даже с django его отдать (но так лучше не делать). Затем, когда приложение Vue отрендерилось в браузере оно общается с сервером, все.

    Обычно схема сервера выглядит так:
    Стоит nginx, слушает все запросы на домен site.com.
    Если приходит запрос на site.com, то отдаем статику в виде html и js, которые содержат Vue приложение.
    Если приходит запрос вида api.site.com, либо site.com/api (тут кому как удобнее), то nginx пересылает запросы в django.
  • Как подключить Vue к DRF?

    Я в ступоре, и даже не знаю как объяснить человеку, который УЖЕ играется с джанго и вуе, но не знает как сделать сраный запрос вместо одного сервера к другому. Тут какой-то порядок знаний странный вышел.

    Поищите в проекте на Vue конфиги, а в них переменные типа URL или BASE_URL - это и должен быть путь до сервера. Обычно так.

    Поделать руками curl или Postman запросы к бэкенду - убедиться, что он работает.
    Посмотреть в отладчике браузера куда с фронта запросы ломятся - убедиться, что к вашему бэкенду.
  • Django + Dash, безопасно, без Enterprise лицензии -- совсем никак?

    Владимир, а ещё я кажется не внимательно прочитал вопрос, и предложил сложное решение, если у вас есть разграничении прав в джанге, то можно конечно же, рендерить фрейм только для пользоателей с нужными правами. Но если вы беспокоитесь о том, что кто-то даст ссылку на айфрем, другому человеку, и сама по себе ссылка никак не защищает, то тогда нужно делать что-то вроде того, что я описал.
  • Django + Dash, безопасно, без Enterprise лицензии -- совсем никак?

    Владимир, нет, не CSRF. Можете придумать что угодно, например:
    1. Взять JWT токен с симметричным ключом, для примера, ключ будут знать только Django и Dash, ссылка на пример - https://pyjwt.readthedocs.io/en/latest/#example-usage
    2. На стороне Django, если пользователь залогинен и хочет запросить фрейм, генерируете ему такой токен, данные можете туда добавить любые по вкусу, например user_id какой-нибудь:
    jwt.encode({'user_id': 123}, 'secret', algorithm='HS256')

    3. Рендерите этот токен в путь к iframe:
    <iframe src="http://dash.com/some/path?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg">

    4. На стороне Dash вам придет запрос с этим токеном, вы с помощью ключа декодируйте (по сути подпись проверяете, что она валидна) и тогда можно рендерить содержимое фрейма.
    jwt.decode(b'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg', 'secret', algorithms=['HS256'])


    P.S. Все таки стоит к данным в токен добавить параметр exp, чтобы токен был валиден ограниченное время! Например:
    from datetime import datetime
    
    exp = int(datetime.utcnow().timestamp()) + 10 # Текущее время + 10 секунд
    jwt.encode({'user_id': 123, 'exp': exp}, 'secret', algorithm='HS256')


    Тогда токен будет валиден в течение 10 секунд, должно хватить на запрос, зато если он к кому-то попадет, то через 10 секунд уже будет недействителен.
  • Django + Dash, безопасно, без Enterprise лицензии -- совсем никак?

    Ну сделайте авторизацию через токен, прокидывайте его в get-параметрах к фрейму. Если там фласк, и можете в нем писать, как раз получите токен, и если все ок - рендеретесь.
  • Как добавлять объекты в класс на Python?

    Есть подозрение, что задача подразумевает использование одного класса и его экземпляра как хранилище, аля:
    users = Users()
    users.add({'id': 1, 'name': 'Qwerty'})
    users.find(id=1)
    users.update(id=1, {'name': 'Noname'})


    Ну и, соответственно, реализация там будет другая, со словарем наиболее удобная, кажется.
  • Как добавлять объекты в класс на Python?

    Вы тут в ООП плохо разбираетесь, а не только в питоне.
    Советую для начала любую первую попавшуюся книгу по питону почитать, поймете, насколько ваш вопрос странный.

    Причем у меня нет цели как-то посмеяться над вами, но у вас вопрос сформирован так, что вы как будто взяли какие-то слова из мира разработки смешали и получился ваш вопрос. Даже если здесь кто-то вам напишет решение, вряд ли оно вам хоть как-то поможет, ибо нет даже базового понимания вещей. В ваших же интересах или взяться за изучение, или бросить это дело.