コード例 #1
0
def migu_create_comment(vid):
    """咪咕平台创建评论 (GET|POST)

    :uri: /migu/videos/<string:vid>/comments/submit
    :param user_id: 咪咕用户id
    :param content: 评论内容
    :returns: {}
    """
    params = request.values
    openid = params.get('user_id', '')
    content = params.get('content', '')
    if len(openid) < 1 or len(content) < 1:
        return error.InvalidArguments

    video = Video.get_one(vid)
    if not video:
        return error.VideoNotExist
    user = User.get_platform_user('migu', openid)
    if not user:
        info = dict(name='$mg$%s%s' %
                    (openid[-4:], random.randint(1000, 9999)))
        user = User.create_platform_user('migu', openid, data=info)
    comment = Comment.init()
    comment.author = ObjectId(str(user._id))
    comment.content = content
    comment.video = ObjectId(vid)
    comment.create_model()
    return {}
コード例 #2
0
ファイル: user.py プロジェクト: leepood/migu_community
def login():
    """用户登录 (GET|POST)

    :uri: /users/login
    :param name: 用户名
    :param password: 密码
    :param type: 登陆类型(name, phone,)
    :returns: {'user': object, 'ut': string}
    """
    params = request.values
    login_type = params.get('type', 'name')
    name = params.get("name", None)
    password = params.get("password", None)
    if name is None or password is None or login_type not in ['name', 'phone']:
        return error.InvalidArguments

    user = User.login(name, password, login_type=login_type)
    if not user:
        return error.LoginFailed

    # 初始化用户任务
    UserTask.create_and_init_user_tasks(str(user._id))

    token = User.gen_token(str(user._id))
    return {'user': user.format(), 'ut': token}
コード例 #3
0
ファイル: xlive.py プロジェクト: leepood/migu_community
    def format(cls, live, exclude_fields=[]):
        user_ex_fields = []
        game_ex_fields = []
        for field in exclude_fields:
            if field.startswith('user__'):
                _, _field = field.split('__')
                user_ex_fields.append(_field)
            elif field.startswith('game__'):
                _, _field = field.split('__')
                game_ex_fields.append(_field)

        ut = request.values.get("ut", None)
        uid = User.uid_from_token(ut)

        user_id = live.get('user_id', None)

        from wanx.models.home import Share
        share_title = None
        if str(user_id) == uid:
            share_title = Share.get_by_self_live().title
        else:
            share_title = Share.get_by_others_live().title

        game = Game.get_one(str(live['game_id']), check_online=False)
        user = User.get_one(str(live['user_id']), check_online=False)
        live['user'] = user and user.format(exclude_fields=user_ex_fields)
        live['game'] = game and game.format(exclude_fields=game_ex_fields)
        live['from_following'] = live.get('from_following', False)
        live['share_title'] = share_title
        # 强行移除ut
        live.pop('ut', None)
        return live
コード例 #4
0
    def validate(self):
        if not form.Form.validate(self):
            return False

        if not self.user.data and not self.phone.data:
            self.phone.errors.append(u'用户和手机号必须要填一个')

        user1 = User.get_one(self.user.data) if self.user.data else None
        user2 = User.get_by_phone(self.phone.data) if self.phone.data else None
        if self.user.data and not user1:
            self.user.errors.append(u'用户不存在')
            return False

        if self.phone.data and not user2:
            self.phone.errors.append(u'用户不存在')
            return False

        if self.phone.data and self.user.data:
            if user1 != user2:
                self.user.errors.append(u'用户字段和手机号字段对应的用户不匹配')
                self.phone.errors.append(u'用户字段和手机号字段对应的用户不匹配')
                return False

        user = user1 or user2
        if UserGroup.user_in_group(str(self.group.data), str(user._id)):
            if user1:
                self.user.errors.append(u'该组已包含此用户')
            if user2:
                self.phone.errors.append(u'该组已包含此用户')
            return False

        return True
