utils.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2017 jianglin
  5. # File Name: utils.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2017-03-29 13:33:03 (CST)
  9. # Last Update:星期三 2017-3-29 13:43:40 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from datetime import datetime, timedelta
  14. one_day = datetime.now() + timedelta(days=-1)
  15. one_month = datetime.now() + timedelta(days=-30)
  16. one_year = datetime.now() + timedelta(years=-1)
  17. def gen_topic_filter(query_dict=dict(), keys=[], equal_key=[], user=None):
  18. filter_dict = {}
  19. keys = list(set(keys) & set(query_dict.keys()))
  20. for k in keys:
  21. if k in equal_key:
  22. filter_dict.update(**{k: query_dict[k]})
  23. else:
  24. new_k = '%s__contains' % k
  25. filter_dict.update(**{new_k: query_dict[k]})
  26. if user is not None and user.is_authenticated:
  27. filter_dict.update(user__id=user.id)
  28. within = query_dict.pop('within', None)
  29. if within is not None:
  30. if within == 1:
  31. filter_dict.update(created_at__gte=one_day)
  32. elif within == 2:
  33. filter_dict.update(created_at__gte=one_month)
  34. elif within == 3:
  35. filter_dict.update(created_at__gte=one_year)
  36. return filter_dict
  37. def gen_topic_orderby(query_dict=dict(), keys=[], date_key=True):
  38. keys.append('id')
  39. if date_key:
  40. keys += ['created_at', 'updated_at']
  41. order_by = ['id']
  42. descent = query_dict.pop('orderby', None)
  43. if descent is not None:
  44. descent = descent.split(',')
  45. descent = list(set(keys) & set(descent))
  46. order_by = ['-%s' % i for i in descent]
  47. return tuple(order_by)