они грузят API сайта и базу данных
включить в JWT токен еще хеш пароля
if flatform.is_valid() and objform.is_valid():
    with transaction.atomic()
        flat = flatform.save()
        obj = objform.save(commit=False)
        obj.Flat = flat
        obj.save()global лучше объявить глобальный объект и спрятать flag в него:class PortScanner:
    
    def __init__(self):
        self.flag = 0
        
    def animate_menu_up(self):
        print("\n")
        ...
        self.flag = 1__init__() глобального объекта. И основной цикл вынести в отдельный метод, например, run(). Тогда на нижнем уровне у нас останется что-то вроде:import ...
class PortScanner:
    ...
if __name__ == '__main__':
    main_obj = PortScanner()
    main_obj.run()def animate_menu_up():
    """ Создание красивого меню (вверх). """while True: в select_mode(),MF_INITIAL = 0
MF_MENU_CENTER = 1
MF_MENU_DOWN = 2
MF_SELECT = 3
SCREEN_WIDTH = 50
ALL_PORTS = [22, 80, 7777, 2516]
SOCK_TIMEOUT = 0.5
ANIM_SYMBOL = '~'
ANIM_DELAY = 0.02except RuntimeError:
    continueimport traceback
...
except RuntimeError:
    traceback.print_exc(file=sys.stdout)
    continuewhile True:
    try:
        {
            MF_MENU_CENTER: th_three.start,
            MF_MENU_DOWN: th_two.start,
            MF_SELECT: select_mode,
        }[flag]()
    except RuntimeError:
        traceback.print_exc(file=sys.stdout)
        continueif...elif...else.def animate_menu_center():
    """ Создание анимации центрального меню. """
    # настройки для анимации
    output_strings = [
        '[1] scan all ports',
        '[2] scan enter port',
        '[3] exit',
        'SCANNER V1.0',
    ]
    # анимация названия
    for output_string in output_strings:
        print('\r\t\t', end='')
        for ch in output_string:
            print(ch, end='')
            time.sleep(ANIM_DELAY)
        # last string?
        if output_string != output_strings[-1]:
            # new line
            print()
    print('', flush=True)
    flag = MF_MENU_DOWN# TODO: реализовать режим '2' (скан произвольного списка портов)pip и setuptools. Вот хороший гайд, можете пропустить часть “Uploading the distribution archives” и далее, если не хотите делать ваши пакеты общедоступными. И не забывайте про pip install -e.      Car.__init__(self).super() возвращет класс, ближайший к текущему согласно MRO. Вот вроде неплохая статья на русском: https://habr.com/post/62203/.      call_func = input("Введите название функции чтобы её вызвать: ")
locals()[call_func]()call_func. Если они определены в неймспейсе модуля, а call_func − глубже, в функции или методе, то поможет globals(). А если они вообще где-то в других модулях, которые могут не быть импортированы заранее, то нужно копать в сторону importlib.import_module, но это уж точно оверкилл.eval, но тоже нехорошо.      for project in Projects.objects.all():
    print('Title: ', project.title)
    print('Description: ', project.description)
    for preview in project.preview_set.all():
        print('\tImage title: ', preview.title)
        print('\tImage path: ', preview.image){% for project in project_list %}
    <h2>{{ project.title }}</h2>
    <p>{{ project.description }}</p>
    {% for preview in project.preview_set.all %}
    <h3>{{ preview.title }}</h3>
    <img src="{{ preview.image }}">
    {% endfor %}
{% endfor %}def portfolio(arg):
    ctx = {
        'project_list': Project.objects.all(),
    }
    return render(arg, 'portfolio.html', ctx)instance=request.user
user_form = UserForm(request.POST)
if user_form.is_valid():
    user = user_form.save()