コード例 #5
0
ファイル: user.py プロジェクト: leepood/migu_community
def reset_password():
    """重置密码 (GET|POST)

    :uri: /users/reset_password
    :param phone: 手机号
    :param password: 密码
    :param code: 短信验证码
    :returns: {}
    """
    params = request.values
    phone = params.get('phone', None)
    code = params.get('code', None)
    password = params.get("password", None)
    if not phone or not code or not password:
        return error.InvalidArguments

    invalid_error = User.invalid_password(password)
    if invalid_error:
        return invalid_error

    user = User.get_by_phone(phone)
    if not user:
        return error.UserNotExist

    if not SMS.verify_code(phone, code):
        return error.VerifyCodeFailed

    User.change_pwd(user, password)
    return {}
コード例 #6
0
    def process_form_data(self, data):
        if data['phone'] and not data['user']:
            user = User.get_by_phone(data['phone'])
            data['user'] = user._id
        if data['user'] and not data['phone']:
            user = User.get_one(data['user'])
            data['phone'] = user.phone

        return data
コード例 #7
0
ファイル: user.py プロジェクト: leepood/migu_community
def follow_user():
    """关注用户 (GET|POST&LOGIN)

    :uri: /user/opt/follow-user
    :param target_user_id: 被关注用户id
    :returns: {}
    """
    user = request.authed_user
    params = request.values
    target_uid = params.get('target_user_id', None)
    target_user = User.get_one(target_uid)
    if not target_user:
        return error.UserNotExist

    if target_uid == str(user._id):
        return error.FollowFailed("不能关注自己哦")

    fs = FriendShip.get_by_ship(str(user._id), target_uid)
    if not fs:
        key = 'lock:follow:%s:%s' % (str(user._id), target_uid)
        with util.Lockit(Redis, key) as locked:
            if locked:
                return error.FollowFailed

            fs = FriendShip.init()
            fs.source = ObjectId(str(user._id))
            fs.target = ObjectId(target_uid)
            fs.create_model()
            # 关注主播任务检查
            if user:
                UserTask.check_user_tasks(str(user._id), FOLLOW_USER, 1)

    return {}
コード例 #8
0
def migu_change_pwd():
    """更改密码(GET|POST)

    :uri: /migu/change_password
    :param phone: 手机号
    :param old_pwd: 旧密码
    :param new_pwd: 新密码
    :returns: {}
    """
    user = request.authed_user
    params = request.values
    old_pwd = params.get('old_pwd', None)
    new_pwd = params.get('new_pwd', None)
    phone = params.get('phone', None) or (user and user.phone)

    if not old_pwd or not new_pwd or not phone:
        return error.InvalidArguments

    invalid_error = User.invalid_password(new_pwd)
    if invalid_error:
        return invalid_error

    openid = Migu.get_identityid(phone, old_pwd, const.CENTER_ACCOUNT_PHONE)
    if isinstance(openid, error.ApiError):
        return openid

    ret = Migu.center_update_pwd(openid, old_pwd, new_pwd)
    if isinstance(ret, error.ApiError):
        return ret

    return {}
コード例 #9
0
def migu_reset_password():
    """重置密码 (GET|POST)

    :uri: /migu/reset_password
    :param phone: 手机号
    :param password: 密码
    :param code: 短信验证码
    :param sessionid: 短信sessionid
    :returns: {}
    """
    params = request.values.to_dict()
    phone = params.get('phone', None)
    code = params.get('code', None)
    sessionid = params.get('sessionid', None)
    password = params.get("password", None)
    if not phone or not code or not password or not sessionid:
        return error.InvalidArguments

    invalid_error = User.invalid_password(password)
    if invalid_error:
        return invalid_error

    ret = Migu.center_reset_pwd(phone, password, const.CENTER_ACCOUNT_PHONE,
                                code, sessionid)
    if isinstance(ret, error.ApiError):
        return ret

    return {}
