def post_footprint_view(request): """ 发布踪踪动态 URL[POST]: /footprint/create/ :param request: :return: """ post_data = get_data_from_request(request) latitude = post_data.get('lat') longitude = post_data.get('lon') location = post_data.get('location') content = post_data['content'] if content and not is_content_valid(content): return json_http_error('请注意用词') image_list = post_data['image_list'] if isinstance(image_list, str): image_list = json.loads(image_list) for image in image_list: logging.info('{}{}'.format(image, type(image))) if not is_image_valid(image): return json_http_error('请文明发言') hide = bool(int(post_data.get('hide', 0))) footprint = create_footprint_db(request.user, content, latitude, longitude, location, image_list, hide) if latitude and longitude: add_user_location(footprint.id, longitude, latitude) return json_http_success()
def login_and_get_session_id_view(request): """ 使用小程序的登录然后返回session_id,目前支持两种登录方式: 1、使用微信的code后台服务器验证方式 2、使用春雨的用户名和账户验证 URL[POST]: /weixin/get_session_id/ :param request: {code, encryptedData, iv} """ # 使用code方式进行登录 post_data = get_data_from_request(request) code = post_data.get('code') encrypted_data = post_data.get('encryptedData') iv = post_data.get('iv') if code: user, session_key = WxminiAuthManager.sync_wx_mini_user_info( code, encrypted_data, iv) # 使用form表单携带账户和密码进行登录 else: return json_http_error('缺少参数') # 用户登录返回session信息 if not user: return json_http_error('invalid user') wx_mini_request_login(request, user, session_key) return json_http_success({"sessionid": request.session.session_key})
def set_my_profile_view(request): """ 设置我的资料接口 URL[POST]: /user_info/my_profile/edit/ :param request: sex, avatar, location, nickname, birthday, signature, wechat_no, show_wechat_no :return: """ post_data = get_data_from_request(request) sex = post_data.get('sex') avatar = post_data.get('avatar') location = post_data.get('location') nickname = post_data.get('nickname') if nickname and not is_content_valid(nickname): return json_http_error(u'nickname 不合法') if avatar and not is_image_valid(avatar): return json_http_error(u'avatar 不合法') birthday = post_data.get('birthday') wechat_no = post_data.get('wechat_no') show_wechat_no = post_data.get('show_wechat_no') if show_wechat_no is not None: show_wechat_no = bool(int(show_wechat_no)) signature = post_data.get('signature') if birthday: birthday = str_to_datetime(birthday) user_info = update_my_profile_db(request.user, sex, avatar, location, nickname, wechat_no, show_wechat_no, signature, birthday) return json_http_success() if user_info else json_http_error()
def post_content_view(request): """ 发送信息 URL[POST]: /chat/post_content/ :param request: conversation_id, content_type, content """ data = get_data_from_request(request) receiver_id = int(data.get('receiver_id')) conversation_id = data.get('conversation_id') if not receiver_id and not conversation_id: return json_http_error('参数错误') conversation_id = conversation_id or get_conversation_id_by_user_ids( [receiver_id, request.user.id]) content = data['content_json'] if content['type'] == 'image': if not is_image_valid(content['url']): return json_http_error('请文明发言!') elif content['type'] == 'text': if not is_content_valid(content['text']): return json_http_error('请文明发言!') content_str = json.dumps(content) chat_record = create_chat_record_db(conversation_id, content_str, request.user.id) # 发推送、更新badge、 ConversationMessageManager.add_message(receiver_id, request.user.id, conversation_id, content) return json_http_success()
def club_user_login_view(request): """ 商家用户登录 由于不需要商户的 "其他信息", 所以, 前端值传递 code 也是可以的 URL[POST]: /weixin/club/login/ """ post_data = get_data_from_request(request) account = post_data['account'] password = post_data['password'] code = post_data.get('code') if code: user, session_key = WxminiAuthManager.sync_wx_mini_user_info_for_club( code) # 使用form表单携带账户和密码进行登录 else: return json_http_error('缺少参数') # 如果之前这个用户登录过踪踪用户端, 那么, 这个 UserInfo 表对象也是有的 user_info = get_user_info_by_user_id_db(user.id) user_extra_info = json.loads(user_info.extra_info) user_extra_info.update({'is_club': 1}) user_info.extra_info = json.dumps(user_extra_info) user_info.save() club_user_info = club_user_login(account, password, user_info) if not club_user_info: return json_http_error(u'用户名或密码错误') wx_mini_request_login(request, user, session_key) return json_http_success({ 'club_id': club_user_info.club.id, "sessionid": request.session.session_key })
def club_user_get_session_id_view(request): """ 商家用户使用 code 去换取 sessionid URL[POST]: /weixin/club/get_session_id/ """ post_data = get_data_from_request(request) code = post_data.get('code') if code: user, session_key = WxminiAuthManager.sync_wx_mini_user_info_for_club( code) else: return json_http_error('缺少参数') user_info = get_user_info_by_user_id_db(user.id) club_user_info = get_club_user_info_by_user_info(user_info) wx_mini_request_login(request, user, session_key) if not club_user_info.exists(): return json_http_success({"sessionid": request.session.session_key}) if club_user_info.count() > 1: return json_http_error(u'多用户商户错误') return json_http_success({ 'club_id': club_user_info[0].club.id, "sessionid": request.session.session_key })
def explore_say_hello_view(request): """ 探索模式下的打招呼按钮 URL[POST]: /chat/explore_say_hello/ """ data = get_data_from_request(request) receiver_id = int(data.get('receiver_id')) # 消息接收者 id # 需要先根据 user_id 和 receiver_id 确定会话是否已经建立了 user_ids = [int(receiver_id), request.user.id] user_ids.sort(key=lambda peer_id: int(peer_id)) content = { 'type': 'text', 'text': [{"node": "text", "text": u"我来打个招呼~"}] } content_str = json.dumps(content) # 尝试获取会话信息 chat_info = get_conversation_info_by_user_ids(user_ids[0], user_ids[1]) # 如果获取不到, 则主动创建一个 if not chat_info: conversation_id = get_conversation_id_by_user_ids([user_ids[0], user_ids[1]]) chat_info, _ = get_or_create_conversation_info(conversation_id, user_ids[0], user_ids[1]) # 创建一条会话记录 chat_record = create_chat_record_db(chat_info.conversation_id, content_str, request.user.id) # 发推送、更新badge ConversationMessageManager.add_message(receiver_id, request.user.id, chat_info.conversation_id, content) return json_http_success()
def acquire_coupon_template_view(request): """ 用户主动领取优惠券模板 POST: /footprint/acquire_coupon/ """ user = request.user post_data = get_data_from_request(request) template = get_coupon_template_by_id_db(post_data['template_id']) return json_http_success({'id': acquire_new_coupon(user, template)})
def club_update_detail_view(request): """ 商户更新自己的头像信息 /commercial/update_detail/ """ post_data = get_data_from_request(request) avatar_url = post_data['avatar'] club_id = post_data['club_id'] club_update_detail(avatar_url, club_id) return json_http_success({})
def favor_activity_view(request): """ 给活动点赞 URL[POST]: /commercial/favor_activity/ :param request: :return: """ post_data = get_data_from_request(request) activity_id = post_data['activity_id'] favor_num = add_favor_db(activity_id, FlowType.ACTIVITY, request.user.id) return json_http_success({'favor_num': favor_num})
def add_favor_view(request): """ 点赞view,点击两次的话就取消了 URL[POST]: /footprint/favor/ :param request: footprint id :return favor_num: 总的点赞数 """ post_data = get_data_from_request(request) footprint_id = post_data['footprint_id'] favor_num = add_favor_db(footprint_id, FlowType.FOOTPRINT, request.user.id) return json_http_success({'favor_num': favor_num})
def club_confirm_activity_participant_view(request): """ 商户确认用户的活动预约 URL[POST]: /commercial/confirm_activity_participant/ """ post_data = get_data_from_request(request) activity_participant_id = post_data['activity_participant_id'] confirm_info = club_confirm_activity_participant(activity_participant_id) if confirm_info: return json_http_error(confirm_info) return json_http_success({})
def club_charge_off_user_coupon_view(request): """ 商家核销用户优惠券 URL[POST]: /commercial/club_charge_off/ """ post_data = get_data_from_request(request) coupon_code = post_data['coupon_code'] club_id = post_data['club_id'] user_info = get_user_info_by_user_id_db(request.user.id) charge_off_result = charge_off_user_coupon(coupon_code, club_id, user_info) if not charge_off_result: return json_http_success({'club_id': club_id}) return json_http_error(charge_off_result)
def club_user_login_view(request): """ 商家用户登录 URL[POST]: /commercial/user_login/ """ post_data = get_data_from_request(request) account = post_data['account'] password = post_data['password'] user_info = get_user_info_by_user_id_db(request.user.id) club_user_info = club_user_login(account, password, user_info) if not club_user_info: return json_http_error(u'用户名或密码错误') return json_http_success({'club_id': club_user_info.club.id})
def participate_activity_view(request): """ 用户报名活动 URL[GET]: /commercial/subscribe_activity/ """ user = request.user post_data = get_data_from_request(request) activity_id = post_data['activity_id'] name = post_data['name'] cellphone = post_data['cellphone'] num = int(post_data['num']) hint = post_data['hint'] user_info = get_user_info_by_user_id_db(user.id) error_msg = participate_activity(activity_id, user_info.id, name, cellphone, num, hint) return json_http_success() if not error_msg else json_http_error(error_msg)
def comment_footprint_view(request): """ URL[POST]: /footprint/comment/ 评论footprint,目前只能评论主贴 :param request: :return: """ post_data = get_data_from_request(request) footprint_id = post_data['footprint_id'] comment = post_data['comment'] if not is_content_valid(comment): return json_http_error('请注意用词') success = create_comment_db(request.user, footprint_id, comment) if success: comment_num = update_comment_num_db(footprint_id) return json_http_success({'comment_num': comment_num}) return json_http_error()
def post_footprint_view(request): """ 发布踪踪动态 求助帖的发布与 V1 的帖子不同之处只有一点: 需要传递商家 id URL[POST]: /footprint/create/ :param request: :return: """ post_data = get_data_from_request(request) latitude = post_data.get('lat') longitude = post_data.get('lon') location = post_data.get('location') content = post_data['content'] if content and not is_content_valid(content): return json_http_error('请注意用词') image_list = post_data['image_list'] if isinstance(image_list, str): image_list = json.loads(image_list) for image in image_list: logging.info('{}{}'.format(image, type(image))) if not is_image_valid(image): return json_http_error('请文明发言') hide = bool(int(post_data.get('hide', 0))) # @zhanghu 在这里校验下是不是帮助贴 club = get_club_by_id_db(int(post_data.get('club_id', 0))) if not club: footprint = create_footprint_db(request.user, content, latitude, longitude, location, image_list, hide, PostType.NOTE, 0) else: # 找到金额最大的优惠券模板, 或者是一个普适券(注意, 如果找不到优惠券, 仍然降级为 NOTE 类型的足迹) target_template_id = get_template_id_by_club(club) post_type = PostType.HELP if target_template_id > 0 else PostType.NOTE footprint = create_footprint_db(request.user, content, latitude, longitude, location, image_list, hide, post_type, target_template_id) if latitude and longitude: add_user_location(footprint.id, longitude, latitude) return json_http_success({'footprint_id': footprint.id})
def donate_coupon_to_others_view(request): """ 用户把自己的优惠券转赠给其他人 POST: /footprint/donate_coupon/ """ user = request.user post_data = get_data_from_request(request) # 转赠的目标用户 target_user = get_user_info_by_user_id_db(post_data['user_id']).user template = get_coupon_template_by_id_db(post_data['template_id']) if get_user_coupon_count(user, template) <= 0: return json_http_error(u'您当前没有该商家优惠券~优惠券在信息流中获取哦~') user_coupon = get_user_coupon_by_template(user, template)[0] acquire_new_coupon(target_user, template, acquire_way=CouponAcquireWay.DONATE, donate_user_id=user.id, coupon_code=user_coupon.coupon_code) delete_user_coupon_by_id(user_coupon.id) return json_http_success({})