utils.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. #coding=utf-8
  2. import datetime
  3. import time
  4. import hashlib
  5. import math
  6. import os
  7. import sys
  8. from datetime import timedelta
  9. from calendar import monthrange
  10. from django.conf import settings
  11. from django.http import HttpResponse
  12. from PIL import Image
  13. def calc_sha1(file):
  14. sha1obj = hashlib.sha1()
  15. sha1obj.update(file)
  16. hash = sha1obj.hexdigest()
  17. return hash
  18. def calc_md5(file):
  19. md5obj = hashlib.md5()
  20. md5obj.update(file)
  21. hash = md5obj.hexdigest()
  22. return hash
  23. def get_page_info(request):
  24. try:
  25. page_index = int(request.GET.get('page')) - 1
  26. except:
  27. page_index = 0
  28. if page_index < 0: page_index = 0
  29. try:
  30. page_size = int(request.GET.get("limit"))
  31. except:
  32. page_size = settings.PAGE_SIZE
  33. return page_index,page_size
  34. def get_page_data(request, rows):
  35. page_index,page_size = get_page_info(request)
  36. if page_index < 0 :
  37. page_index = 0
  38. begin = page_index * page_size
  39. end = (page_index + 1) * page_size
  40. return rows[begin:end], rows.count()
  41. def strfdate(d):
  42. if d:
  43. return d.strftime('%Y-%m-%d')
  44. else:
  45. return ''
  46. def strftime(t):
  47. if t:
  48. return t.strftime('%Y-%m-%d %H:%M')
  49. else:
  50. return ''
  51. def strfsecond(second):
  52. sec = timedelta(seconds=second)
  53. d = datetime.datetime(1,1,1) + sec
  54. if d.hour > 0:
  55. if d.minute > 0:
  56. retval = "%d小时%d分钟" % (d.hour, d.minute)
  57. else:
  58. retval = "%d小时" % (d.hour)
  59. else:
  60. retval = "%d分钟" % (d.minute)
  61. return retval
  62. def dump_form_errors(form):
  63. result = []
  64. for i in range(0, len(form.errors.keys())):
  65. name = list(form.errors.keys())[i]
  66. if name == '__all__':
  67. err = list(form.errors.values())[i][0]
  68. else:
  69. label = form.fields.get(name).label
  70. if label:
  71. label += ' - '
  72. else:
  73. label = ''
  74. err = label + ','.join(list(form.errors.values())[i])
  75. result.append(err)
  76. return '<br>'.join(result)
  77. def read_file(fn, buf_size=262144):
  78. f = open(fn, "rb")
  79. while True:
  80. c = f.read(buf_size)
  81. if c:
  82. yield c
  83. else:
  84. break
  85. f.close()
  86. # def number2CNY(nin=None):
  87. # def IIf( b, s1, s2):
  88. # if b:
  89. # return s1
  90. # else:
  91. # return s2
  92. #
  93. # cs =(u'零',u'壹',u'贰',u'叁',u'肆',u'伍',u'陆',u'柒',u'捌',u'玖',u'◇',u'分',u'角',u'圆',u'拾',u'佰',u'仟',u'万',u'拾',u'佰',u'仟',u'亿',u'拾',u'佰',u'仟',u'万')
  94. # st = ''
  95. # st1=''
  96. # s = '%0.2f' % (nin)
  97. # sln =len(s)
  98. # if sln > 15:
  99. # return None
  100. #
  101. # fg = (nin<1)
  102. # for i in range(0, sln-3):
  103. # ns = ord(s[sln-i-4]) - ord('0')
  104. # st=IIf((ns==0)and(fg or (i==8)or(i==4)or(i==0)), '', cs[ns]) + IIf((ns==0)and((i<>8)and(i<>4)and(i<>0)or fg and(i==0)),'', cs[i+13]) + st
  105. # fg = (ns==0)
  106. #
  107. # fg = False
  108. # for i in [1,2]:
  109. # ns = ord(s[sln-i]) - ord('0')
  110. # st1 = IIf((ns==0)and((i==1)or(i==2)and(fg or (nin<1))), '', cs[ns]) + IIf((ns>0), cs[i+10], IIf((i==2) or fg, '', u'整')) + st1
  111. # fg = (ns==0)
  112. # st.replace(u'亿万',u'万')
  113. # return IIf( nin==0, u'零', st + st1)
  114. def add_month_interval(dt,inter):
  115. def _add_month_interval (dt,inter):
  116. m=dt.month+inter-1
  117. y=int(dt.year+math.floor(m/12))
  118. m=m % 12 +1
  119. return (y,m)
  120. y,m=_add_month_interval(dt,inter)
  121. y2,m2=_add_month_interval(dt,inter+1)
  122. maxD=( datetime.date(y2,m2,1)-datetime.timedelta(days=1) ).day
  123. d= dt.day<=maxD and dt.day or maxD
  124. return datetime.date(y,m,d)
  125. def diff_month(d1, d2):
  126. return (d1.year - d2.year)*12 + d1.month - d2.month
  127. def resize_image(filename, w):
  128. img = Image.open(filename).convert('RGB')
  129. wpercent = (w/float(img.size[0]))
  130. hsize = int((float(img.size[1])*float(wpercent)))
  131. img = img.resize((w,hsize), Image.ANTIALIAS)
  132. img.save(filename)
  133. def attachment_response(export_data, filename='download.xls', content_type='application/vnd.ms-excel'):
  134. # Django 1.7 uses the content_type kwarg instead of mimetype
  135. try:
  136. response = HttpResponse(export_data, content_type=content_type)
  137. except TypeError:
  138. response = HttpResponse(export_data, mimetype=content_type)
  139. response['Content-Disposition'] = 'attachment; filename={}'.format(filename)
  140. return response
  141. def attachment_save(export_data):
  142. # 删除过期文件
  143. now = int(time.time())
  144. files = os.listdir(settings.TMP_ROOT)
  145. for file in files:
  146. filePath = os.path.join(settings.TMP_ROOT, file)
  147. print (filePath)
  148. if os.path.isfile(filePath):
  149. last = int(os.stat(filePath).st_atime)
  150. if now - last > 180:
  151. os.remove(filePath)
  152. print(filePath + " was removed!")
  153. filename = '{}.xlsx'.format(now)
  154. full_filename = os.path.join(settings.TMP_ROOT, filename)
  155. open(full_filename, 'wb').write(getattr(export_data, 'xlsx'))
  156. return settings.TMP_URL + filename