secure-web/backend/websites/admin.py

94 lines
2.9 KiB
Python

"""
Django admin configuration for Website Analyzer models.
"""
from django.contrib import admin
from .models import Website, Scan, Issue, Metric
@admin.register(Website)
class WebsiteAdmin(admin.ModelAdmin):
list_display = ('url', 'domain', 'created_at', 'last_scanned_at')
list_filter = ('created_at', 'last_scanned_at')
search_fields = ('url', 'domain')
readonly_fields = ('id', 'created_at', 'domain')
ordering = ('-created_at',)
class IssueInline(admin.TabularInline):
model = Issue
extra = 0
readonly_fields = ('id', 'category', 'severity', 'tool', 'title', 'created_at')
can_delete = False
show_change_link = True
max_num = 10
class MetricInline(admin.TabularInline):
model = Metric
extra = 0
readonly_fields = ('id', 'name', 'display_name', 'value', 'unit', 'source', 'score')
can_delete = False
max_num = 15
@admin.register(Scan)
class ScanAdmin(admin.ModelAdmin):
list_display = (
'id', 'website', 'status', 'overall_score',
'performance_score', 'security_score', 'created_at'
)
list_filter = ('status', 'created_at')
search_fields = ('website__url', 'website__domain')
readonly_fields = (
'id', 'created_at', 'started_at', 'completed_at',
'celery_task_id', 'raw_lighthouse_data', 'raw_zap_data',
'raw_playwright_data', 'raw_headers_data'
)
inlines = [IssueInline, MetricInline]
ordering = ('-created_at',)
fieldsets = (
('Basic Info', {
'fields': ('id', 'website', 'status', 'celery_task_id')
}),
('Timestamps', {
'fields': ('created_at', 'started_at', 'completed_at')
}),
('Scores', {
'fields': (
'overall_score', 'performance_score', 'accessibility_score',
'seo_score', 'best_practices_score', 'security_score'
)
}),
('Errors', {
'fields': ('error_message',),
'classes': ('collapse',)
}),
('Raw Data', {
'fields': (
'raw_lighthouse_data', 'raw_zap_data',
'raw_playwright_data', 'raw_headers_data'
),
'classes': ('collapse',)
}),
)
@admin.register(Issue)
class IssueAdmin(admin.ModelAdmin):
list_display = ('title', 'scan', 'category', 'severity', 'tool', 'created_at')
list_filter = ('category', 'severity', 'tool', 'created_at')
search_fields = ('title', 'description', 'scan__website__url')
readonly_fields = ('id', 'created_at', 'raw_data')
ordering = ('severity', '-created_at')
@admin.register(Metric)
class MetricAdmin(admin.ModelAdmin):
list_display = ('display_name', 'scan', 'value', 'unit', 'source', 'score')
list_filter = ('source', 'unit')
search_fields = ('name', 'display_name', 'scan__website__url')
readonly_fields = ('id', 'created_at')
ordering = ('name',)