mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.8 KiB
58 lines
1.8 KiB
5 years ago
|
# coding: utf-8
|
||
|
#
|
||
|
|
||
|
import json
|
||
|
from django import forms
|
||
|
from django.db import transaction
|
||
|
from django.conf import settings
|
||
|
|
||
|
from ..models import Setting
|
||
|
from common.fields import FormEncryptMixin
|
||
|
|
||
|
__all__ = ['BaseForm']
|
||
|
|
||
|
|
||
|
class BaseForm(forms.Form):
|
||
|
def __init__(self, *args, **kwargs):
|
||
|
super().__init__(*args, **kwargs)
|
||
|
for name, field in self.fields.items():
|
||
|
value = getattr(settings, name, None)
|
||
|
if value is None: # and django_value is None:
|
||
|
continue
|
||
|
|
||
|
if value is not None:
|
||
|
if isinstance(value, dict):
|
||
|
value = json.dumps(value)
|
||
|
initial_value = value
|
||
|
else:
|
||
|
initial_value = ''
|
||
|
field.initial = initial_value
|
||
|
|
||
|
def save(self, category="default"):
|
||
|
if not self.is_bound:
|
||
|
raise ValueError("Form is not bound")
|
||
|
|
||
|
# db_settings = Setting.objects.all()
|
||
|
if not self.is_valid():
|
||
|
raise ValueError(self.errors)
|
||
|
|
||
|
with transaction.atomic():
|
||
|
for name, value in self.cleaned_data.items():
|
||
|
field = self.fields[name]
|
||
|
if isinstance(field.widget, forms.PasswordInput) and not value:
|
||
|
continue
|
||
|
# if value == getattr(settings, name):
|
||
|
# continue
|
||
|
|
||
|
encrypted = True if isinstance(field, FormEncryptMixin) else False
|
||
|
try:
|
||
|
setting = Setting.objects.get(name=name)
|
||
|
except Setting.DoesNotExist:
|
||
|
setting = Setting()
|
||
|
setting.name = name
|
||
|
setting.category = category
|
||
|
setting.encrypted = encrypted
|
||
|
setting.cleaned_value = value
|
||
|
setting.save()
|
||
|
|