Files
2025-11-18 03:36:49 +08:00

66 lines
3.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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