from django import forms from django.contrib.auth.decorators import login_required from django.core.exceptions import ValidationError from django.http import HttpResponseForbidden from django.shortcuts import redirect, render from django.views.decorators.http import require_http_methods from wagtail.admin import messages from .models import SiteSettings from .site_setup import COMPANY_FIELDS, default_site, setup_company_site class CompanySetupForm(forms.ModelForm): company_name = forms.CharField(label="企业名称", max_length=100) create_demo = forms.BooleanField( label="创建软件/技术服务企业示例站", required=False, help_text="仅补齐缺失页面和菜单,新页面将公开发布;不会覆盖已有页面或菜单。", ) class Meta: model = SiteSettings fields = COMPANY_FIELDS help_texts = { "contact_email": "新建咨询表单将使用此邮箱发送通知;需先配置服务器邮件服务。", "icp_number": "请填写本企业真实备案号;未取得备案号时留空,不使用示例号码。", } @login_required(login_url="wagtailadmin_login") @require_http_methods(["GET", "POST"]) def company_setup(request): if not request.user.is_active or not request.user.is_superuser: return HttpResponseForbidden("仅超级管理员可以初始化企业站点。") try: site = default_site() except ValidationError as error: return render(request, "core/site_setup.html", {"setup_error": ";".join(error.messages)}) settings = SiteSettings.for_site(site) form = CompanySetupForm(request.POST if request.method == "POST" else None, instance=settings) if request.method == "POST" and form.is_valid(): try: created = setup_company_site(form.cleaned_data, form.cleaned_data["create_demo"]) except ValidationError as error: form.add_error(None, ";".join(error.messages)) else: result = f"企业资料已保存,新增 {len(created)} 个页面。" if form.cleaned_data["create_demo"] else "企业资料已保存,未创建示例内容。" messages.success(request, result) return redirect("company_site_setup") return render(request, "core/site_setup.html", { "form": form, "site": site, "pages": site.root_page.get_children().specific(), })