utils.py 4.9 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 = form.errors.keys()[i]
  66. if name == '__all__':
  67. err = 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(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. 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'万')
  93. st = ''
  94. st1=''
  95. s = '%0.2f' % (nin)
  96. sln =len(s)
  97. if sln > 15:
  98. return None
  99. fg = (nin<1)
  100. for i in range(0, sln-3):
  101. ns = ord(s[sln-i-4]) - ord('0')
  102. 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
  103. fg = (ns==0)
  104. fg = False
  105. for i in [1,2]:
  106. ns = ord(s[sln-i]) - ord('0')
  107. 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
  108. fg = (ns==0)
  109. st.replace(u'亿万',u'万')
  110. return IIf( nin==0, u'零', st + st1)
  111. def add_month_interval(dt,inter):
  112. def _add_month_interval (dt,inter):
  113. m=dt.month+inter-1
  114. y=int(dt.year+math.floor(m/12))
  115. m=m % 12 +1
  116. return (y,m)
  117. y,m=_add_month_interval(dt,inter)
  118. y2,m2=_add_month_interval(dt,inter+1)
  119. maxD=( datetime.date(y2,m2,1)-datetime.timedelta(days=1) ).day
  120. d= dt.day<=maxD and dt.day or maxD
  121. return datetime.date(y,m,d)
  122. def diff_month(d1, d2):
  123. return (d1.year - d2.year)*12 + d1.month - d2.month
  124. def resize_image(filename, w):
  125. img = Image.open(filename).convert('RGB')
  126. wpercent = (w/float(img.size[0]))
  127. hsize = int((float(img.size[1])*float(wpercent)))
  128. img = img.resize((w,hsize), Image.ANTIALIAS)
  129. img.save(filename)
  130. def attachment_response(export_data, filename='download.xls', content_type='application/vnd.ms-excel'):
  131. # Django 1.7 uses the content_type kwarg instead of mimetype
  132. try:
  133. response = HttpResponse(export_data, content_type=content_type)
  134. except TypeError:
  135. response = HttpResponse(export_data, mimetype=content_type)
  136. response['Content-Disposition'] = 'attachment; filename={}'.format(filename)
  137. return response
  138. def attachment_save(export_data):
  139. # 删除过期文件
  140. now = int(time.time())
  141. files = os.listdir(settings.TMP_ROOT)
  142. for file in files:
  143. filePath = os.path.join(settings.TMP_ROOT, file)
  144. print filePath
  145. if os.path.isfile(filePath):
  146. last = int(os.stat(filePath).st_atime)
  147. if now - last > 180:
  148. os.remove(filePath)
  149. print(filePath + " was removed!")
  150. filename = '{}.xlsx'.format(now)
  151. full_filename = os.path.join(settings.TMP_ROOT, filename)
  152. open(full_filename, 'wb').write(getattr(export_data, 'xlsx'))
  153. return settings.TMP_URL + filename