コード例 #10
0
ファイル: user.py プロジェクト: leepood/migu_community
def get_user(uid):
    """获取用户详细信息 (GET)

    :uri: /users/<string:uid>
    :returns: object
    """
    user = User.get_one(uid)
    if not user:
        return error.UserNotExist

    user_lives = Xlive.get_user_lives(uid)
    live_ids = [ul['event_id'] for ul in user_lives]

    user_info = user.format()
    user_info.update({'live_id': live_ids[0] if live_ids else ''})

    # 如果是登录用户自己返回货币信息
    if request.authed_user and str(request.authed_user._id) == uid:
        uc = UserCredit.get_or_create_user_credit(user_id=uid)
        uproducts = UserProduct.get_user_products(str(uid))
        gift_num = sum([up.num for up in uproducts])
        user_info.update({
            'gem': uc.gem,
            'gold': uc.gold,
            'gift_num': gift_num
        })

    return user_info
コード例 #11
0
 def format(self):
     from wanx.models.user import User
     from wanx.models.comment import Comment
     from wanx.models.video import Video
     operator = User.get_one(str(self.operator), check_online=False)
     if self.ctype == 'comment':
         obj = Comment.get_one(str(self.obj_id), check_online=False)
         obj = obj and obj.format()
     elif self.ctype == 'video':
         obj = Video.get_one(str(self.obj_id), check_online=False)
         obj = obj and obj.format()
     elif self.ctype == 'reply':
         obj = Reply.get_one(str(self.obj_id), check_online=False)
         comment_id = obj and str(obj.comment)
         obj = obj and obj.format()
         if obj:
             comment = Comment.get_one(comment_id, check_online=False)
             obj['video_id'] = comment.video and str(comment.video)
     else:
         obj = None
     data = {
         'msg_id': str(self._id),
         'ctype': self.ctype,
         'obj': obj,
         'action': self.action,
         'operator': operator and operator.format(),
         'create_at': self.create_at
     }
     return data
コード例 #12
0
ファイル: user.py プロジェクト: leepood/migu_community
def followers(uid):
    """获取用户粉丝 (GET)

    :uri: /users/<string:uid>/followers
    :param maxs: 最后时间, 0代表当前时间, 无此参数按page来分页
    :param page: 页码(数据可能有重复, 建议按照maxs分页)
    :param nbr: 每页数量
    :returns: {'users': list}
    """
    params = request.values
    maxs = params.get('maxs', None)
    maxs = time.time() if maxs is not None and int(
        float(maxs)) == 0 else maxs and float(maxs)
    page = int(params.get('page', 1))
    pagesize = int(params.get('nbr', 10))

    users = list()
    uids = list()
    while len(users) < pagesize:
        uids = FriendShip.follower_ids(uid, page, pagesize, maxs)
        users.extend([u.format() for u in User.get_list(uids)])

        # 如果按照maxs分页, 不足pagesize个记录则继续查询
        if maxs is not None:
            obj = FriendShip.get_by_ship(uids[-1], uid) if uids else None
            maxs = obj.create_at if obj else 1000
            if len(uids) < pagesize:
                break
        else:
            break

    return {'users': users, 'end_page': len(uids) != pagesize, 'maxs': maxs}
コード例 #13
0
    def get_export_csv(self):
        if not self.export_columns:
            self.export_columns = [
                column_name for column_name, _ in self._list_columns
            ]

        io = StringIO()
        rows = csv.DictWriter(io, self.export_columns)

        data = self._get_data_for_export()

        rows.writeheader()
        for item in data:
            row = dict()
            for column in self.export_columns:
                if column == 'author':
                    obj = User.get_one(item[column], check_online=False)
                    item[column] = obj.nickname
                elif column == 'activity':
                    obj = ActivityConfig.get_one(item[column],
                                                 check_online=False)
                    item[column] = obj.name
                elif column == 'create_at':
                    item[column] = datetime.fromtimestamp(
                        item[column]).strftime('%Y-%m-%d %H:%M:%S')
                elif column not in item:
                    item[column] = None

                row.update({column: unicode(item[column]).encode("utf8")})

            # print row
            rows.writerow(row)

        io.seek(0)
        return io.getvalue()
