拍爱

views.py 22KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710
  1. # -*- coding: utf-8 -*-
  2. from django.conf import settings
  3. from django.core.files.storage import default_storage
  4. from django.db import connection, transaction
  5. from django.http import JsonResponse
  6. from rest_framework import viewsets
  7. from account.models import UserInfo
  8. from group.models import GroupInfo, GroupUserInfo, GroupPhotoInfo, PhotoCommentInfo, PhotoThumbUpInfo
  9. from message.models import UserMessageInfo
  10. from group.serializers import GroupInfoSerializer, GroupUserInfoSerializer, GroupPhotoInfoSerializer
  11. from utils.page_utils import pagination
  12. from utils.thumbnail_utils import make_thumb
  13. from utils.url_utils import img_url
  14. from utils.error.errno_utils import UserStatusCode, GroupStatusCode, GroupPhotoStatusCode
  15. from utils.error.response_utils import response
  16. from curtail_uuid import CurtailUUID
  17. from TimeConvert import TimeConvert as tc
  18. import os
  19. import shortuuid
  20. r = settings.REDIS_CACHE
  21. @transaction.atomic
  22. def group_create_api(request):
  23. user_id = request.POST.get('user_id', '')
  24. group_name = request.POST.get('group_name', '')
  25. group_default_avatar = int(request.POST.get('group_default_avatar', 0))
  26. try:
  27. user = UserInfo.objects.get(user_id=user_id)
  28. except UserInfo.DoesNotExist:
  29. return response(UserStatusCode.USER_NOT_FOUND)
  30. group_id = CurtailUUID.uuid(GroupInfo, 'group_id')
  31. group = GroupInfo.objects.create(
  32. group_id=group_id,
  33. admin_id=user_id,
  34. group_name=group_name,
  35. group_default_avatar=group_default_avatar,
  36. group_from=GroupInfo.APP_GROUP,
  37. )
  38. GroupUserInfo.objects.create(
  39. group_id=group_id,
  40. user_id=user_id,
  41. nickname=user.final_nickname,
  42. avatar=user.avatar,
  43. admin=True,
  44. user_status=GroupUserInfo.PASSED,
  45. passed_at=tc.utc_datetime(),
  46. )
  47. return JsonResponse({
  48. 'status': 200,
  49. 'message': u'群组创建成功',
  50. 'data': {
  51. 'group_id': group_id,
  52. 'group': group.data,
  53. 'users': group.users(user_id),
  54. },
  55. })
  56. def group_detail_api(request):
  57. group_id = request.POST.get('group_id', '')
  58. user_id = request.POST.get('user_id', '')
  59. try:
  60. user = UserInfo.objects.get(user_id=user_id)
  61. except UserInfo.DoesNotExist:
  62. return response(UserStatusCode.USER_NOT_FOUND)
  63. try:
  64. group = GroupInfo.objects.get(group_id=group_id)
  65. except GroupInfo.DoesNotExist:
  66. return response(GroupStatusCode.GROUP_NOT_FOUND)
  67. # 判断用户是否已被丛群组移除
  68. return JsonResponse({
  69. 'status': 200,
  70. 'message': u'获取群组详情成功',
  71. 'data': {
  72. 'group_id': group_id,
  73. 'group': group.data,
  74. 'users': group.users(user_id),
  75. },
  76. })
  77. def group_update_api(request):
  78. group_id = request.POST.get('group_id', '')
  79. admin_id = request.POST.get('admin_id', '')
  80. group_name = request.POST.get('group_name', '')
  81. group_desc = request.POST.get('group_desc', '')
  82. try:
  83. admin = UserInfo.objects.get(user_id=admin_id)
  84. except UserInfo.DoesNotExist:
  85. return response(UserStatusCode.USER_NOT_FOUND)
  86. try:
  87. group = GroupInfo.objects.get(group_id=group_id)
  88. except GroupInfo.DoesNotExist:
  89. return response(GroupStatusCode.GROUP_NOT_FOUND)
  90. if group.admin_id != admin_id:
  91. return response(GroupStatusCode.NO_UPDATE_PERMISSION)
  92. if group_name:
  93. group.group_name = group_name
  94. if group_desc:
  95. group.group_desc = group_desc
  96. group.save()
  97. return JsonResponse({
  98. 'status': 200,
  99. 'message': u'用户更新成功',
  100. 'data': {
  101. 'group_id': group_id,
  102. 'group': group.data,
  103. 'users': group.users(admin_id),
  104. },
  105. })
  106. def group_list_api(request):
  107. user_id = request.POST.get('user_id', '')
  108. group_users = GroupUserInfo.objects.filter(user_id=user_id)
  109. groups = []
  110. for group_user in group_users:
  111. try:
  112. groups.append(GroupInfo.objects.get(group_id=group_user.group_id).data)
  113. except GroupInfo.DoesNotExist:
  114. pass
  115. return JsonResponse({
  116. 'status': 200,
  117. 'message': u'获取群组列表成功',
  118. 'data': {
  119. 'groups': groups,
  120. },
  121. })
  122. def group_join_api(request):
  123. group_id = request.POST.get('group_id', '')
  124. user_id = request.POST.get('user_id', '')
  125. nickname = request.POST.get('nickname', '')
  126. try:
  127. user = UserInfo.objects.get(user_id=user_id)
  128. except UserInfo.DoesNotExist:
  129. return response(UserStatusCode.USER_NOT_FOUND)
  130. try:
  131. group = GroupInfo.objects.get(group_id=group_id)
  132. except GroupInfo.DoesNotExist:
  133. return response(GroupStatusCode.GROUP_NOT_FOUND)
  134. if group.group_lock:
  135. return response(GroupStatusCode.GROUP_HAS_LOCKED)
  136. if GroupUserInfo.objects.filter(group_id=group_id, user_id=user_id, user_status__in=[GroupUserInfo.APPLYING, GroupUserInfo.PASSED]).exists():
  137. return response(GroupStatusCode.DUPLICATE_JOIN_REQUEST)
  138. group_photo = GroupPhotoInfo.objects.filter(group_id=group_id).last()
  139. GroupUserInfo.objects.create(
  140. group_id=group_id,
  141. user_id=user_id,
  142. current_id=group_photo and group_photo.id or -1,
  143. nickname=nickname or user.final_nickname,
  144. avatar=user.avatar,
  145. admin=False,
  146. user_status=GroupUserInfo.PASSED,
  147. passed_at=tc.utc_datetime(),
  148. )
  149. return JsonResponse({
  150. 'status': 200,
  151. 'message': u'申请已提交',
  152. })
  153. def group_lock_api(request):
  154. group_id = request.POST.get('group_id', '')
  155. user_id = request.POST.get('user_id', '')
  156. try:
  157. user = UserInfo.objects.get(user_id=user_id)
  158. except UserInfo.DoesNotExist:
  159. return response(UserStatusCode.USER_NOT_FOUND)
  160. try:
  161. group = GroupInfo.objects.get(group_id=group_id)
  162. except GroupInfo.DoesNotExist:
  163. return response(GroupStatusCode.GROUP_NOT_FOUND)
  164. if group.admin_id != user_id:
  165. return JsonResponse({
  166. 'status': 40221,
  167. 'message': u'没有锁定权限',
  168. })
  169. group.group_lock = True
  170. group.save()
  171. return JsonResponse({
  172. 'status': 200,
  173. 'message': u'锁定成功',
  174. })
  175. def group_unlock_api(request):
  176. group_id = request.POST.get('group_id', '')
  177. user_id = request.POST.get('user_id', '')
  178. try:
  179. user = UserInfo.objects.get(user_id=user_id)
  180. except UserInfo.DoesNotExist:
  181. return response(UserStatusCode.USER_NOT_FOUND)
  182. try:
  183. group = GroupInfo.objects.get(group_id=group_id)
  184. except GroupInfo.DoesNotExist:
  185. return response(GroupStatusCode.GROUP_NOT_FOUND)
  186. if group.admin_id != user_id:
  187. return response(GroupStatusCode.NO_UNLOCK_PERMISSION)
  188. group.group_lock = False
  189. group.save()
  190. return JsonResponse({
  191. 'status': 200,
  192. 'message': u'解锁成功',
  193. })
  194. def group_remove_api(request):
  195. group_id = request.POST.get('group_id', '')
  196. admin_id = request.POST.get('admin_id', '')
  197. user_id = request.POST.get('user_id', '')
  198. try:
  199. admin = UserInfo.objects.get(user_id=admin_id)
  200. except UserInfo.DoesNotExist:
  201. return response(UserStatusCode.USER_NOT_FOUND)
  202. try:
  203. user = UserInfo.objects.get(user_id=user_id)
  204. except UserInfo.DoesNotExist:
  205. return response(UserStatusCode.USER_NOT_FOUND)
  206. try:
  207. group = GroupInfo.objects.get(group_id=group_id)
  208. except GroupInfo.DoesNotExist:
  209. return response(GroupStatusCode.GROUP_NOT_FOUND)
  210. if group.admin_id != admin_id:
  211. return JsonResponse({
  212. 'status': 40222,
  213. 'message': u'没有移除权限',
  214. })
  215. try:
  216. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
  217. except GroupUserInfo.DoesNotExist:
  218. return response(GroupStatusCode.GROUP_USER_NOT_FOUND)
  219. group_user.user_status = GroupUserInfo.DELETED
  220. group_user.deleted_at = tc.utc_datetime()
  221. group_user.save()
  222. return JsonResponse({
  223. 'status': 200,
  224. 'message': u'用户移除成功',
  225. 'data': {
  226. 'group_id': group_id,
  227. 'users': group.users(admin_id),
  228. },
  229. })
  230. def group_pass_api(request):
  231. group_id = request.POST.get('group_id', '')
  232. admin_id = request.POST.get('admin_id', '')
  233. user_id = request.POST.get('user_id', '')
  234. try:
  235. admin = UserInfo.objects.get(user_id=admin_id)
  236. except UserInfo.DoesNotExist:
  237. return response(UserStatusCode.USER_NOT_FOUND)
  238. try:
  239. user = UserInfo.objects.get(user_id=user_id)
  240. except UserInfo.DoesNotExist:
  241. return response(UserStatusCode.USER_NOT_FOUND)
  242. try:
  243. group = GroupInfo.objects.get(group_id=group_id)
  244. except GroupInfo.DoesNotExist:
  245. return response(GroupStatusCode.GROUP_NOT_FOUND)
  246. if group.admin_id != admin_id:
  247. return response(GroupStatusCode.NO_PASS_PERMISSION)
  248. try:
  249. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.APPLYING)
  250. except GroupUserInfo.DoesNotExist:
  251. return response(GroupStatusCode.JOIN_REQUEST_NOT_FOUND)
  252. group_user.user_status = GroupUserInfo.PASSED
  253. group_user.passed_at = tc.utc_datetime()
  254. group_user.save()
  255. return JsonResponse({
  256. 'status': 200,
  257. 'message': u'申请通过成功',
  258. 'data': {
  259. 'group_id': group_id,
  260. 'users': group.users(admin_id),
  261. },
  262. })
  263. def group_refuse_api(request):
  264. group_id = request.POST.get('group_id', '')
  265. admin_id = request.POST.get('admin_id', '')
  266. user_id = request.POST.get('user_id', '')
  267. try:
  268. admin = UserInfo.objects.get(user_id=admin_id)
  269. except UserInfo.DoesNotExist:
  270. return response(UserStatusCode.USER_NOT_FOUND)
  271. try:
  272. user = UserInfo.objects.get(user_id=user_id)
  273. except UserInfo.DoesNotExist:
  274. return response(UserStatusCode.USER_NOT_FOUND)
  275. try:
  276. group = GroupInfo.objects.get(group_id=group_id)
  277. except GroupInfo.DoesNotExist:
  278. return response(GroupStatusCode.GROUP_NOT_FOUND)
  279. if group.admin_id != admin_id:
  280. return response(GroupStatusCode.NO_REFUSE_PERMISSION)
  281. try:
  282. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.APPLYING)
  283. except GroupUserInfo.DoesNotExist:
  284. return response(GroupStatusCode.JOIN_REQUEST_NOT_FOUND)
  285. group_user.user_status = GroupUserInfo.REFUSED
  286. group_user.refused_at = tc.utc_datetime()
  287. group_user.save()
  288. return JsonResponse({
  289. 'status': 200,
  290. 'message': u'申请拒绝成功',
  291. 'data': {
  292. 'group_id': group_id,
  293. 'users': group.users(admin_id),
  294. },
  295. })
  296. def flyimg_upload_api(request):
  297. group_id = request.POST.get('group_id', '')
  298. user_id = request.POST.get('user_id', '')
  299. nickname = request.POST.get('nickname', '')
  300. photo = request.FILES.get('photo', '')
  301. current_id = int(request.POST.get('current_id', -1))
  302. try:
  303. user = UserInfo.objects.get(user_id=user_id)
  304. except UserInfo.DoesNotExist:
  305. return response(UserStatusCode.USER_NOT_FOUND)
  306. try:
  307. group = GroupInfo.objects.get(group_id=group_id)
  308. except GroupInfo.DoesNotExist:
  309. return response(GroupStatusCode.GROUP_NOT_FOUND)
  310. try:
  311. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
  312. except GroupUserInfo.DoesNotExist:
  313. return response(GroupStatusCode.GROUP_USER_NOT_FOUND)
  314. if photo:
  315. _, extension = os.path.splitext(photo.name)
  316. uuid = shortuuid.uuid()
  317. photo_path = 'fly/{uuid}{extension}'.format(uuid=uuid, extension=extension)
  318. photo_thumbnail_path = 'fly/{uuid}_thumbnail{extension}'.format(uuid=uuid, extension=extension)
  319. if default_storage.exists(photo_path):
  320. default_storage.delete(photo_path)
  321. default_storage.save(photo_path, photo)
  322. if default_storage.exists(photo_thumbnail_path):
  323. default_storage.delete(photo_thumbnail_path)
  324. default_storage.save(photo_thumbnail_path, photo)
  325. photo_w, photo_h, photo_thumbnail_w, photo_thumbnail_h = make_thumb(
  326. os.path.join(settings.MEDIA_ROOT, photo_thumbnail_path).replace('\\', '/'),
  327. settings.THUMBNAIL_MAX_WIDTH
  328. )
  329. group_photo = GroupPhotoInfo.objects.create(
  330. group_id=group_id,
  331. user_id=user_id,
  332. nickname=nickname or user.final_nickname,
  333. avatar=user.avatar,
  334. photo_path=photo_path,
  335. photo_w=photo_w,
  336. photo_h=photo_h,
  337. photo_thumbnail_path=photo_thumbnail_path,
  338. photo_thumbnail_w=photo_thumbnail_w,
  339. photo_thumbnail_h=photo_thumbnail_h,
  340. )
  341. group_photos = GroupPhotoInfo.objects.filter(
  342. group_id=group_id,
  343. pk__gt=max(current_id, group_user.current_id),
  344. )
  345. latest_photo = group_photos.last()
  346. return JsonResponse({
  347. 'status': 200,
  348. 'message': u'飞图上传成功',
  349. 'data': {
  350. 'current_id': latest_photo and latest_photo.pk or current_id,
  351. 'photos': [photo.photo_info for photo in group_photos],
  352. }
  353. })
  354. def comment_submit_api(request):
  355. group_id = request.POST.get('group_id', '')
  356. user_id = request.POST.get('user_id', '')
  357. photo_id = request.POST.get('photo_id', '')
  358. comment = request.POST.get('comment', '')
  359. try:
  360. group = GroupInfo.objects.get(group_id=group_id)
  361. except GroupInfo.DoesNotExist:
  362. return response(GroupStatusCode.GROUP_NOT_FOUND)
  363. try:
  364. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
  365. except GroupUserInfo.DoesNotExist:
  366. return response(GroupStatusCode.GROUP_USER_NOT_FOUND)
  367. try:
  368. group_photo = GroupPhotoInfo.objects.get(pk=photo_id)
  369. except GroupPhotoInfo.DoesNotExist:
  370. return response(GroupPhotoStatusCode.MESSAGE_NOT_FOUND)
  371. if comment:
  372. PhotoCommentInfo.objects.create(
  373. photo_id=photo_id,
  374. user_id=user_id,
  375. nickname=group_user.nickname,
  376. avatar=group_user.avatar,
  377. comment=comment,
  378. )
  379. UserMessageInfo.objects.create(
  380. from_uid=user_id,
  381. from_nickname=group_user.nickname,
  382. from_avatar=group_user.avatar,
  383. to_uid=group_photo.user_id,
  384. group_id=group_photo.group_id,
  385. photo_id=group_photo.pk,
  386. msg_type=UserMessageInfo.COMMENT,
  387. msg_title=u'评论',
  388. msg_content=comment,
  389. )
  390. photo_comments = PhotoCommentInfo.objects.filter(
  391. photo_id=photo_id,
  392. )
  393. return JsonResponse({
  394. 'status': 200,
  395. 'message': u'评论成功',
  396. 'data': {
  397. 'comments': [comment.comment_info for comment in photo_comments],
  398. }
  399. })
  400. def thumbup_submit_api(request):
  401. group_id = request.POST.get('group_id', '')
  402. user_id = request.POST.get('user_id', '')
  403. photo_id = request.POST.get('photo_id', '')
  404. try:
  405. group = GroupInfo.objects.get(group_id=group_id)
  406. except GroupInfo.DoesNotExist:
  407. return response(GroupStatusCode.GROUP_NOT_FOUND)
  408. try:
  409. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
  410. except GroupUserInfo.DoesNotExist:
  411. return response(GroupStatusCode.GROUP_USER_NOT_FOUND)
  412. try:
  413. group_photo = GroupPhotoInfo.objects.get(pk=photo_id)
  414. except GroupPhotoInfo.DoesNotExist:
  415. return response(GroupPhotoStatusCode.MESSAGE_NOT_FOUND)
  416. photo_thumbup, created = PhotoThumbUpInfo.objects.get_or_create(
  417. photo_id=photo_id,
  418. user_id=user_id,
  419. # defaults={
  420. # 'nickname': group_user.nickname,
  421. # 'avatar': group_user.avatar,
  422. # }
  423. )
  424. photo_thumbup.nickname = group_user.nickname
  425. photo_thumbup.avatar = group_user.avatar
  426. photo_thumbup.thumbup = True
  427. photo_thumbup.save()
  428. UserMessageInfo.objects.create(
  429. from_uid=user_id,
  430. from_nickname=group_user.nickname,
  431. from_avatar=group_user.avatar,
  432. to_uid=group_photo.user_id,
  433. group_id=group_photo.group_id,
  434. photo_id=group_photo.pk,
  435. msg_type=UserMessageInfo.THUMBUP,
  436. msg_title=u'点赞',
  437. msg_content=u'点赞',
  438. )
  439. photo_thumbups = PhotoThumbUpInfo.objects.filter(
  440. photo_id=photo_id,
  441. thumbup=True,
  442. )
  443. return JsonResponse({
  444. 'status': 200,
  445. 'message': u'点赞提交成功',
  446. 'data': {
  447. 'thumbup': True,
  448. 'thumbups': [thumbup.thumbup_info for thumbup in photo_thumbups],
  449. }
  450. })
  451. def thumbup_list_api(request):
  452. group_id = request.POST.get('group_id', '')
  453. user_id = request.POST.get('user_id', '')
  454. photo_id = request.POST.get('photo_id', '')
  455. try:
  456. group = GroupInfo.objects.get(group_id=group_id)
  457. except GroupInfo.DoesNotExist:
  458. return response(GroupStatusCode.GROUP_NOT_FOUND)
  459. try:
  460. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
  461. except GroupUserInfo.DoesNotExist:
  462. return response(GroupStatusCode.GROUP_USER_NOT_FOUND)
  463. try:
  464. group_photo = GroupPhotoInfo.objects.get(pk=photo_id)
  465. except GroupPhotoInfo.DoesNotExist:
  466. return response(GroupPhotoStatusCode.MESSAGE_NOT_FOUND)
  467. try:
  468. thumbup = PhotoThumbUpInfo.objects.get(
  469. photo_id=photo_id,
  470. user_id=user_id,
  471. ).thumbup
  472. except PhotoThumbUpInfo.DoesNotExist:
  473. thumbup = False
  474. photo_thumbups = PhotoThumbUpInfo.objects.filter(
  475. photo_id=photo_id,
  476. thumbup=True,
  477. )
  478. return JsonResponse({
  479. 'status': 200,
  480. 'message': u'获取点赞列表成功',
  481. 'data': {
  482. 'thumbup': thumbup,
  483. 'thumbups': [thumbup.thumbup_info for thumbup in photo_thumbups],
  484. }
  485. })
  486. def thumbup_cancel_api(request):
  487. group_id = request.POST.get('group_id', '')
  488. user_id = request.POST.get('user_id', '')
  489. photo_id = request.POST.get('photo_id', '')
  490. try:
  491. group = GroupInfo.objects.get(group_id=group_id)
  492. except GroupInfo.DoesNotExist:
  493. return response(GroupStatusCode.GROUP_NOT_FOUND)
  494. try:
  495. group_user = GroupUserInfo.objects.get(group_id=group_id, user_id=user_id, user_status=GroupUserInfo.PASSED)
  496. except GroupUserInfo.DoesNotExist:
  497. return response(GroupStatusCode.GROUP_USER_NOT_FOUND)
  498. try:
  499. group_photo = GroupPhotoInfo.objects.get(pk=photo_id)
  500. except GroupPhotoInfo.DoesNotExist:
  501. return response(GroupPhotoStatusCode.MESSAGE_NOT_FOUND)
  502. photo_thumbup, created = PhotoThumbUpInfo.objects.get_or_create(
  503. photo_id=photo_id,
  504. user_id=user_id,
  505. )
  506. photo_thumbup.thumbup = False
  507. photo_thumbup.save()
  508. UserMessageInfo.objects.create(
  509. from_uid=user_id,
  510. from_nickname=group_user.nickname,
  511. from_avatar=group_user.avatar,
  512. to_uid=group_photo.user_id,
  513. group_id=group_photo.group_id,
  514. photo_id=group_photo.pk,
  515. msg_type=UserMessageInfo.THUMBUP,
  516. msg_title=u'取消点赞',
  517. msg_content=u'取消点赞',
  518. )
  519. photo_thumbups = PhotoThumbUpInfo.objects.filter(
  520. photo_id=photo_id,
  521. thumbup=True,
  522. )
  523. return JsonResponse({
  524. 'status': 200,
  525. 'message': u'点赞取消成功',
  526. 'data': {
  527. 'thumbup': False,
  528. 'thumbups': [thumbup.thumbup_info for thumbup in photo_thumbups],
  529. }
  530. })
  531. def pai2_home_api(request):
  532. user_id = request.POST.get('user_id', '')
  533. page = int(request.POST.get('page', 1))
  534. num = int(request.POST.get('num', settings.PAI2_HOME_PER_PAGE))
  535. cursor = connection.cursor()
  536. cursor.execute(r"select T1.group_id, T2.group_name, T2.group_default_avatar, T2.group_avatar, T3.id, T3.photo_path, T3.photo_w, T3.photo_h, T3.photo_thumbnail_path, T3.photo_thumbnail_w, T3.photo_thumbnail_h, T3.user_id, T3.nickname, T3.avatar, T3.comment_num, T3.thumbup_num, T3.created_at from (select * from group_groupuserinfo where user_id='{user_id}') as T1 left outer join group_groupinfo as T2 on T1.group_id = T2.group_id left outer join group_groupphotoinfo as T3 on T1.group_id = T3.group_id and T3.id > T1.current_id order by DATE(T3.created_at) desc, T3.thumbup_num desc limit {offset}, {rows};".format(
  537. user_id=user_id,
  538. offset=0,
  539. rows=settings.PAI2_HOME_MAX_ROWS,
  540. ))
  541. rows = cursor.fetchall()
  542. rows, left = pagination(rows, page, num)
  543. rows = [{
  544. 'group_id': row[0],
  545. 'group_name': row[1],
  546. 'group_default_avatar': row[2],
  547. 'group_avatar': row[3],
  548. 'photo_id': row[4],
  549. 'photo_url': img_url(row[5]),
  550. 'photo_w': row[6],
  551. 'photo_h': row[7],
  552. 'photo_thumbnail_url': img_url(row[8]),
  553. 'photo_thumbnail_w': row[9],
  554. 'photo_thumbnail_h': row[10],
  555. 'user_id': row[11],
  556. 'nickname': row[12],
  557. 'avatar': row[13],
  558. 'comment_num': row[14],
  559. 'thumbup_num': row[15],
  560. 'created_at': row[16],
  561. } for row in rows]
  562. return JsonResponse({
  563. 'status': 200,
  564. 'message': u'获取首页列表成功',
  565. 'data': {
  566. 'photos': rows,
  567. 'left': left,
  568. }
  569. })
  570. class GroupInfoViewSet(viewsets.ModelViewSet):
  571. queryset = GroupInfo.objects.all().order_by('-pk')
  572. serializer_class = GroupInfoSerializer
  573. class GroupUserInfoViewSet(viewsets.ModelViewSet):
  574. queryset = GroupUserInfo.objects.all().order_by('-pk')
  575. serializer_class = GroupUserInfoSerializer
  576. class GroupPhotoInfoViewSet(viewsets.ModelViewSet):
  577. queryset = GroupPhotoInfo.objects.all().order_by('-pk')
  578. serializer_class = GroupPhotoInfoSerializer