70 lines
2.5 KiB
Python
Executable File
70 lines
2.5 KiB
Python
Executable File
from django.http import JsonResponse
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
from datetime import datetime
|
|
from .models import WebsiteAccessLog, WebsiteInfo
|
|
from .utils import (
|
|
get_client_ip,
|
|
get_browser_language,
|
|
get_referrer,
|
|
get_user_agent,
|
|
get_device_type,
|
|
get_beijing_time,
|
|
)
|
|
|
|
@csrf_exempt
|
|
def website_info_view(request):
|
|
"""
|
|
提供网站配置信息,并记录访问日志
|
|
"""
|
|
print("当前 UTC 时间:", datetime.now())
|
|
|
|
try:
|
|
# 获取访问信息
|
|
client_ip = get_client_ip(request)
|
|
browser_language = get_browser_language(request)
|
|
referrer = get_referrer(request)
|
|
request_path = request.path
|
|
request_method = request.method
|
|
user_agent = get_user_agent(request)
|
|
device_type = get_device_type(user_agent)
|
|
|
|
# 获取当前 UTC 时间并转换为北京时间
|
|
access_time_bj = datetime.now()
|
|
access_date = datetime.now()
|
|
|
|
# 检查同一 IP 当天是否已经记录过
|
|
if not WebsiteAccessLog.objects.filter(ip_address=client_ip, access_date=access_date).exists():
|
|
# 记录访问日志
|
|
WebsiteAccessLog.objects.create(
|
|
ip_address=client_ip,
|
|
browser_language=browser_language,
|
|
referrer=referrer,
|
|
request_path=request_path,
|
|
request_method=request_method,
|
|
user_agent=user_agent,
|
|
device_type=device_type,
|
|
access_time_bj=access_time_bj,
|
|
access_date=access_date,
|
|
)
|
|
|
|
# 获取网站配置信息
|
|
website_info = WebsiteInfo.objects.first()
|
|
if not website_info:
|
|
return JsonResponse({'code': 404, 'message': '未找到网站配置信息'})
|
|
|
|
# 返回网站配置信息
|
|
data = {
|
|
'domain_en': website_info.domain_en,
|
|
'title_en': website_info.title_en,
|
|
'keywords_en': website_info.keywords_en,
|
|
'description_en': website_info.description_en,
|
|
'domain_zh': website_info.domain_zh,
|
|
'title_zh': website_info.title_zh,
|
|
'keywords_zh': website_info.keywords_zh,
|
|
'description_zh': website_info.description_zh,
|
|
}
|
|
return JsonResponse({'code': 200, 'message': 'ok', 'data': data})
|
|
|
|
except Exception as e:
|
|
return JsonResponse({'code': 500, 'message': f'服务器内部错误: {str(e)}'})
|