django 기반 웹 쉬 의 간단 한 예 를 자세히 설명 합 니 다.
설명 하 다.
django 프로그램 을 새로 만 듭 니 다.본 고 는 chain 입 니 다.
다음은 간단 한 예 일 뿐 실제 응용 은 자신의 플랫폼 상황 에 따라 수정 할 수 있다.
홈 페이지 를 열 면 1,백 엔 드 를 입력 하고 호스트 에 로그 인 한 다음 로그 인 결 과 를 되 돌려 야 합 니 다.
정상 적 인 항목 은 post 호스트 와 로그 인 계 정 으로 권한 판단 을 한 다음 배경 으로 계 정 비밀 번 호 를 읽 고 로그 인 할 수 있 습 니 다.
djang 백 스테이지
다음 모듈 을 설치 해 야 합 니 다.
설치 후 버 전 번호 가 잘못 보고 되 어 영향 을 주지 않 습 니 다.
channels==2.0.2
channels-redis==2.1.0
amqp==1.4.9
anyjson==0.3.3
asgi-redis==1.4.3
asgiref==2.3.0
async-timeout==2.0.0
attrs==17.4.0
cd /tmp/
wget https://files.pythonhosted.org/packages/12/2a/e9e4fb2e6b2f7a75577e0614926819a472934b0b85f205ba5d5d2add54d0/Twisted-18.4.0.tar.bz2
tar xf Twisted-18.4.0.tar.bz2
cd Twisted-18.4.0
python3 setup.py install
시작 redis목차
chain/
chain/
settings.py
asgi.py
consumers.py
routing.py
templates/
index.html
settings.py
# django-channels
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels_redis.core.RedisChannelLayer",
"CONFIG": {
"hosts": [("127.0.0.1", 6379)],
},
},
}
# ASGI
ASGI_APPLICATION = "chain.routing.application"
consumers.py
from asgiref.sync import async_to_sync
from channels.generic.websocket import WebsocketConsumer
import paramiko
import threading
import time
from channels.layers import get_channel_layer
channel_layer = get_channel_layer()
class MyThread(threading.Thread):
def __init__(self, id, chan):
threading.Thread.__init__(self)
self.chan = chan
def run(self):
while not self.chan.chan.exit_status_ready():
time.sleep(0.1)
try:
data = self.chan.chan.recv(1024)
async_to_sync(self.chan.channel_layer.group_send)(
self.chan.scope['user'].username,
{
"type": "user.message",
"text": bytes.decode(data)
},
)
except Exception as ex:
print(str(ex))
self.chan.sshclient.close()
return False
class EchoConsumer(WebsocketConsumer):
def connect(self):
# channels group, : , channel_layer redis
async_to_sync(self.channel_layer.group_add)(self.scope['user'].username, self.channel_name)
# receive
self.accept()
def receive(self, text_data):
if text_data == '1':
self.sshclient = paramiko.SSHClient()
self.sshclient.load_system_host_keys()
self.sshclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.sshclient.connect('47.104.140.38', 22, 'root', '123456')
self.chan = self.sshclient.invoke_shell(term='xterm')
self.chan.settimeout(0)
t1 = MyThread(999, self)
t1.setDaemon(True)
t1.start()
else:
try:
self.chan.send(text_data)
except Exception as ex:
print(str(ex))
def user_message(self, event):
#
self.send(text_data=event["text"])
def disconnect(self, close_code):
async_to_sync(self.channel_layer.group_discard)(self.scope['user'].username, self.channel_name)
asgi.py
import os
import django
from channels.routing import get_default_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "chain.settings")
django.setup()
application = get_default_application()
routing.py
from channels.auth import AuthMiddlewareStack
from channels.routing import URLRouter, ProtocolTypeRouter
from django.urls import path
from .consumers import EchoConsumer
application = ProtocolTypeRouter({
"websocket": AuthMiddlewareStack(
URLRouter([
path(r"ws/", EchoConsumer),
# path(r"stats/", StatsConsumer),
])
)
})
웹 페이지 설정:index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>django webssh </title>
<link href="/static/css/plugins/ztree/awesomeStyle/awesome.css" rel="external nofollow" rel="stylesheet">
<link href="/static/webssh_static/css/xterm.min.css" rel="external nofollow" rel="stylesheet" type="text/css"/>
<style>
body {
padding-bottom: 30px;
}
.terminal {
border: #000 solid 5px;
font-family: cursive;
{# font-family: Arial, Helvetica, Tahoma ,"Monaco", "DejaVu Sans Mono", "Liberation Mono", sans-serif;#}{# font-family: Tahoma, Helvetica, Arial, sans-serif;#}{# font-family: "\5B8B\4F53","","Monaco", "DejaVu Sans Mono", "Liberation Mono", "Microsoft YaHei", monospace;#} font-size: 15px;
{# color: #f0f0f0;#} background: #000;
{# width: 893px;#}{# height: 550px;#} box-shadow: rgba(0, 0, 0, 0.8) 2px 2px 20px;
}
.reverse-video {
color: #000;
background: #f0f0f0;
}
</style>
</head>
<body>
<div id="terms"></div>
</body>
<script src="/static/webssh_static/js/xterm.min.js"></script>
<script>
var socket = new WebSocket('ws://' + window.location.host + '/ws/');
socket.onopen = function () {
var term = new Terminal();
term.open(document.getElementById('terms'));
term.on('data', function (data) {
console.log(data);
socket.send(data);
});
socket.onmessage = function (msg) {
console.log(msg);
console.log(msg.data);
term.write(msg.data);
};
socket.onerror = function (e) {
console.log(e);
};
socket.onclose = function (e) {
console.log(e);
term.destroy();
};
};
</script>
</html>
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.