video_monitor/app/views/ViewsBase.py

137 lines
4.1 KiB
Python
Raw Normal View History

2026-08-30 22:22:11 +08:00
from app.utils.GlobalUtils import *
from app.utils.LanguageUtils import LANG_VIEWS_T, GSettingsLangDefault
import json
from django.http import HttpResponse
def f_parseGetParams(request):
params = {}
try:
for k in request.GET:
params.__setitem__(k, request.GET.get(k))
except Exception as e:
params = {}
return params
def f_parsePostParams(request):
params = {}
for k in request.POST:
params.__setitem__(k, request.POST.get(k))
# 接收json方式上传的参数
if not params:
try:
params = request.body.decode('utf-8')
params = json.loads(params)
except:
params = {}
return params
def f_parseRequestLang(request):
# v5.006 新增
request_lang = None
# 1. 最高优先级获取GET或POST的lang参数
if request.method == 'GET':
params = f_parseGetParams(request)
lang = params.get('lang', '').strip()
if lang:
request_lang = lang
elif request.method == 'POST':
params = f_parsePostParams(request)
lang = params.get('lang', '').strip()
if lang:
request_lang = lang
if not request_lang:
# 2. 次优先级session中的语言设置
if hasattr(request, 'session'):
request_lang = request.session.get('lang', GSettingsLangDefault)
if not request_lang:
# 3. 最低优先级:系统默认语言
request_lang = GSettingsLangDefault
return request_lang
def f_parseRequestIp(request):
try:
if request.method == 'GET':
params = f_parseGetParams(request)
ip = params.get('request_ip', '').strip()
if ip:
return ip
elif request.method == 'POST':
params = f_parsePostParams(request)
ip = params.get('request_ip', '').strip()
if ip:
return ip
host = request.get_host()
ip = host.split(':')[0]
except Exception as e:
g_logger.error("f_parseRequestIp() error: %s"%str(e))
ip = "0.0.0.0"
return ip
def f_parsePeerIp(request):
try:
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0]
else:
ip = request.META.get('REMOTE_ADDR') # 备用方案
except Exception as e:
g_logger.error("f_parsePeerIp() error: %s"%str(e))
ip = "0.0.0.0"
return ip
def f_parsePeerPort(request):
try:
port = int(request.get_port())
except Exception as e:
g_logger.error("f_parsePeerPort() error: %s"%str(e))
port = 0
return port
def f_sessionReadUser(request):
auth_user = getattr(request, "user", None)
if auth_user is not None and auth_user.is_authenticated:
return {
"id": auth_user.id,
"username": auth_user.username,
"email": auth_user.email,
"is_superuser": auth_user.is_superuser,
"is_active": auth_user.is_active,
"is_staff": auth_user.is_staff,
}
user = request.session.get(g_session_key_user)
return user
def f_sessionReadUserId(request):
try:
user_id = f_sessionReadUser(request).get("id")
except:
user_id = 0
return user_id
def f_checkRequestSafe(request):
"""Browser management APIs require an authenticated session.
The historical ``Safe`` header bypass has intentionally been removed. The
function name is retained to avoid a broad, risky rewrite of every view.
"""
user_id = f_sessionReadUserId(request)
if user_id:
return True, LANG_VIEWS_T(request, "msg_success")
return False, LANG_VIEWS_T(request, "msg_safe_verify_error")
def f_responseJson(res):
def json_dumps_default(obj):
if hasattr(obj, 'isoformat'):
return obj.isoformat()
else:
raise TypeError
return HttpResponse(json.dumps(res, default=json_dumps_default), content_type="application/json")
def f_dbReadStreamData():
data = g_database.select("select * from av_stream order by id desc")
return data