コード例 #14
0
def do_task(worker, job):
    from wanx.base.log import print_log
    from wanx.base.xredis import Redis
    from wanx.models.video import UserFaverVideo
    from wanx.models.user import User
    data = job.data
    # 记录日志
    print_log('modify_video', data)

    data = json.loads(data)
    vid = data['vid']
    # action = data['action']
    # delta_count = 0
    # if action == 'offline':
    #     delta_count = -1
    # elif action == 'online':
    #     delta_count = 1
    # 更新收藏了此视频的用户计数
    uids = UserFaverVideo.favor_video_uids(vid)
    for uid in uids:
        user = User.get_one(uid, check_online=False)
        if user:
            key = UserFaverVideo.FAVER_VIDEO_IDS % ({'uid': uid})
            Redis.delete(key)
            count = UserFaverVideo.faver_video_count(uid)
            user.update_model({'$set': {'favor_count': count}})
    return ''
コード例 #15
0
    def format(self):
        author = User.get_one(str(self.author), check_online=False)
        data = {
            'activity_video': str(self._id),
            'activity_id': self.activity_id,
            'video_id': self.video_id,
            'author': author and author.format(),
            'title': self.title,
            'cover': urljoin(app.config.get("MEDIA_URL"), self.cover),
            'url': '%s/videos/%s/play' % (app.config.get('SERVER_URL'), self.video_id),
            'vv': self.vv,
            'vote': self.vote,
            'like_count': self.like_count,
            'comment_count': self.comment_count,
            'duration': self.duration and int(self.duration),
            'create_at': self.create_at,
            'is_voted': False,
            'top': self.top_author if self.top_author else None
        }

        uid = request.authed_user and str(request.authed_user._id)
        device = request.values.get('device', None)
        is_voted = True if VoteVideo.get_vote(uid, device, self.video_id) else False
        data['is_voted'] = is_voted

        return data
コード例 #16
0
ファイル: user.py プロジェクト: leepood/migu_community
def refresh_token():
    """刷新用户token时间 (GET|POST&LOGIN)

    :uri: /users/refresh_token
    :returns: {'user': Object}
    """
    ut = request.values.get("ut", None)
    user = request.authed_user
    token = User.set_token(ut, str(user._id))
    if token:
        User.recommend_users(str(user._id))
        # 更新用户活跃时间
        user.update_model({'$set': {'update_at': time.time()}})
    # 初始化用户任务
    UserTask.create_and_init_user_tasks(str(user._id))

    return {'user': user.format(include_fields=['passid'])}
コード例 #17
0
ファイル: util.py プロジェクト: leepood/migu_community
def format_user_phone(view, context, model, name):
    _value = model.get('source', None)
    obj = User.get_one(str(_value), check_online=False)
    if obj:
        _value = '%s' % (obj.phone)
    else:
        _value = u'用户不存在'
    return _value
コード例 #18
0
 def format(self):
     author = User.get_one(str(self.user_id), check_online=False)
     data = {
         'author': author and author.format(),
         'content': self.content,
         'duration': self.duration,
         'create_at': self.create_at,
     }
     return data
コード例 #19
0
ファイル: video.py プロジェクト: leepood/migu_community
    def ban_user(self):
        result = {"status": 0, "errmsg": "成功"}
        values = request.values
        user_id = values.get("user_id", None)
        day_choice = values.get("day_choice", None)
        ban_days = values.get("ban_days", None)
        limits = values.getlist("limits[]", None)
        reason = values.get("reason", None)
        if filter(lambda x: x is None, [user_id, day_choice, ban_days, limits, reason]):
            return jsonify({"status": -10001, "errmsg": "参数错误"})

        try:
            day_choice = int(day_choice)
            ban_days = int(ban_days)
            limits = sorted([int(i) for i in limits])
        except:
            return jsonify({"status": -10001, "errmsg": "参数错误1"})

        now = datetime.datetime.now()
        days = (7, 15, 182, 36524, ban_days)
        lift_day = now + datetime.timedelta(days=days[day_choice])
        lift_at = time.mktime(lift_day.timetuple())

        user = User.get_one(user_id)
        create_mode = user['status'] == 0

        User.user_bans(user_id, lift_at, limits, reason)

        # 给被封禁用户发送私信
        if create_mode:
            mode = u"因违反社区规则您的帐号已被封禁"
        else:
            mode = u"您的帐号封禁状态被修改"
        limits_txts = (u"禁止开直播", u"禁止上传视频", u"禁止发评论/弹幕",
                       u"禁止私信", u"禁止登录")
        limits_str = u"、".join([limits_txts[i] for i in limits])
        msg = u"{5},封禁原因为:{0},解封日期为{1}年{2}月{3}日,在此期间您将被限制{4}。"
        content = msg.format(reason, lift_day.year, lift_day.month, lift_day.day, limits_str, mode)
        sysmsg = SysMessage.init()
        sysmsg.title = u"用户封禁通知"
        sysmsg.owner = ObjectId(user_id)
        sysmsg.content = content
        _id = sysmsg.create_model()
        return jsonify(result)
