video_monitor/app/views/ViewsBase.py
2026-08-30 22:23:12 +08:00

137 lines
4.1 KiB
Python
Raw Permalink 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.

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