Django+paramiko实现webshell

说明

基于 python3.7 + django 2.2.3 实现的 django-webshell,支持颜色显示,支持 tab 命令补全,项目地址:https://github.com/leffss/django-webssh。 参考项目。在参考项目的基础上做了一些优化:新增前端页面刷新确认页面(刷新会导致 websocket 连接断开)、后端 paramiko 线程创建代码优化、记录命令记录以及结果。有兴趣的同学可以在此基础上稍作修改集成到自己的堡垒机中。

所需技术:

  • websocket 目前市面上大多数的 webssh 都是基于 websocket 协议完成的
  • django-channels django 的第三方插件, 为 django 提供 websocket 支持
  • xterm.js 前端模拟 shell 终端的一个库
  • paramiko python 下对 ssh2 封装的一个库

如何将所需技术整合起来?

  1. xterm.js 在浏览器端模拟 shell 终端, 监听用户输入通过 websocket 将用户输入的内容上传到 django
  2. django 接受到用户上传的内容, 将用户在前端页面输入的内容通过 paramiko 建立的 ssh 通道上传到远程服务器执行
  3. paramiko 将远程服务器的处理结果返回给 django
  4. django 将 paramiko 返回的结果通过 websocket 返回给用户
  5. xterm.js 接收 django 返回的数据并将其写入前端页面

流程图

1274271-20190726130626860-1182048580.png

启动

pip3 install -r requirements.txt
cd django-webssh/webssh/
python3 manage.py runserver 0.0.0.0:8000

访问:http://127.0.0.1:8000

预览

1274271-20190726130640355-1858662427.png
1274271-20190726130648695-147805838.png
1274271-20190726130657096-579552987.png
1274271-20190726130702458-1020829067.png
1274271-20190726130706098-1816038899.png
1274271-20190726130714752-1270703358.png

转载于:https://www.cnblogs.com/leffss/p/11249653.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现图片上传可以分为以下几个步骤: 1. 在 Django 中创建一个视图函数用于处理图片上传请求。 ```python from django.shortcuts import render from django.core.files.storage import FileSystemStorage def upload(request): if request.method == 'POST' and request.FILES['image']: image = request.FILES['image'] fs = FileSystemStorage() filename = fs.save(image.name, image) uploaded_file_url = fs.url(filename) return render(request, 'upload.html', { 'uploaded_file_url': uploaded_file_url }) return render(request, 'upload.html') ``` 2. 在模板中添加一个表单用于上传图片。 ```html <form method="post" action="{% url 'upload' %}" enctype="multipart/form-data"> {% csrf_token %} <input type="file" name="image"> <button type="submit">Upload</button> </form> ``` 3. 配置 MySQL 数据库并创建一个图片模型用于存储上传的图片信息。 ```python from django.db import models class Image(models.Model): title = models.CharField(max_length=255, blank=True) image = models.ImageField(upload_to='images/') uploaded_at = models.DateTimeField(auto_now_add=True) ``` 4. 运行数据库迁移命令以在 MySQL 数据库中创建图片模型对应的表。 ```bash python manage.py makemigrations python manage.py migrate ``` 5. 修改上传处理视图函数,将上传的图片信息保存到数据库。 ```python from django.shortcuts import render, redirect from django.core.files.storage import FileSystemStorage from .models import Image def upload(request): if request.method == 'POST' and request.FILES['image']: image = request.FILES['image'] fs = FileSystemStorage() filename = fs.save(image.name, image) uploaded_file_url = fs.url(filename) image = Image.objects.create(image=filename) return redirect('image_detail', pk=image.pk) return render(request, 'upload.html') ``` 6. 添加一个展示图片信息的视图函数和模板。 ```python from django.shortcuts import render, get_object_or_404 from .models import Image def image_detail(request, pk): image = get_object_or_404(Image, pk=pk) return render(request, 'image_detail.html', {'image': image}) ``` ```html <img src="{{ image.image.url }}" alt="{{ image.title }}"> ``` 7. 最后,配置 MySQL 数据库连接信息,并启动 Django 服务器。 ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': 'localhost', 'PORT': '3306', } } ``` 以上就是 Django+MySQL 实现图片上传的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值