拍爱

home_photo_utils.py 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. # -*- coding: utf-8 -*-
  2. from __future__ import division
  3. import itertools
  4. from django.conf import settings
  5. from django.db import connection
  6. from django_query import get_query_value
  7. from paginator import pagination
  8. from group.models import GroupPhotoInfo
  9. from utils.qiniucdn import qiniu_file_url
  10. from utils.redis.rgroup import get_group_photo_thumbup_flag
  11. from utils.redis.rorder import get_lensman_order_record
  12. from utils.sql.raw import PAI2_HOME_API, PAI2_HOME_WX_API
  13. from utils.time_utils import origin_expired_stamps
  14. from utils.url_utils import share_url
  15. def get_home_photos(request):
  16. user_id = get_query_value(request, 'user_id')
  17. page = get_query_value(request, 'page', default=1, val_cast_func=int)
  18. num = get_query_value(request, 'num', default=settings.PAI2_HOME_PER_PAGE, val_cast_func=int)
  19. # 执行原生 SQL 语句,获取首页照片列表
  20. cursor = connection.cursor()
  21. cursor.execute((PAI2_HOME_WX_API if request.weixin else PAI2_HOME_API).format(
  22. user_id=user_id,
  23. offset=0,
  24. rows=settings.PAI2_HOME_MAX_ROWS,
  25. ))
  26. rows = cursor.fetchall()
  27. # 首页照片分页
  28. rows, left = pagination(rows, page, num)
  29. # 首页照片信息
  30. rows = [{
  31. 'group_id': row[0],
  32. 'group_name': row[1],
  33. 'group_default_avatar': row[2],
  34. 'group_avatar': row[3],
  35. 'group_from': row[4],
  36. 'photo_id': row[5],
  37. 'photo_url': qiniu_file_url(row[6], bucket='watermark' if row[7] else 'photo'),
  38. 'photo_w': row[8],
  39. 'photo_h': row[9],
  40. 'photo_thumbnail_url': qiniu_file_url(row[10], bucket='thumbnail'),
  41. 'photo_thumbnail_w': row[11],
  42. 'photo_thumbnail_h': row[12],
  43. 'photo_thumbnail2_url': qiniu_file_url(row[13], bucket='thumbnail2'),
  44. 'photo_thumbnail2_w': row[14],
  45. 'photo_thumbnail2_h': row[15],
  46. 'photo_share_url': share_url(row[5]), # Warning: Index of This Line is 5
  47. 'user_id': row[16],
  48. 'nickname': row[17],
  49. 'avatar': row[18],
  50. 'comment_num': row[19],
  51. 'thumbup_num': row[20],
  52. 'photo_from': row[21],
  53. 'session_id': row[22],
  54. 'nomark': row[23],
  55. 'origin': row[24],
  56. 'created_at': row[25],
  57. 'origin_expired_stamps': origin_expired_stamps(row[25], row[16]),
  58. 'thumbup': get_group_photo_thumbup_flag(row[5], user_id),
  59. 'porder': get_lensman_order_record(row[5], user_id) if row[21] == GroupPhotoInfo.SESSION_GROUP else {},
  60. 'display_payment_btn': row[21] == GroupPhotoInfo.SESSION_GROUP and row[27] not in [GroupPhotoInfo.OUTTAKE],
  61. 'longitude': row[28],
  62. 'latitude': row[29],
  63. 'location': row[30],
  64. } for row in rows]
  65. session_photos = map(lambda x: {'session_id': x[0], 'photos': list(x[1])}, itertools.groupby(rows, lambda x: x.get('session_id', '')))
  66. return rows, session_photos, left