Files

66 lines
3.0 KiB
Python
Raw Permalink Normal View History

2025-11-18 03:36:49 +08:00
from django import forms
from plans.models import Plan
class AddDomainForm(forms.Form):
name = forms.CharField(label='主域名', max_length=253)
subdomains = forms.CharField(label='接入子域名(逗号分隔)', required=False, help_text='例如www,static')
origin_host = forms.CharField(label='源站地址域名或IP', max_length=253)
origin_protocol = forms.ChoiceField(label='回源协议', choices=[('http', 'HTTP'), ('https', 'HTTPS')], initial='http')
origin_port = forms.IntegerField(label='回源端口', initial=80, min_value=1, max_value=65535)
plan = forms.ModelChoiceField(
label='套餐',
queryset=Plan.objects.filter(is_active=True, is_public=True, allow_new_purchase=True),
required=False
)
enable_websocket = forms.BooleanField(label='启用WebSocket', required=False, initial=False)
def clean(self):
cleaned = super().clean()
# 规范化子域名列表
subs_raw = cleaned.get('subdomains') or ''
subs = [s.strip() for s in subs_raw.split(',') if s.strip()]
cleaned['subdomains'] = subs
return cleaned
class DomainSettingsForm(forms.Form):
waf_enabled = forms.BooleanField(label='启用 WAF', required=False)
http3_enabled = forms.BooleanField(label='启用 HTTP/3', required=False)
logs_enabled = forms.BooleanField(label='启用实时日志', required=False)
websocket_enabled = forms.BooleanField(label='启用 WebSocket', required=False)
redirect_https_enabled = forms.BooleanField(label='强制 HTTP→HTTPS 跳转', required=False)
cache_rules_json = forms.CharField(label='缓存规则JSON', required=False, widget=forms.Textarea(attrs={'rows': 6}))
ip_whitelist = forms.CharField(label='IP 白名单(逗号分隔)', required=False, widget=forms.Textarea(attrs={'rows': 3}))
ip_blacklist = forms.CharField(label='IP 黑名单(逗号分隔)', required=False, widget=forms.Textarea(attrs={'rows': 3}))
page_rules_json = forms.CharField(label='页面规则JSON', required=False, widget=forms.Textarea(attrs={'rows': 6}))
def clean_cache_rules_json(self):
val = self.cleaned_data.get('cache_rules_json') or ''
if not val.strip():
return {}
import json
try:
return json.loads(val)
except Exception:
raise forms.ValidationError('缓存规则需为合法 JSON')
def clean_page_rules_json(self):
val = self.cleaned_data.get('page_rules_json') or ''
if not val.strip():
return {}
import json
try:
return json.loads(val)
except Exception:
raise forms.ValidationError('页面规则需为合法 JSON')
def clean_ip_whitelist(self):
val = self.cleaned_data.get('ip_whitelist') or ''
ips = [s.strip() for s in val.split(',') if s.strip()]
return ips
def clean_ip_blacklist(self):
val = self.cleaned_data.get('ip_blacklist') or ''
ips = [s.strip() for s in val.split(',') if s.strip()]
return ips