Esempio n. 1
0
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()
Esempio n. 2
0
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})
Esempio n. 3
0
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()
Esempio n. 4
0
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()
Esempio n. 5
0
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
    })
Esempio n. 6
0
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
    })
Esempio n. 7
0
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()
Esempio n. 8
0
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)})
Esempio n. 9
0
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({})
Esempio n. 10
0
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})
Esempio n. 11
0
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})
Esempio n. 12
0
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({})
Esempio n. 13
0
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)
Esempio n. 14
0
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})
Esempio n. 15
0
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)
Esempio n. 16
0
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()
Esempio n. 17
0
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})
Esempio n. 18
0
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({})