如何连接 netmiko 和 django 应用程序

How to connect netmiko and django application

由于 netmiko 指定应该有设备类型、IP 地址、用户名和密码,所以我制作了一个名为设备的模型,我想做的是当我单击在 [=42= 中创建的每个设备时] 它应该使用四个凭证执行 netmiko,例如所选或单击的特定设备的设备类型、IP 地址、用户名和密码,它应该允许我键入一个可以通过按下按钮执行的命令

你能帮我看看代码吗

Model.py
class Device(models.Model):
    CISCO1 = 1
    CISCO2 = 2
    CISCO3 = 3
    CISCO4 = 4
    DEVICE_TYPES = (
        (CISCO1, 'cisco_ios'),
        (CISCO2, 'cisco_nxos_ssh'),
        (CISCO3, 'cisco_s300'),
        (CISCO4, 'cisco_tp_tcce'),
    )
    device_name = models.CharField(max_length=50)
    publication_date = models.DateField(null=True)
    IP_address = models.CharField(max_length=50)
    username = models.CharField(max_length=30)
    password = models.CharField(max_length=30)
    device_type = models.PositiveSmallIntegerField(choices=DEVICE_TYPES)
    timestamp = models.DateField(auto_now_add=True, auto_now=False)

    def __str__(self):
        return self.device_name
View.py

This is the connection code but I am confused how to get data from the Model (Device) and pass it here or when I select a device from the view it should get the credential to this method

def connection_manage(request):
    if request.method == "POST":
        form = CommandForm(request.POST)
        if form.is_valid():
            from netmiko import ConnectHandler
            device = {}
            device['device_type'] = 'cisco_ios'
            device['ip'] = 'DESKTOP-CT4RSIT'
            device['username'] = ''
            device['password'] = ''
            cmd = request.POST.get('command', '')
            conn = ConnectHandler(**device)
            output = conn.send_command(cmd)
            return render(request, 'connect.html', {'form': form, 'output': output})
    else:
        form = CommandForm()
        return render(request, 'connect.html', {'form': form})
form.py

class CommandForm(BSModalForm):
    command = forms.CharField(label='Command to execute')
    class Meta:
        model = Device
        exclude = ['timestamp', 'publication_date', 'device_type']
connect.html

{% load static %}
<!doctype html>

<head>
    <title>Mannai Co.</title>
    <link href="{% static 'assets/css/bootstrap.min.css' %}" rel="stylesheet">
    <link rel="stylesheet" href="{% static 'assets/css/login.css' %}">
</head>

<body>
    <div class="wrapper fadeInDown">

        <div id="formContent">

            <div class="fadeIn first">
                <br>
                <img src="{% static 'assets/img/manni-png.png' %}" id="icon" alt="User Icon">
            </div>
            <h3 class="fadeIn second">Netminko APP</h3>
            <p>Run command:</p>
            <form method="POST">
                {% csrf_token %}
                {{form}}
                <br>
                <input type="submit" value="Run command!" class="fadeIn fourth" />
            </form>
            {% if request.POST %}
            <p>Command output:</p>
            <pre>{{ output }}</pre>
            {% endif %}

        </div>
    </div>
    <script src="{% static 'assets/js/bootstrap.min.js' %}"></script>
    <script src="{% static 'assets/js/jquery.min.js' %}"></script>

</body>

</html>

urs.py 路径('execute/',connection_manage,名称='execute_device'),

需要首先设置 当我点击这个时,它应该让我能够手动输入所有细节并按下执行

手动输入所有字段并执行 这是网站的视图,但无论我输入什么,它仍然会连接到 cisco_ios

输出

需要第二次设置 当我单击每个字段按钮时,它应该弹出一个模式,该模式当前正在处理所有填充的字段,当我键入并执行它时,它应该 运行 用于指定的设备

这行不通:

device['ip'] = 'DESKTOP-CT4RSIT'

这需要是:

device['host'] = fqdn.domain.com

device['ip'] = 1.2.3.4      # The IP address of the device