コード例 #20
0
ファイル: user.py プロジェクト: leepood/migu_community
def binding():
    """用户绑定 (GET|POST&LOGIN)

    :uri: /users/binding
    :param platform: 平台标识 (phone, weixin, qq)
    :param openid: 平台id/手机号
    :param token: 用户平台token/短信验证码
    :returns: {}
    """
    user = request.authed_user
    params = request.values
    platform = params.get('platform', None)
    openid = params.get('openid', None)
    token = params.get('token', None)

    if platform == 'phone':
        if not SMS.verify_code(openid, token):
            return error.VerifyCodeFailed
        # 用户已经存在
        if User.get_by_phone(openid):
            return error.UserExists
        info = {'phone': openid}
        user.update_model({'$set': info})
    elif platform == 'weixin':
        # 用户已经存在
        if User.get_platform_user(platform, openid):
            return error.UserExists
        if not WeiXin(token, openid).get_open_info():
            return error.LoginFailed
        key = 'partner_%s' % (platform)
        info = {key: {'id': openid}}
        user.update_model({'$set': info})
    elif platform == 'qq':
        # 用户已经存在
        if User.get_platform_user(platform, openid):
            return error.UserExists
        if not QQ(token, openid).get_open_info():
            return error.LoginFailed
        key = 'partner_%s' % (platform)
        info = {key: {'id': openid}}
        user.update_model({'$set': info})

    return {}
コード例 #21
0
 def format(self):
     from wanx.models.user import User
     sender = User.get_one(str(self.sender), check_online=False)
     data = {
         'msg_id': str(self._id),
         'sender': sender and sender.format(),
         'content': Spam.replace_words(self.content),
         'create_at': self.create_at
     }
     return data
コード例 #22
0
 def apply(self, query, value):
     reload(sys)
     sys.setdefaultencoding('utf-8')
     value = apply(self.field_func, [value])
     user = User.get_by_nickname(value)
     uidobj = []
     if user:
         uidobj = [user._id]
     query.append({self.column: {'$in': uidobj}})
     return query
コード例 #23
0
def do_task(worker, job):
    from wanx.base.log import print_log
    from wanx.base import const
    from wanx.models.video import Video
    from wanx.models.user import User
    from wanx.models.game import Game
    data = job.data
    # 记录日志
    print_log('create_live_video', data)

    data = json.loads(data)
    # 记录日志
    print_log('create_live_video',
              '%s ==========================> Start' % (data['event_id']))

    user = User.get_one(data['user_id'], check_online=False)
    if not user:
        return ''

    game = Game.get_one(data['game_id'], check_online=False)
    if not game:
        return ''

    video_id = Video.get_video_by_event_id(data['event_id'], str(user._id))
    video = Video.get_one(str(video_id), check_online=False)

    if not video:
        video = Video.init()
        video.author = ObjectId(data['user_id'])
        video.game = ObjectId(data['game_id'])
        video.title = data['title']
        video.duration = data['duration']
        video.ratio = data['ratio']
        video.cover = data['cover']
        video.url = data['url']
        video.event_id = data['event_id']
        video.status = const.ONLINE
        video.create_model()
    else:
        data['author'] = ObjectId(data.pop('user_id'))
        data['game'] = ObjectId(data.pop('game_id'))
        video.update_model({'$set': data})

    # 记录日志
    print_log('create_live_video',
              '%s ==========================> Finished' % (data['event_id']))

    from wanx.models.activity import Battle
    battle = Battle.get_live_battle(
        data['user_id'],
        data['title'].decode('unicode-escape').encode('utf-8'), None)
    if battle:
        Battle.set_video_id(battle['_id'], video_id)

    return ''
