123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- 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)
|