diff --git a/app/__init__.py b/app/__init__.py index 56140b2..251ed1d 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -3,6 +3,7 @@ from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate from flask_login import LoginManager from flask_session import Session +from flask_wtf.csrf import CSRFProtect from config import config from flask_bootstrap import Bootstrap @@ -11,6 +12,7 @@ db = SQLAlchemy() migrate = Migrate() login_manager = LoginManager() sess = Session() +csrf = CSRFProtect() bootstrap = Bootstrap() # login_manager 的基本配置 login_manager.login_view = 'auth.login' # 后面我们会创建一个叫 'auth' 的蓝图 @@ -31,11 +33,13 @@ def create_app(config_name='default'): migrate.init_app(app, db) login_manager.init_app(app) sess.init_app(app) + csrf.init_app(app) bootstrap.init_app(app) # 注册自定义过滤器 - from .filters import translate_status + from .filters import translate_status, translate_reason app.jinja_env.filters['translate_status'] = translate_status + app.jinja_env.filters['translate_reason'] = translate_reason # 3. 注册蓝图 (Blueprint) # 后面我们会在这里添加蓝图 diff --git a/app/filters.py b/app/filters.py index 97188ad..5662940 100644 --- a/app/filters.py +++ b/app/filters.py @@ -22,6 +22,26 @@ STATUS_TRANSLATIONS = { 'expired': '已过期' } +REASON_TRANSLATIONS = { + 'cheating': '作弊 (刷上传/下载)', + 'trading': '账号交易/共享', + 'spam': '发布垃圾/违禁信息', + 'abusive': '辱骂/人身攻击', + 'low_ratio': '分享率过低', + 'hit_and_run': 'H&R (下载不做种)', + 'fake_seeding': '假做种', + 'multiple_accounts': '多账号/小号', + 'account_sharing': '账号共享', + 'reselling': '倒卖邀请', + 'harassment': '骚扰他人', + 'scamming': '诈骗行为', + 'other': '其他 (请在描述中详述)' +} + def translate_status(status): """将英文状态翻译为中文""" return STATUS_TRANSLATIONS.get(status, status) + +def translate_reason(reason): + """将英文违规原因翻译为中文""" + return REASON_TRANSLATIONS.get(reason, reason) diff --git a/app/forms.py b/app/forms.py index 663c3de..05e8135 100644 --- a/app/forms.py +++ b/app/forms.py @@ -3,6 +3,7 @@ from wtforms import StringField, SubmitField, PasswordField, BooleanField, TextA from wtforms.validators import DataRequired, Length, Email, EqualTo, ValidationError, Optional, URL from .models import User from wtforms_sqlalchemy.fields import QuerySelectField +from .filters import REASON_TRANSLATIONS def get_active_partner_sites(): return PartnerSite.query.filter_by(is_active=True).order_by(PartnerSite.name) @@ -56,14 +57,7 @@ class ReportForm(FlaskForm): ) reason_category = SelectField( '举报原因分类', - choices=[ - ('cheating', '作弊 (刷上传/下载)'), - ('trading', '账号交易/共享'), - ('spam', '发布垃圾/违禁信息'), - ('abusive', '辱骂/人身攻击'), - ('radio', '分享率过低'), - ('other', '其他 (请在描述中详述)') - ], + choices=[(k, v) for k, v in REASON_TRANSLATIONS.items()], validators=[DataRequired()] ) description = TextAreaField( diff --git a/app/templates/admin/report_detail.html b/app/templates/admin/report_detail.html index 3598f9f..bf35437 100644 --- a/app/templates/admin/report_detail.html +++ b/app/templates/admin/report_detail.html @@ -13,7 +13,7 @@