详解基于django实现的webssh简单例子

下面我将详细讲解如何实现基于Django实现的WebSSH简单例子,包含两条示例说明。

概述

WebSSH是基于WebSocket协议实现的网页SSH终端。本篇攻略将介绍如何用Django框架搭建一个WebSSH的简单示例,包括前端HTML和JS、后端Django的实现过程以及如何使用WebSocket模块。

示例1:创建Django项目

首先创建Django项目,我们需要使用django-admin startproject命令创建一个项目。假设我们将该项目命名为“webssh”,那么我们在终端中输入以下命令:

django-admin startproject webssh

接下来,我们需要创建一个app实现WebSSH的功能,我们在虚拟环境中输入以下命令:

python manage.py startapp ssh

创建app之后,我们需要在项目的settings.py文件中加入安装包信息asgiref、channels、websocket、daphne、redis,以便后续使用。我们使用pip install命令安装这些包:

pip install asgiref channels websocket daphne redis

添加app以及包之后,还需要在项目的settings.py文件的INSTALLED_APPS中添加我们新建的app:

INSTALLED_APPS = [
    'ssh',
    ...
]

示例2:前端HTML和JS

在Django中,我们可以使用模板语言来渲染HTML页面。创建一个HTML页面,命名为index.html,放在app的templates目录下。代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>WebSSH</title>
</head>
<body>
    <h1>WebSSH</h1>
    <hr>
    <textarea id="input" placeholder="Input your commands here."></textarea>
    <div id="log"></div>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/autobahn/20.7.1/autobahn.min.js"></script>
    <script>
        var ws = new autobahn.Connection({
            url: 'ws://' + window.location.host + '/ws/',
            realm: 'realm1'
        });
        ws.onopen = function (session) {
            console.log('Connected.');

            // 接收服务端数据
            session.subscribe('com.myapp.hello', function (message) {
                console.log("Received: ", message);
                document.getElementById('log').innerHTML += '<p>' + message + '</p>';
            });

            // 向服务端发送数据
            document.getElementById('input').addEventListener('keyup', function (evt) {
                if (evt.keyCode === 13) {
                    var input = document.getElementById('input').value;
                    session.call('com.myapp.calculator', [input]).then(
                        function (res) {
                            console.log("Result:", res);
                            document.getElementById('log').innerHTML += '<p>>' + input + '<br>' + res + '</p>';
                            document.getElementById('input').value = '';
                        }
                    );
                }
            });
        };
        ws.onclose = function () {
            console.log('Connection closed.');
        };
        ws.open();
    </script>
</body>
</html>

页面主要有三个部分:

  1. <textarea>:用于输入要执行的命令
  2. <div>:用于显示终端输出
  3. JavaScript代码:发起WebSocket连接,并实现发送命令和接收终端输出功能

示例3:后端Django实现

在app目录下建立一个consumers.py文件,编写Django Channels Websocket处理程序。该文件主要有以下几个部分:

  1. 导入WebSocketConsumer等相关类
  2. 定义一个Consumer类,继承自WebSocketConsumer
  3. 实现连接事件、接收事件和断开连接事件的方法。

其中def connect方法和def disconnect方法分别代表WebSocket的连接和断开连接事件,def receive方法则是接收WebSocket传来的消息,并回复一个应答消息。该文件代码如下:

import json
from channels.generic.websocket import WebsocketConsumer

class SSHConsumer(WebsocketConsumer):
    def connect(self):
        self.accept()

    def receive(self, text_data):
        text_data_json = json.loads(text_data)
        if text_data_json['type'] == 'command':
            command = text_data_json['command']
            self.send(command)

    def disconnect(self, close_code):
        pass

最后,我们需要在项目目录下的routing.py中添加WebSocket路由映射。代码如下:

from django.urls import re_path
from ssh import consumers

websocket_urlpatterns = [
    re_path(r'ws/$', consumers.SSHConsumer.as_asgi()),
]

至此,一个简单的基于Django实现的WebSSH例子就完成了。可以启动启动项目,并在浏览器中访问http://localhost:8000来查看实现效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解基于django实现的webssh简单例子 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Django结合Websocket进行WebSSH的实现

    什么是webssh?   泛指一种技术可以在网页上实现一个 终端。从而无需 之类的模拟终端工具进行 连接,将 这一比较低层的操作也从 架构扭成了 架构 这样的架构常用在运维制作开发一些堡垒机等系统中,或是目前比较新型的在线教育方式,通过向学生提供一个可以直接使用浏览器进行相关 操作或代码编写的学习方式 主要是建立客户端与服务端的即时通信 模型 此种 实现方式…

    Django 2023年4月13日
    00
  • django admin 编辑页面(change page) 自定义字段, 展示数据

    最近遇到一个需求, 需要在django 的 admin 编辑页内展示由用户上传的进行反馈的图片, 还要支持点击查看原图, 所以需要在编辑页内自定义 img 标签及 a 标签进行图片的展示及点击跳转   import json from django.contrib import admin from django.utils.safestring impor…

    Django 2023年4月9日
    00
  • Django的用户模块与权限系统的示例代码

    下面是Django的用户模块与权限系统的示例代码的完整攻略。 一、用户模块示例代码 用户模块是Django中的一个常用组件,它可以轻松实现用户的注册、登录、密码找回等功能。下面是一个简单的用户模块示例代码: 1. 创建用户模型 首先,在项目的models.py文件中创建一个用户模型: from django.db import models from dja…

    Django 2023年5月16日
    00
  • Django获取多个数据及文件的上传和接收

    Django-2 1.获取多个数据及文件的上传和接收 request.POST request.GET request.FILES request.POST.getlist() 注意: 上传文件form的特殊设置: <form action=”” method=”POST” enctype=’multipart/form-data’ > <…

    Django 2023年4月10日
    00
  • 深入浅析Django MTV模式

    关于深入浅析Django MTV模式的完整攻略,我将详细阐述如下。 MTV模式概述 Django框架采用的是MTV模式,也就是Model-Template-View(模型-模板-视图)模式,是一种用于构建Web应用程序的软件设计模式。在这种模式中,Model负责数据存储和处理,Template负责用户交互页面设计,View负责进行逻辑处理和数据渲染。 MTV…

    Django 2023年5月16日
    00
  • 详尽讲述用Python的Django框架测试驱动开发的教程

    下面我将详细讲解如何编写一篇详尽讲述用Python的Django框架测试驱动开发的教程。步骤如下: 第一步:准备开发环境 安装Python环境 安装Django框架 安装py.test模块 第二步:创建项目和应用 使用Django命令行工具创建一个名为tdd_project的项目,然后使用python manage.py startapp tdd_app创建…

    Django 2023年5月16日
    00
  • python web框架【补充】cookie和session(Django)

    一、cookie和session的介绍 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生。 cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是“…

    Django 2023年4月12日
    00
  • django修改静态文件(css,js)之后,浏览器效果没改变

    今天踩了一个大坑,静态文件(css,js)之后,浏览器效果没改变 按F12查需要改变的元素引用的css标签发现并没有改变。说明浏览器对于css,js文件有缓存。需要手动清除一下!!!           在设置里面清理缓存即可  

    Django 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部