コード例 #24
0
def live_new_user(aid):
    """获取新秀主播

    :uri: activity/live/new_user/<string:aid>
    :param maxs: 分页标示, 0最新
    :param nbr: 每页数量
    :returns: {'new_users': list, 'end_page': bool,  'maxs': long}
    """
    params = request.values
    maxs = params.get('maxs', 0)
    maxs = time.time() if maxs is not None and int(
        float(maxs)) == 0 else maxs and float(maxs)
    pagesize = int(params.get('nbr', 10))

    activity_config = ActivityConfig.get_one(aid, check_online=True)
    if not activity_config:
        return error.ActivityNotExist

    users = list()
    uids = list()
    while len(users) < pagesize:
        uids = Live_Activity.get_live_new_user(aid, pagesize, maxs)
        for u in User.get_list(uids):
            top = Live_Activity.get_live_user_top(aid, str(u._id),
                                                  activity_config.begin_at,
                                                  activity_config.end_at)
            total_gold = UserGiftLog.get_user_total_gold(
                u._id, activity_config.begin_at, activity_config.end_at)
            users.append({'user': u.format(), 'gold': total_gold, 'top': top})
        # 如果按照maxs分页, 不足pagesize个记录则继续查询
        if maxs is not None:
            obj = User.get_one(uids[-1]) if uids else None
            maxs = obj.create_at if obj else 1000
            if len(uids) < pagesize:
                break
        else:
            break
    return {
        'new_users': users,
        'end_page': len(uids) != pagesize,
        'maxs': maxs
    }
コード例 #25
0
ファイル: user.py プロジェクト: leepood/migu_community
def certify():
    """实名认证 (GET|POST)

    :uri: /users/certify
    :param name: 用户名
    :param user_id: 用户ID
    :param ID_number: 身份证号码
    :returns: {'uid': uid}
    """
    ut = request.values.get("ut", None)
    user_id = User.uid_from_token(ut)

    params = request.values.to_dict()
    name = params.get("name", None)
    ID_number = params.get("ID_number", None)

    kwargs = dict()
    if 'ut' in params.keys():
        kwargs['user_id'] = ObjectId(user_id)
        kwargs['content'] = ''
        kwargs['ID_number'] = ID_number
        kwargs['status'] = '2'
        kwargs['name'] = name

    if not name or not ID_number:
        return error.InvalidArguments

    if not User.get_one(ObjectId(user_id)):
        return error.UserNotExist

    user_certify = UserCertify.get_untreated_user_certify(user_id)
    if user_certify:
        user = user_certify
        user.update(kwargs)
        uid = user.edit_model()

    else:
        user = UserCertify.init()
        user.update(kwargs)
        uid = user.create_model()

    return {'uid': uid}
コード例 #26
0
ファイル: user.py プロジェクト: leepood/migu_community
def certify_status():
    """获取实名认证状态 (GET|POST)

    :uri: /users/certify_status
    :returns: {'uid': uid}
    """

    ut = request.values.get("ut", None)
    user_id = User.uid_from_token(ut)

    if not User.get_one(ObjectId(user_id)):
        return error.UserNotExist

    user = UserCertify.get_user_certify(user_id)
    if not user:
        return error.UserNotExist

    user_certify = user.format()

    return user_certify
