 
  
  # содержимое файла settings.py
INSTALLED_APPS = [
    ...
    'allauth.socialaccount.providers.mailru',  # добавляем провайдера mail.ru
    ...
]python manage.py migrate. 
  
   
  
  import time
import sys
import threading
import traceback
import socket
class PortScanner:
    MF_INITIAL = 0
    MF_MENU_CENTER = 1
    MF_MENU_DOWN = 2
    MF_SELECT = 3
    MF_EXIT = 4
    SCREEN_WIDTH = 50
    ALL_PORTS = [22, 80, 7777, 2516]
    SOCK_TIMEOUT = 0.5
    ANIM_SYMBOL = '~'
    ANIM_DELAY = 0.02
    ANSWER_SCAN_ALL = '1'
    ANSWER_SCAN_SELECTED = '2'
    ANSWER_EXIT = '3'
    ANSWERS = [ANSWER_SCAN_ALL, ANSWER_SCAN_SELECTED, ANSWER_EXIT]
    def __init__(self):
        # переменная - флаг, нужна чтобы контролировать выполнение потоков
        self.flag = self.MF_INITIAL
        # переменная, которая содержит выбранный режим
        self.answer = ''
        # создание объекта Thread
        self.th_one = threading.Thread(target=self.animate_menu_up)
        self.th_two = threading.Thread(target=self.animate_menu_down)
        self.th_three = threading.Thread(target=self.animate_menu_center)
    def run(self):
        # запуск потоков
        self.th_one.start()
        while True:
            # select method or thread by flag
            method = {
                self.MF_MENU_CENTER: self.th_three,
                self.MF_MENU_DOWN: self.th_two,
                self.MF_SELECT: self.select_mode,
                self.MF_EXIT: sys.exit,
            }.get(self.flag, None)
            if method is None:
                # unknown flag
                continue
            if isinstance(method, threading.Thread):
                # skip alive threads
                if method.is_alive():
                    continue
                # chose `run()` method tor thread
                method = method.run
            # dispatch control
            try:
                method()
            except RuntimeError:
                traceback.print_exc(file=sys.stdout)
                continue
    def animate_menu_up(self):
        """ Создание красивого меню (вверх). """
        for _ in range(self.SCREEN_WIDTH):
            print(self.ANIM_SYMBOL, end='')
            time.sleep(self.ANIM_DELAY)
        print('', flush=True)
        self.flag = self.MF_MENU_CENTER
    def animate_menu_center(self):
        """ Создание анимации центрального меню. """
        # настройки для анимации
        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(self.ANIM_DELAY)
            # last string?
            if output_string != output_strings[-1]:
                # new line
                print()
        print('', flush=True)
        self.flag = self.MF_MENU_DOWN
    def animate_menu_down(self):
        """ Создание анимации меню (низ). """
        for _ in range(self.SCREEN_WIDTH):
            print(self.ANIM_SYMBOL, end='')
            time.sleep(self.ANIM_DELAY)
        print('', flush=True)
        self.flag = self.MF_SELECT
    def select_mode(self):
        """
        Функция, которая будет проверять выбранный режим и что-то делать.
        """
        # переменная, которая будет содержать выбранный режим
        answer = input("\n[scan] Select mode: ")
        if answer not in self.ANSWERS:
            print('Illegal mode!', end='')
            return
        if answer == '3':
            self.flag = self.MF_EXIT
            return
        # переменная, которая будет содержать хост, для проверки портов
        hostname = input("[scan] Enter hostname: ")
        if answer == '1':
            # если режим проверки всех популярных портов
            # создается список с известными портами
            ports = self.ALL_PORTS
            print("")
            for port in ports:
                # создаю объект сокета, который в будущем будет
                # помогать проверять порты
                sock = socket.socket()
                try:
                    sock.settimeout(self.SOCK_TIMEOUT)
                    sock.connect((hostname, port))
                except socket.error:
                    print(str(port) + " --CLOSE")
                else:
                    print(str(port) + " --OPEN")
            return
        # TODO: реализовать режим '2' (скан произвольного списка портов)
if __name__ == '__main__':
    main_obj = PortScanner()
    main_obj.run() 
  
  wsgi.py может лежать где угодно, главное − правильно на него сослаться через WSGI_APPLICATION . Никаких модулей из сайта импортировать в конфиг как раз таки не надо, можно наделать циркулярных импортов. apps.pу и AppConfig − вещи сугубо опциональные. Лучше не сбивайте с толку других новичков, а то вдруг кто подумает, что джанга и вправду такая дурная, что её не запустить без таких вот плясок с бубном.         
  
   
  
   
  
  
Я теперь думаю, вам лучше обратиться в техподдержку mail.ru, потому что ваш вопрос не имеет отношения к Python или Django.