functions.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. import json
  2. import datetime
  3. import os
  4. from PIL import Image
  5. from Niko import settings
  6. class DateEncoder(json.JSONEncoder):
  7. def default(self, obj):
  8. if isinstance(obj, datetime.datetime):
  9. return obj.strftime('%Y-%m-%d %H:%M:%S')
  10. elif isinstance(obj, datetime.date):
  11. return obj.strftime("%Y-%m-%d")
  12. else:
  13. return json.JSONEncoder.default(self, obj)
  14. def qs2json(querySet):
  15. qdict = []
  16. for i in querySet:
  17. qdict.append(i)
  18. qJson = {}
  19. qJson = json.dumps(qdict, cls=DateEncoder)
  20. print(qJson)
  21. return qJson
  22. def obj2json(source_object):
  23. return json.dumps(source_object, default=lambda obj: obj.__dict__, sort_keys=True, indent=4)
  24. def qs2dict(querySet):
  25. result = []
  26. for i in querySet:
  27. result.append(i)
  28. return result
  29. # 验证用户登录状态
  30. def checkLoginUser(request):
  31. try:
  32. request.session['loginID']
  33. request.session['loginUser']
  34. request.session['loginNickname']
  35. return True
  36. except:
  37. return False
  38. # 获取session
  39. def getSession(request, session):
  40. try:
  41. sessionName = request.session[session]
  42. return sessionName
  43. except:
  44. return None
  45. # 检验session id的有效性
  46. def checkSession(request, session):
  47. try:
  48. sessionName = request.session[session]
  49. return True
  50. except:
  51. return False
  52. def checkGET(request, GET):
  53. try:
  54. result = request.GET[GET]
  55. return True
  56. except Exception as e:
  57. print(e)
  58. return False
  59. def checkPOST(request, GET):
  60. try:
  61. result = request.POST[GET]
  62. return True
  63. except Exception as e:
  64. print(e)
  65. return False
  66. # 验证checkIn的组织者是否为登录的用户
  67. def checkCorrectO_ID(request, ID):
  68. checkSession(request, 'loginID')
  69. if ID != getSession(request, 'loginID'):
  70. return False
  71. else:
  72. return True
  73. # 计算用户等级名
  74. def get_level_name(credit: int) -> str:
  75. from .data import VOLUNTEER_LEVEL
  76. for level in VOLUNTEER_LEVEL:
  77. if credit >= level['score']:
  78. return level['name']
  79. # 验证用户是否登录
  80. def is_volunteer_login(request):
  81. if request.session.get('volunteer_id') is None:
  82. return False
  83. else:
  84. return True
  85. # 上传文件
  86. def upload_file(request, filename, prefix, suffix='', sub_folder='', max_width=1200):
  87. try:
  88. file_name = request.FILES.get(filename)
  89. ext_file_name = get_ext(file_name)
  90. save_filename = str(prefix) + suffix + '.' + ext_file_name
  91. # to_path = settings.MEDIA_ROOT + sub_folder + '/' + save_filename
  92. to_path = os.path.join(settings.BASE_DIR, 'volunteer_arrangement', settings.MEDIA_STORAGE, sub_folder)
  93. to_file = os.path.join(to_path, save_filename)
  94. # to_path = to_path.replace('\\', '/')
  95. if not os.path.exists(to_path):
  96. os.makedirs(to_path)
  97. destination = open(to_file, 'wb+')
  98. for chunk in file_name.chunks():
  99. destination.write(chunk)
  100. destination.close()
  101. picture_resize(to_file, max_width)
  102. return save_filename
  103. except Exception as e:
  104. print(e)
  105. return None
  106. # 图片压缩
  107. # filename 文件名
  108. # max_width 最大宽度,自动计算高度
  109. def picture_resize(filename, max_width=1200):
  110. image = Image.open(filename)
  111. w, h = image.size
  112. if w > max_width: # 如果宽度大于预定值就缩小比例
  113. zoom = max_width / w
  114. resize_h = round(zoom * h)
  115. resize_image = image.resize((max_width, resize_h), Image.ANTIALIAS)
  116. resize_image.save(filename)
  117. # 获取文件扩展名
  118. def get_ext(filename):
  119. filename_2 = str(filename).split('.')
  120. return filename_2[-1]
  121. # 弹窗确认模块
  122. def msg_and_direct(request, new_url='/', message=None):
  123. from django.shortcuts import render
  124. return render(request, 'volunteer_arrangement/directPage.html', {'dirLink': new_url, 'alertMsg': message})
  125. # 弹窗确认取消模块
  126. def confirm_and_direct(request, message, yes_url, no_url):
  127. from django.shortcuts import render
  128. return render(request, 'volunteer_arrangement/choicePage.html',
  129. {'msg': message, 'yes_url': yes_url, 'no_url': no_url})
  130. # logfile替代wfastcgi部署后无法print问题
  131. def service_log(content):
  132. try:
  133. log_filename = os.path.join(settings.BASE_DIR, 'service.log')
  134. file = open(log_filename, mode='a', encoding='utf-8')
  135. file.write(str(datetime.datetime.now()))
  136. file.write('\n')
  137. file.write(str(content))
  138. file.write('\n')
  139. file.close()
  140. except Exception as e:
  141. print(e)