コード例 #27
0
ファイル: user.py プロジェクト: leepood/migu_community
def recommend_users():
    """获取推荐关注 (GET&LOGIN)

    :uri: /recommend/users
    :returns: {'users': list}
    """
    user = request.authed_user
    uids = []
    gids = UserSubGame.sub_game_ids(str(user._id))
    for gid in gids:
        uids.extend(Game.popular_user_ids(gid))
    if not uids:
        uids = User.user_recommend_attention()
    uids = list(set(uids))
    if str(user._id) in uids:
        uids.remove(str(user._id))
    if len(uids) > const.RECOMMEND_ATTENTION:
        uids = random.sample(uids, const.RECOMMEND_ATTENTION)
    users = [u.format() for u in User.get_list(uids)]
    return {'users': users}
コード例 #28
0
ファイル: comment.py プロジェクト: leepood/migu_community
 def format(self):
     _reply = Reply.get_one(str(self.reply), check_online=False)
     from_user = User.get_one(str(self.owner), check_online=False)
     to_user = User.get_one(str(_reply.owner),
                            check_online=False) if _reply else None
     data = {
         'reply_id':
         str(self._id),
         'reply_from':
         from_user and from_user.format(exclude_fields=['is_followed']),
         'reply_to':
         to_user and to_user.format(exclude_fields=['is_followed']),
         'content':
         self.content,
         'reply_count':
         self.reply_count or 0,
         'create_at':
         self.create_at
     }
     return data
コード例 #29
0
ファイル: util.py プロジェクト: leepood/migu_community
def format_user(view, context, model, name):
    model = model if isinstance(model, dict) else model_to_dict(model)
    _value = model.get(name, None)
    obj = User.get_one(str(_value), check_online=False)
    if obj:
        _value = '%s (%s)' % (obj.nickname, _value)
        html = u'<a href="/admin/usersview/?flt1_0=%s">%s</a>' % (str(
            obj._id), _value)
        _value = widgets.HTMLString(html)
    else:
        _value = u'用户不存在'
    return _value
コード例 #30
0
def migu_register():
    """用户注册(GET|POST)

    :uri: /migu/register_phone
    :param phone: 手机号
    :param password: 密码
    :param code: 验证码
    :param sessionid: 短信sessionid
    :returns: {'user': object, 'ut': string}
    """
    params = request.values.to_dict()
    phone = params.get('phone', None)
    code = params.get('code', None)
    sessionid = params.get('sessionid', None)
    password = params.get('password', None)
    if not phone or not code or not password or not sessionid:
        return error.InvalidArguments

    invalid_error = User.invalid_password(password)
    if invalid_error:
        return invalid_error

    # 用户中心注册
    ret = Migu.center_register(phone, password, const.CENTER_ACCOUNT_PHONE,
                               code, sessionid)
    if isinstance(ret, error.ApiError):
        return ret

    # 进行用户绑定
    migu_uid = Migu.get_identityid(phone, password, const.CENTER_ACCOUNT_PHONE)
    if isinstance(migu_uid, error.ApiError):
        return migu_uid

    user = User.get_platform_user('migu', migu_uid)
    if not user:
        user = User.get_by_phone(phone)
        if user:
            info = dict(partner_migu={'id': migu_uid},
                        nickname=u'咪咕用户%s%s' %
                        (migu_uid[-4:], random.randint(1000, 9999)),
                        gender=random.randint(1, 2),
                        name='$mg$%s%s' %
                        (migu_uid[-4:], random.randint(1000, 9999)))
            user = user.update_model({'$set': info})
        else:
            info = dict(phone=phone,
                        nickname=u'咪咕用户%s%s' %
                        (migu_uid[-4:], random.randint(1000, 9999)),
                        gender=random.randint(1, 2),
                        name='$mg$%s%s' %
                        (migu_uid[-4:], random.randint(1000, 9999)))
            user = User.create_platform_user('migu', migu_uid, data=info)
    else:
        # 如果用户没有绑定手机并且手机号没有被绑定, 则自动进行手机号绑定
        if not user.phone and not User.get_by_phone(phone):
            info = dict(phone=phone)
            user.update_model({'$set': info})

    ut = User.gen_token(str(user._id))
    return {'user': user.format(), 'ut': ut}