https://github.com/an7oine/django-xterm
Django-pohjainen Xterm.JS-pääteyhteys
https://github.com/an7oine/django-xterm
django python websocket xterm-js
Last synced: 4 months ago
JSON representation
Django-pohjainen Xterm.JS-pääteyhteys
- Host: GitHub
- URL: https://github.com/an7oine/django-xterm
- Owner: an7oine
- Created: 2023-02-03T12:42:31.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2025-12-19T09:13:51.000Z (6 months ago)
- Last Synced: 2025-12-22T03:09:08.169Z (6 months ago)
- Topics: django, python, websocket, xterm-js
- Language: Python
- Homepage:
- Size: 18.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
django-xterm
============
Django-pohjainen Xterm.JS-pääteyhteys
Asennusvaatimukset
------------------
* Django 3.2 tai uudempi
* django-pistoke
Asennus
-------
Paketin asennus näennäisympäristöön:
```bash
pip install django-xterm
```
Django-asetukset:
```python
# projekti/asetukset.py
INSTALLED_APPS = [
...
'django-xterm',
]
```
Käyttö
------
Paketti toteuttaa vuorovaikutteisen pääteistunnon Web-sivun kautta käyttäjälle. Pääte on toteutettu `Xterm.js`-vimpaimen avulla. Vimpain ohjaa Websocket-yhteyden läpi palvelimella olevaa PTY-tiedostokuvaajaa, joka puolestaan ohjaa TTY-päätettä, johon voidaan liittää haluttu, vuorovaikutteinen istunto (esim. `bash`).
Ajettavan istunnon sisällön määräämiseksi käsillä olevan paketin toteuttama `XtermNakyma`-luokka on periytettävä seuraavan esimerkin tapaan:
```python
# sovellus/bash.py
import json
import subprocess
from xterm import XtermNakyma
class Komentokeskusnakyma(XtermNakyma):
template_name = 'sovellus/bash.html'
def prosessi(self):
subprocess.run(['/bin/bash'])
async def websocket(self, request, *args, **kwargs):
data = json.loads(await request.receive())
if not request._tarkista_csrf(data.get('csrfmiddlewaretoken')):
return await request.send(
'\033[31mCSRF-avain puuttuu tai se on virheellinen!\033[0m'
)
await super().websocket(request, *args, **kwargs)
```
```html
{% extends "xterm/xterm.html" %}
{% block sisalto %}
{% csrf_token %}
{{ block.super }}
{% endblock sisalto %}
{% block skriptit %}
{{ block.super }}
document.getElementById("avaa").onsubmit = function (e) {
e.preventDefault();
var formData = new FormData(e.target);
var lomake = {};
formData.forEach(function (value, key) {
lomake[key] = value;
});
avaa_xterm(function (ws) { ws.send(JSON.stringify(lomake)); });
};
{% endblock skriptit %}
```