Пользователь может выбирать из большого количества конфигураций/шаблонов, нужен способ обработки без создания Django представлений/форм для каждого из них
В настоящее время я работаю над проектом на Django, который позволит пользователю генерировать конфигурацию маршрутизатора/коммутатора в зависимости от того, какой тип сервиса/марку маршрутизатора/модель маршрутизатора он выберет.
View: config list (Список зарегистрированных конфигураций для генерации) Пользователь -> Сервис_1 для маршрутизатора X модели Y
Тогда мне нужно будет представить пользователю страницу, которая будет принимать входные данные, необходимые для генерации таких конфигураций
View: generate config (Форма, которая попросит пользователя ввести данные, необходимые для создания файла X config) Например: IP-адрес / маска подсети / нужен ли DHCP / нужны ли маршруты
Затем эти данные будут переданы в переменные, которые будут использованы для заполнения файла шаблона jinja2 для указанного сервиса/модели маршрутизатора/бренда маршрутизатора в функции
Предположим, что структура такова:
-Router Brand X
--Model Y
---Service1.j2
---Service2.j2
---Service3.j2
--Model Z
---Service1.j2
---Service2.j2
---Service3.j2
-Router Brand Y
--Model Y
---Service1.j2
---Service2.j2
---Service3.j2
--Model Z
---Service1.j2
---Service2.j2
---Service3.j2
У меня уже сделана большая часть проекта, сейчас я могу сохранять шаблоны конфигов в базу данных, показывать эти шаблоны пользователю на выбор, и я попробовал создать страницу для генерации конфигов.
Проблема, которая меня беспокоит на данный момент, заключается в том, что если я продолжу делать то, что собирался, -создавать функцию, форму и представление для каждого нового шаблона конфигурации у меня возникнут большие проблемы при попытке масштабирования в дальнейшем.
У нас около 10-12 сервисов, но есть около 5 различных марок маршрутизаторов/коммутаторов, а также множество моделей, которые мы все еще поддерживаем (этот проект для ISP)
Это процесс на данный момент:
views.py
def ar651_ftth_datavpn(request):
if request.method == 'POST':
form = ar651_ftth_datavpn_form(request.POST)
if form.is_valid():
hostname = form.cleaned_data['hostname']
is_dhcp = form.cleaned_data['is_dhcp']
gateway = form.cleaned_data['gateway']
ip_rede = form.cleaned_data['ip_rede']
excluded_ip = form.cleaned_data['excluded_ip']
exIpList_str = form.cleaned_data['exIpList']
exIpList = exIpList_str.split(',')
ip_LanNet = form.cleaned_data['ip_LanNet']
ip_LanNetSubmask = form.cleaned_data['ip_LanNetSubmask']
localizacao = form.cleaned_data['localizacao']
file_path = func_ar651_ftth_datavpn(hostname, is_dhcp, gateway, ip_rede, excluded_ip, exIpList, ip_LanNet, ip_LanNetSubmask, localizacao)
return FileResponse(open(file_path, 'rb'), as_attachment=True)
else:
form = ar651_ftth_datavpn_form()
return render(request, 'ar651_ftth_datavpn.html', {'form': form})
forms.py
class ar651_ftth_datavpn_form(forms.Form):
loc_escolha = [
('SUL', 'Sul'),
('NORTE', 'Norte'),
('CENTRO', 'Centro'),
]
hostname = forms.CharField(max_length=20)
localizacao = forms.CharField(label="Localizacao", widget=forms.Select(choices=loc_escolha))
is_dhcp = forms.BooleanField(required=False)
gateway = forms.CharField(max_length=100, required=False)
ip_rede = forms.CharField(max_length=100, required=False)
excluded_ip = forms.BooleanField(required=False)
exIpList = forms.CharField(max_length=100, required=False)
ip_LanNet = forms.CharField(max_length=100, required=True)
ip_LanNetSubmask = forms.CharField(max_length=100, required=True)
generate config func
def func_ar651_ftth_datavpn(hostname, is_dhcp, gateway, ip_rede, excluded_ip, exIpList, ip_LanNet, ip_LanNetSubmask, localizacao):
if is_dhcp is False:
gateway = ''
ip_rede = ''
if excluded_ip is False:
exIpList = ''
router_vars = {
'hostname': hostname,
'is_dhcp': is_dhcp,
'gateway': gateway,
'ip_rede': ip_rede,
'excluded_ip': excluded_ip,
'localizacao': localizacao,
'exIpList': exIpList,
'ipLanNet': ip_LanNet,
'ip_LanNetSubmask': ip_LanNetSubmask,
}
На данный момент я создал только форму, представление и функцию генерации для одного шаблона конфигурации.