Initial commit
This commit is contained in:
66
domains/forms.py
Normal file
66
domains/forms.py
Normal file
@@ -0,0 +1,66 @@
|
||||
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
|
||||
Reference in New Issue
Block a user