import json import datetime import os from PIL import Image from Niko import settings class DateEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime.datetime): return obj.strftime('%Y-%m-%d %H:%M:%S') elif isinstance(obj, datetime.date): return obj.strftime("%Y-%m-%d") else: return json.JSONEncoder.default(self, obj) def qs2json(querySet): qdict = [] for i in querySet: qdict.append(i) qJson = {} qJson = json.dumps(qdict, cls=DateEncoder) print(qJson) return qJson def obj2json(source_object): return json.dumps(source_object, default=lambda obj: obj.__dict__, sort_keys=True, indent=4) def qs2dict(querySet): result = [] for i in querySet: result.append(i) return result # 验证用户登录状态 def checkLoginUser(request): try: request.session['loginID'] request.session['loginUser'] request.session['loginNickname'] return True except: return False # 获取session def getSession(request, session): try: sessionName = request.session[session] return sessionName except: return None # 检验session id的有效性 def checkSession(request, session): try: sessionName = request.session[session] return True except: return False def checkGET(request, GET): try: result = request.GET[GET] return True except Exception as e: print(e) return False def checkPOST(request, GET): try: result = request.POST[GET] return True except Exception as e: print(e) return False # 验证checkIn的组织者是否为登录的用户 def checkCorrectO_ID(request, ID): checkSession(request, 'loginID') if ID != getSession(request, 'loginID'): return False else: return True # 计算用户等级名 def get_level_name(credit: int) -> str: from .data import VOLUNTEER_LEVEL for level in VOLUNTEER_LEVEL: if credit >= level['score']: return level['name'] # 验证用户是否登录 def is_volunteer_login(request): if request.session.get('volunteer_id') is None: return False else: return True # 上传文件 def upload_file(request, filename, prefix, suffix='', sub_folder='', max_width=1200): try: file_name = request.FILES.get(filename) ext_file_name = get_ext(file_name) save_filename = str(prefix) + suffix + '.' + ext_file_name # to_path = settings.MEDIA_ROOT + sub_folder + '/' + save_filename to_path = os.path.join(settings.BASE_DIR, 'volunteer_arrangement', settings.MEDIA_STORAGE, sub_folder) to_file = os.path.join(to_path, save_filename) # to_path = to_path.replace('\\', '/') if not os.path.exists(to_path): os.makedirs(to_path) destination = open(to_file, 'wb+') for chunk in file_name.chunks(): destination.write(chunk) destination.close() picture_resize(to_file, max_width) return save_filename except Exception as e: print(e) return None # 图片压缩 # filename 文件名 # max_width 最大宽度,自动计算高度 def picture_resize(filename, max_width=1200): image = Image.open(filename) w, h = image.size if w > max_width: # 如果宽度大于预定值就缩小比例 zoom = max_width / w resize_h = round(zoom * h) resize_image = image.resize((max_width, resize_h), Image.ANTIALIAS) resize_image.save(filename) # 获取文件扩展名 def get_ext(filename): filename_2 = str(filename).split('.') return filename_2[-1] # 弹窗确认模块 def msg_and_direct(request, new_url='/', message=None): from django.shortcuts import render return render(request, 'volunteer_arrangement/directPage.html', {'dirLink': new_url, 'alertMsg': message}) # 弹窗确认取消模块 def confirm_and_direct(request, message, yes_url, no_url): from django.shortcuts import render return render(request, 'volunteer_arrangement/choicePage.html', {'msg': message, 'yes_url': yes_url, 'no_url': no_url}) # logfile替代wfastcgi部署后无法print问题 def service_log(content): try: log_filename = os.path.join(settings.BASE_DIR, 'service.log') file = open(log_filename, mode='a', encoding='utf-8') file.write(str(datetime.datetime.now())) file.write('\n') file.write(str(content)) file.write('\n') file.close() except Exception as e: print(e)