# содержимое файла 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.