Files
diary-family/core/forms.py

94 lines
4.6 KiB
Python
Raw 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.
import re
from django import forms
from django.utils import timezone
from .models import (
ReadingRecord,
InsightRecord,
FamilyTask,
TodayPlan,
SystemConfig
)
class ReadingRecordForm(forms.ModelForm):
"""阅读记录表单"""
class Meta:
model = ReadingRecord
fields = ['type', 'title', 'source', 'progress', 'note', 'file']
widgets = {
'type': forms.Select(attrs={'class': 'form-select'}),
'title': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '请输入标题'}),
'source': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '请输入来源'}),
'progress': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '请输入进度'}),
'note': forms.Textarea(attrs={'class': 'form-control', 'rows': 4, 'placeholder': '请输入阅读笔记'}),
'file': forms.FileInput(attrs={'class': 'form-control'}),
}
class InsightRecordForm(forms.ModelForm):
"""感悟记录表单"""
class Meta:
model = InsightRecord
fields = ['content', 'file']
widgets = {
'content': forms.Textarea(attrs={'class': 'form-control', 'rows': 5, 'placeholder': '请输入感悟'}),
'file': forms.FileInput(attrs={'class': 'form-control'}),
}
class FamilyTaskForm(forms.ModelForm):
"""家庭事项表单"""
class Meta:
model = FamilyTask
fields = ['type', 'content', 'priority', 'status', 'deadline']
widgets = {
'type': forms.Select(attrs={'class': 'form-select'}),
'content': forms.Textarea(attrs={'class': 'form-control', 'rows': 3, 'placeholder': '请输入事项内容'}),
'priority': forms.Select(attrs={'class': 'form-select'}),
'status': forms.Select(attrs={'class': 'form-select'}),
'deadline': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}),
}
class TodayPlanForm(forms.ModelForm):
"""今日计划表单"""
class Meta:
model = TodayPlan
fields = ['date', 'content', 'priority', 'type', 'status']
widgets = {
'date': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}),
'content': forms.Textarea(attrs={'class': 'form-control', 'rows': 3, 'placeholder': '请输入计划内容'}),
'priority': forms.Select(attrs={'class': 'form-select'}),
'type': forms.Select(attrs={'class': 'form-select'}),
'status': forms.Select(attrs={'class': 'form-select'}),
}
class SystemConfigForm(forms.ModelForm):
"""系统配置表单"""
class Meta:
model = SystemConfig
fields = ['smtp_server', 'smtp_port', 'smtp_username', 'smtp_password', 'sender_email', 'send_time', 'recipient_email']
widgets = {
'smtp_server': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '请输入SMTP服务器'}),
'smtp_port': forms.NumberInput(attrs={'class': 'form-control', 'placeholder': '请输入SMTP端口'}),
'smtp_username': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '请输入SMTP用户名'}),
'smtp_password': forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': '请输入SMTP密码'}),
'sender_email': forms.EmailInput(attrs={'class': 'form-control', 'placeholder': '请输入发件人的邮箱'}),
'send_time': forms.TimeInput(attrs={'type': 'time', 'class': 'form-control'}),
'recipient_email': forms.EmailInput(attrs={'class': 'form-control', 'placeholder': '请输入收件人邮箱'}),
}
def clean_sender_email(self):
sender_email = self.cleaned_data.get('sender_email')
if sender_email:
email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
if not re.match(email_pattern, sender_email):
logger.warning(f"发件人邮箱格式不正确: {sender_email}")
raise forms.ValidationError("请输入有效的邮箱地址格式如example@domain.com")
return sender_email
def clean_recipient_email(self):
recipient_email = self.cleaned_data.get('recipient_email')
if recipient_email:
email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
if not re.match(email_pattern, recipient_email):
logger.warning(f"收件人邮箱格式不正确: {recipient_email}")
raise forms.ValidationError("请输入有效的邮箱地址格式如example@domain.com")
return recipient_email