Пример #1
0
def logout(request):
    try:
        clear_session(request)
        return get_res_json(code=200)
    except BaseException as e:
        print(e)
        return get_res_json(code=0, msg='未知错误')
def uploader_create(request):
    # 加载数据
    data = json.loads(request.body)
    # 表单校验
    uf = UploaderCreate(data)
    # 数据是否合法
    if uf.is_valid() is False:
        # 返回错误信息
        return get_res_json(code=0, msg=uf.get_form_error_msg())

    # 先获取当前用户的id
    owner = request.session.get('id', '')  # 当前用户
    # 获取创建的用户名
    uploader_name = uf.cleaned_data['uploader_name']

    # 检查当前用户是否有权限创建up主账号
    check_result = is_user_can_create_uploader(user_id=owner,
                                               uploader_name=uploader_name)
    # 返回结果不为True,则为错误提示信息
    if check_result is not True:
        return get_res_json(code=0, msg=check_result)

    # 创建账号,并返回提示信息
    if create_uploader_account(user_id=owner,
                               uploader_name=uploader_name) is True:
        return get_res_json(code=200)
    else:
        # 此时失败了
        return get_res_json(code=0, msg='创建失败,请重试或联系管理员')
Пример #3
0
def login(request):
    # 加载数据
    data = json.loads(request.body)
    # 表单校验
    uf = LoginForm(data)
    # 数据是否合法
    if uf.is_valid() is False:
        # 返回错误信息
        return get_res_json(code=0, msg=uf.get_form_error_msg())

    # 拿到用户名和密码
    username = uf.cleaned_data['username']
    password = uf.cleaned_data['password']

    # 先查重
    search_info = UserModel.objects.order_by('-id').filter(username=username)
    if len(search_info) == 0:
        return get_res_json(code=0, msg='该用户名不存在或密码错误。\n重设密码请联系 QQ:20004604')

    user = search_info[0]
    # 校验密码
    if user.is_pw_correct(password) is False:
        # 密码错误
        return get_res_json(code=0, msg='该用户名不存在或密码错误。\n重设密码请联系 QQ:20004604')
    # 登录成功,设置session
    set_user_session(request, user)
    user.set_last_login()
    user.save()

    return get_res_json(code=200,
                        msg='登录成功',
                        data={
                            'username': username,
                            'userid': user.id
                        })
Пример #4
0
    def load_data(self, request):
        # 取出数据
        if len(request.body) is 0:
            return {
                'is_pass': False,
                'res': get_res_json(code=0, msg='需要【邮箱】、【密码】')
            }
        try:
            data = json.loads(request.body)
        except BaseException as e:
            return {
                'is_pass': False,
                'res': get_res_json(code=0, msg='登录数据非法')
            }

        verify_result = self._verify(data)

        # 如果验证通过
        if verify_result['is_pass'] is True:
            self.email = data.get('email')
            self.password = data.get('password')
            return {
                'is_pass': True
            }
        else:
            return verify_result
Пример #5
0
    def _pw_reset(self, mtool, email, pw):
        # 密码加密
        tool = Md5Tool()
        md5pw = tool.get_md5(pw)
        u_result = mtool.update_row(
            'UPDATE user_auth SET pw = %s WHERE email = %s', [md5pw, email])
        if u_result is False or u_result is 0:
            # 回滚数据库操作
            mtool.set_uncommit()
            return {
                'is_pass': False,
                'res': get_res_json(code=0, msg='服务器错误(0),请重试')
            }

        # 此时,还要让之前更新密码那行数据失效
        u_reset = mtool.update_row(
            'UPDATE reset_pw_list SET is_invalid=1 and is_pass=1 WHERE email=%s',
            [email])
        if u_reset is False or u_reset is 0:
            # 回滚数据库操作
            mtool.set_uncommit()
            return {
                'is_pass': False,
                'res': get_res_json(code=0, msg='服务器错误(1),请重试')
            }
        return {'is_pass': True}
Пример #6
0
 def load_data_verify(self, request):
     try:
         email = request.GET['email']
     except MultiValueDictKeyError as e:
         return {
             'is_pass': False,
             'res': get_res_json(code=0, msg='需要【邮箱】')
         }
     try:
         vcode = request.GET['vcode']
     except MultiValueDictKeyError as e:
         return {
             'is_pass': False,
             'res': get_res_json(code=0, msg='需要【验证码】')
         }
     data = {'email': email, 'vcode': vcode}
     uf = VerifyRPHrefForm(data)
     # 验证不通过,返回错误信息
     if not uf.is_valid():
         msg = uf.get_form_error_msg()
         return {
             'is_pass': False,
             'res': get_res_json(code=0, msg=msg),
             'data': data
         }
     return {'is_pass': True, 'res': data}
def uploader_name_edit(request):
    # 加载数据
    data = json.loads(request.body)
    # 表单校验
    uf = UploaderNameEditForm(data)
    # 数据是否合法
    if uf.is_valid() is False:
        # 返回错误信息
        return get_res_json(code=0, msg=uf.get_form_error_msg())

    owner = request.session.get('id', '')  # 当前用户
    # 拿到姓名,注意,这个姓名可能是空
    upid = uf.cleaned_data['upid']
    name = uf.cleaned_data['name']

    # 先查看有没有数据
    mp_data = MsgPuber.objects.filter(id=upid, user_id=owner)

    # 不存在,报错并返回
    if len(mp_data) == 0:
        return get_res_json(code=0, msg='该UP主并不存在')

    # 名字重复
    if len(MsgPuber.objects.filter(name=name)) > 0:
        return get_res_json(code=0, msg='已有同名账号,请使用其他名字')

    mp_data = mp_data[0]

    # 修改名字
    mp_data.set_name(name=name)

    # 保存
    mp_data.save()

    return get_res_json(code=200, msg='用户信息更新成功')
def uploader_key_refresh(request):
    # 加载数据
    data = json.loads(request.body)
    # 表单校验
    uf = UploaderKeyRefreshForm(data)
    # 数据是否合法
    if uf.is_valid() is False:
        # 返回错误信息
        return get_res_json(code=0, msg=uf.get_form_error_msg())

    owner = request.session.get('id', '')  # 当前用户

    # 拿到 up主的id
    upid = uf.cleaned_data['upid']

    # 校验用户,检查该用户是否存在
    mp_data = MsgPuber.objects.filter(id=upid, user_id=owner)

    # 不存在,报错并返回
    if len(mp_data) == 0:
        return get_res_json(code=0, msg='该UP主并不存在')

    mp_data = mp_data[0]
    # 重新生成密钥
    mp_data.make_secret_key()
    # 保存
    mp_data.save()

    return get_res_json(code=200, msg='密钥更新成功')
 def wrapper(*args, **kw):
     request = args[0]
     # 先要求是登录状态
     if is_logined(request) is False:
         return get_res_json(code=5, msg='请先登录')
     if request.session.get("usertype") != USERTYPE_ORDER_TAKER:
         return get_res_json(code=10, msg='用户类型错误,角色必须是订单接单人才能执行该操作')
     return func(*args, **kw)
Пример #10
0
def had_logined(request):
    if is_logined(request) is True:
        return get_res_json(code=200,
                            data={
                                'username': request.session.get('username'),
                                'userid': request.session.get('id'),
                            })
    else:
        return get_res_json(code=5, msg='')
Пример #11
0
    def load_data(self, request, id):
        data = None
        # 取出数据
        if len(request.body) is 0:
            return {
                'is_pass': False,
                'res': get_res_json(code=0, msg='数据非法(0)')
            }
        try:
            data = json.loads(request.body)
            data['id'] = id
            hidden_columns = None
            # uf.is_valid() 校验数组类型的时候非法,所以玩点骚操作
            if data['hidden_columns'] is not None:
                # 将该行数据暂时取出来
                hidden_columns = data['hidden_columns']
                # 从 data 里移除 hidden_columns 属性
                del data['hidden_columns']
            # 处理过的数据再搞到数组里
            uf = UserInfoForm(data)

            # 验证不通过,返回错误信息
            if not uf.is_valid():
                msg = uf.get_form_error_msg()
                return {'is_pass': False, 'res': get_res_json(code=0, msg=msg)}
            # 再把数据加回去
            if hidden_columns is not None:
                data['hidden_columns'] = hidden_columns
            # 由于我不会用 django 的 form 校验数组,因此这里追加校验数组
            # 数组的校验,是通过 USER_INFO_DICT 的第四个元素——函数来校验的
            # 其他类型,也可以通过 这个函数 来追加校验
            # 1. 先遍历 USER_INFO_DICT
            for col_info in USER_INFO_DICT:
                # 2. 如果没有第四个参数,则继续下一个
                if len(col_info) < 4 or col_info[3] is None:
                    continue
                else:
                    # 3. 有函数的话,进行函数校验
                    if col_info[3](data[col_info[0]]) is False:
                        # 校验失败,返回报错信息
                        return {
                            'is_pass':
                            False,
                            'res':
                            get_res_json(code=0, msg='%s数据非法(2)' % col_info[0])
                        }

            return {'is_pass': True, 'data': data}
        except BaseException as e:
            print(e)
            return {
                'is_pass': False,
                'res': get_res_json(code=0, msg='数据非法(1)')
            }
Пример #12
0
def user_detail(request):
    # 先获取当前用户的id
    owner = request.session.get('id', '')  # 当前用户

    # 先获取当前用户的信息
    user_info = UserModel.objects.filter(id=owner)
    # 当前用户不存在??
    if len(user_info) == 0:
        clear_session()
        return get_res_json(code=0, msg='当前用户不存在')

    user_info = user_info[0]
    user_info = {
        'username': user_info.username,
        'register_date': user_info.register_date.strftime("%Y-%m-%d %H:%M:%S"),
        'last_login': user_info.last_login.strftime("%Y-%m-%d %H:%M:%S"),
        'user_permission_cn':
        get_user_permission_cn(user_info.user_permission),
        'create_uploader': can_create_uploader(user_info.user_permission)
    }

    # 先查询列表
    mp_list = MsgPuber.objects.filter(user_id=owner)
    # 没数据的话直接返回
    if len(mp_list) == 0:
        return get_res_json(code=200, data={'userinfo': user_info, 'list': []})

    result = []
    for mp_info in mp_list:
        uploader_id = mp_info.id
        # 获取 UP主 信息
        d = get_msgpub_info(mp_info)

        # 拿取他推送的所有信息(倒叙排列)
        feed_list = Feeds.objects.filter(
            uploader_id=uploader_id).order_by('-id')

        if len(feed_list) == 0:
            d['last_msg'] = None
        else:
            # 将最近一条推送消息添加进去
            feed = feed_list[0]
            d['last_msg'] = {
                'id': feed.id,
                'uploader_id': feed.uploader_id,
                'pub_time': feed.pub_time.strftime("%Y-%m-%d %H:%M:%S"),
                'content': feed.content,
                'sendtime': get_sendtime_cn(feed.sendtime),
                'action_type': feed.action_type
            }
        result.append(d)

    # 然后返回给用户
    return get_res_json(code=200, data={'userinfo': user_info, 'list': result})
Пример #13
0
def user_unsubscribe(request):
    # 加载数据
    data = json.loads(request.body)
    # 表单校验
    uf = SubscribeForm(data)
    # 数据是否合法
    if uf.is_valid() is False:
        # 返回错误信息
        return get_res_json(code=0, msg=uf.get_form_error_msg())
    """
    流程:
    1. 拿到被订阅者id和订阅类型;
    2. 检测是QQ订阅还是邮件订阅;
    2.1 如果是QQ订阅,则检查QQ字段是否存在,没有则报错;
    3. 查询 Subscribe 表的订阅信息;
    3.1 不存在则报错;
    3.2 修改该字段的 is_active 为 False;
    4. 插入一条记录到 SubscribeHistory 表
    """

    # 拿到各个数据
    upid = uf.cleaned_data['upid']  # 被订阅者
    user_id = request.session.get('id', '')  # 当前用户

    # 先查该 up 主是否存在
    mp_info = MsgPuber.objects.filter(id=upid)
    if len(mp_info) == 0:
        return get_res_json(code=0, msg='该 up 主不存在。该UP主id为:%s' % upid)

    # 先找该用户之前有没有订阅过这个消息号
    sf_result = SubscribeFeeds.objects.filter(uploader_id=upid,
                                              user_id=user_id)

    # 如果查到,则说明他订阅过
    if len(sf_result) > 0:
        sf_result = sf_result[0]
        # 如果是True,说明当前正处于订阅中
        if sf_result.is_active is False:
            return get_res_json(code=0, msg='你已经取消订阅,无需重复取消。该UP主id为:%s' % upid)
        else:
            sf_result.is_active = False
            sf_result.save()

            # 插入一条历史取消订阅记录
            SubscribeHistory.objects.create(uploader_id=upid,
                                            user_id=user_id,
                                            action='02').save()

            return get_res_json(code=200, msg='已取消订阅,该UP主的id为:%s' % upid)
    else:
        return get_res_json(code=200,
                            msg='你尚未订阅过该 up 主,无法取消订阅。该UP主id为:%s' % upid)
Пример #14
0
 def get_userinfo(self, id):
     d = uid.get_mysql_select_sql(id)
     with MySQLTool(host=mysql_config['host'],
                    user=mysql_config['user'],
                    password=mysql_config['pw'],
                    port=mysql_config['port'],
                    database=mysql_config['database']) as mtool:
         print(d)
         select_result = mtool.run_sql([[d['sql'], d['val_list']]])
         if select_result is False:
             return get_res_json(code=0, msg='查询用户信息失败')
         userinfo = uid.get_mysql_select_data(select_result)
         return get_res_json(code=200, data=userinfo)
Пример #15
0
 def update(self, data):
     d = uid.get_mysql_update_sql(data)
     print(d)
     with MySQLTool(host=mysql_config['host'],
                    user=mysql_config['user'],
                    password=mysql_config['pw'],
                    port=mysql_config['port'],
                    database=mysql_config['database']) as mtool:
         u_result = mtool.update_row(d['sql'], d['val_list'])
         if u_result is not False:
             return get_res_json(code=200, msg='修改成功')
         else:
             return get_res_json(code=0, msg='修改用户信息失败')
Пример #16
0
def logout(request):
    if request.method != 'POST':
        return get_res_json(code=0, msg="请通过POST请求访问接口")

    # 没登录的话
    token = request.session.get('token')
    if token is None:
        return get_res_json(code=0, msg='你还没有登录,不需要登出喔')

    # 注意,此时可以排除登录过期的情况(login_intercept 已经处理过了)
    # 清除登录信息,分别清除内存和用户 session 里的
    SM.delete(token)
    request.session.delete('token')
    return get_res_json(code=200, msg="success", data={'msg': '登出成功'})
Пример #17
0
    def is_can_send(self, email, mtool):
        exist_result = mtool.run_sql(
            [['SELECT * FROM user_auth WHERE email = %s', [email]]])

        # 3、判定邮箱是否存在
        if len(exist_result) is 0:
            # 回滚数据库操作
            mtool.set_uncommit()
            return {
                'is_pass': False,
                'res': get_res_json(code=0, msg="该邮箱不存在,请重试或者联系管理员")
            }

        # 4、验证上一次发送重置密码邮件的时间(每次时间间隔不少于180秒)(低于这个时间,返回提示信息)
        # 尝试获取上一次发送信息
        send_result = mtool.run_sql([[
            'SELECT * FROM reset_pw_list WHERE email = %s and is_invalid = 0',
            [email]
        ]])
        if send_result is False:
            # 回滚数据库操作
            mtool.set_uncommit()
            return {
                'is_pass': False,
                'res': get_res_json(code=0, msg="服务器错误(2),请稍后再重试")
            }

        if len(send_result) > 0:
            # 说明之前有未生效重置密码的邮件。此时需要判断时间间隔
            last_send = send_result[len(send_result) - 1]
            last_send_ctime = last_send[3]
            last_sec = int(time.mktime(last_send_ctime.timetuple()))
            now_sec = int(time.time())
            sec_dur = now_sec - last_sec
            # 间隔少于指定时间,则返回错误提示信息
            if sec_dur <= PW_RWSET_MAILSEND_DURATION_SEC:
                # 回滚数据库操作
                mtool.set_uncommit()
                return {
                    'is_pass':
                    False,
                    'res':
                    get_res_json(code=0,
                                 msg="每次发送密码重置邮件的间隔不能少于180秒,请稍后再重新尝试发送")
                }
        return {'is_pass': True}
Пример #18
0
 def load_data(self, request):
     data = None
     # 取出数据
     if len(request.body) is 0:
         return {
             'is_pass': False,
             'res': get_res_json(code=0, msg='需要【邮箱】')
         }
     try:
         data = json.loads(request.body)
         uf = SendResetPasswordMailForm(data)
         # 验证不通过,返回错误信息
         if not uf.is_valid():
             msg = uf.get_form_error_msg()
             return {'is_pass': False, 'res': get_res_json(code=0, msg=msg)}
         return {'is_pass': True, 'res': data}
     except BaseException as e:
         return {'is_pass': False, 'res': get_res_json(code=0, msg='数据非法')}
Пример #19
0
def vote(request):
    # 加载数据
    post_data = json.loads(request.body)
    # 表单校验
    uf = VoteForm(post_data)
    # 数据是否合法
    if uf.is_valid() is False:
        # 返回错误信息
        return get_res_json(code=0, msg=uf.get_form_error_msg())
    # 拿到数据
    qq = uf.data['qq']
    score = uf.data['score']
    vote_id = uf.data['vote_id']
    # 获取当前用户
    user = User.objects.filter(qq=qq, vote_id=vote_id)
    if len(user) == 0:
        return get_res_json(code=0, msg='该用户不存在')
    user = user[0]
    if user.has_voted == '1':
        return get_res_json(code=0, msg='你已经投过票了')

    # 拆分
    split_list = [x for x in score.split('|') if x]

    # 获取投票选项
    vote_options = VoteOptions.objects.filter(vote_id=vote_id)

    for item in split_list:
        # 再讲数据以逗号形式分割,第一个元素是投票id,第二个元素是分数
        id_score = [y for y in item.split(',') if y]
        # 分别拿到选项id和评分
        id = int(id_score[0])
        s = int(id_score[1])
        # 更新数据
        one = vote_options.filter(id=id)[0]
        one.score = one.score + s
        one.vote_people = one.vote_people + 1
        one.save()

    # 更新数据
    user.vote(score)
    user.save()

    return get_res_json(code=200, msg='投票成功')
Пример #20
0
def register(request):
    # 加载数据
    data = json.loads(request.body)
    # 表单校验
    uf = RegisterForm(data)
    # 数据是否合法
    if uf.is_valid() is False:
        # 返回错误信息
        return get_res_json(code=0, msg=uf.get_form_error_msg())

    # 拿到用户名和密码(并去掉中间的空格)
    username = uf.cleaned_data['username'].replace(' ', '')
    password = uf.cleaned_data['password'].replace(' ', '')
    email = uf.cleaned_data['email'].replace(' ', '')
    regcode = uf.cleaned_data['regcode'].replace(' ', '')

    if username in BANNED_USERNAME:
        return get_res_json(code=0, msg='非法的用户名,请勿使用敏感词作为用户名')

    # 1. 账号、邮箱已使用,则不能继续注册
    # 2. 检查验证码+邮箱 是否有数据。如果有数据,该条数据是否过期
    # 3. 创建一条注册信息,设置密码(加密)

    # 先查账号、邮件是否已存在
    search_info = is_can_reg(username=username, email=email)
    if search_info is not None:
        return get_res_json(code=0, msg=search_info)

    # 查数据
    check_result = mail_utils.is_regcode_correct(email=email, regcode=regcode)
    if check_result is not None:
        return get_res_json(code=0, msg=check_result)

    user = UserModel.objects.create(username=username, email=email)
    # 设置密码
    user.set_pw(password)
    user.save()
    set_user_session(request, user)
    return get_res_json(code=200,
                        msg='注册成功',
                        data={
                            'username': username,
                            'userid': user.id
                        })
def uploader_rec_set(request):
    # 加载数据
    data = json.loads(request.body)
    # 表单校验
    uf = SetUserRecForm(data)
    # 数据是否合法
    if uf.is_valid() is False:
        # 返回错误信息
        return get_res_json(code=0, msg=uf.get_form_error_msg())

    # 流程梳理:
    # 1. 拿取订阅者 id 和 当前用户 id;
    # 2. 查看当前用户 MsgPuber 表的 auth 是不是 02
    # 2.1 不是 02,返回错误提示信息(没有权限修改)
    # 2.2 是 02,进入 3
    # 3. 查询订阅表 SubscribeFeeds 表,修改 puber_allow_rec 为相反的值
    # 4. 保存,返回信息

    # 拿取数据
    upid = uf.cleaned_data['upid']
    user_id = uf.cleaned_data['user_id']
    owner = request.session.get('id', '')  # 当前用户

    # 先校验该用户有无权限对该up主进行操作
    mp_info = MsgPuber.objects.filter(id=upid, user_id=owner)
    if len(mp_info) == 0:
        return get_res_json(code=0, msg='UP 主不存在或你无权限对该用户进行操作')

    # 获取订阅信息。只能对生效中的进行操作
    # (若想禁止曾经订阅过但现在取消的人,请禁止用户订阅)
    # todo 有一种场景,是你想默认禁止用户订阅,只允许你打开权限的人收取邮件。
    #  这个需要后期添加一个接口,修改订阅后,puber_allow_rec 默认为 False)
    #  目前默认是 True——即允许收取
    sub_info = SubscribeFeeds.objects.filter(uploader_id=upid, user_id=user_id)

    if len(sub_info) == 0:
        return get_res_json(code=0, msg='该用户并未订阅,无法进行操作')

    sub_info = sub_info[0]
    sub_info.puber_allow_rec = bool(1 - sub_info.puber_allow_rec)
    sub_info.save()

    return get_res_json(code=200, msg='订阅者 id 为:%s 的 接受邮件权限 修改成功' % user_id)
Пример #22
0
def add_user(request):
    # 加载数据
    post_data = json.loads(request.body)
    # 表单校验
    uf = AddVoteUserForm(post_data)
    # 数据是否合法
    if uf.is_valid() is False:
        # 返回错误信息
        return get_res_json(code=0, msg=uf.get_form_error_msg())
    # 拿到数据
    qq = uf.data['qq']
    vote_id = uf.data['vote_id']
    # 查看该用户是否存在
    user = User.objects.filter(qq=qq, vote_id=vote_id)
    if len(user) > 0:
        return get_res_json(code=0, msg='该用户已存在')
    new_user = User.objects.create(qq=qq, vote_id=vote_id)
    new_user.save()
    return get_res_json(code=200, msg='创建成功')
Пример #23
0
def send_email_regcode(request):
    # 加载数据
    data = json.loads(request.body)
    # 表单校验
    uf = SendRegCodeForm(data)
    # 数据是否合法
    if uf.is_valid() is False:
        # 返回错误信息
        return get_res_json(code=0, msg=uf.get_form_error_msg())

    # 拿到用户名和密码
    username = uf.cleaned_data['username']
    email = uf.cleaned_data['email']
    if request.META.get('HTTP_X_FORWARDED_FOR'):
        ip = request.META.get('HTTP_X_FORWARDED_FOR')
    else:
        ip = request.META.get('REMOTE_ADDR')

    # 1. 账号、邮箱已使用,则不能继续注册
    # 2. 检查推送频率
    # 3. 推送验证码邮件

    # 先查重(已注册显然不能继续推送)
    search_info = is_can_reg(username=username, email=email)
    if search_info is not None:
        return get_res_json(code=0, msg=search_info)

    # 检查是否可以推送邮件
    is_can_send = mail_utils.can_send_regcode_email(email=email, ip=ip)
    if is_can_send is not None:
        return get_res_json(code=0, msg=is_can_send)

    # 创建一条邮件记录
    new_mail_info = RegVerifyMailModel.objects.create(email=email, ip=ip)
    # 推送邮件
    send_result = mail_utils.send_regcode_email(
        email=email, regcode=new_mail_info.verify_code)

    if send_result.code == 200:
        return get_res_json(code=send_result.code, msg='邮件发送成功,请访问邮箱查看验证码')
    else:
        return get_res_json(code=send_result.code,
                            msg='邮件发送失败,请重试或联系管理员。\n失败原因:%s' % send_result.msg)
Пример #24
0
def register(request):
    if request.method != 'POST':
        return get_res_json(code=0, msg="请通过POST请求来进行查询")

    rm = RegisterManager(request)
    data = rm.load_data()
    if data['is_pass'] is False:
        return data['res']
    result = rm.register(data['res'])
    return result
Пример #25
0
def vote_add_option(request):
    # 加载数据
    post_data = json.loads(request.body)
    # 表单校验
    uf = AddVoteOptionForm(post_data)
    # 数据是否合法
    if uf.is_valid() is False:
        # 返回错误信息
        return get_res_json(code=0, msg=uf.get_form_error_msg())

    option = uf.data['option']
    vote_id = uf.data['vote_id']
    # 先查有没有option重复的
    if len(VoteOptions.objects.filter(option=option, vote_id=vote_id)) > 0:
        return get_res_json(code=0, msg='选项重复')

    data = VoteOptions.objects.create(option=option, vote_id=vote_id)
    data.save()

    return get_res_json(code=200, msg='添加成功')
Пример #26
0
def get_userinfo(request):
    if request.method != 'GET':
        return get_res_json(code=0, msg="请通过GET请求来进行查询")
    # 先拿 token
    token = request.session.get('token')
    # 根据token反查用户id
    userinfo = SM.get(token)
    id = userinfo['data']['id']
    um = UserInfoManager()
    # 直接返回用户信息
    return um.get_userinfo(id)
Пример #27
0
 def _verify(self, data):
     uf = LoginForm(data)
     # 验证不通过,返回错误信息
     if not uf.is_valid():
         msg = uf.get_form_error_msg()
         return {
             'is_pass': False,
             'res': get_res_json(code=0, msg=msg)
         }
     return {
         'is_pass': True
     }
Пример #28
0
def update_userinfo(request):
    if request.method != 'POST':
        return get_res_json(code=0, msg="请通过POST请求来进行查询")
    token = request.session.get('token')
    userinfo = SM.get(token)
    id = userinfo['data']['id']
    um = UserInfoManager()
    load_result = um.load_data(request, id)
    if load_result['is_pass'] is False:
        return load_result['res']
    data = load_result['data']
    return um.update(data)
Пример #29
0
def user_subscribe_list(request):
    """
    流程:
    1. 拿到当前查的订阅类型,是QQ订阅还是邮件订阅,记录下来;
    2. 先查 SubscribeFeeds 表,拿到所有订阅信息(包括当前生效和取消订阅的);
    3. 查到订阅时间、是否生效,再拿字段 upid 去查 MsgPuber 表,拿到up主的详细信息;
    4. 再去拿到up主的最近一条消息;
    5. 组装数据,每条信息是:订阅时间+类型 + up主信息 + up主最近推送消息的信息
    """

    # 当前登录的用户id
    owner = request.session.get('id', None)
    # 拉取当前用户的所有订阅记录
    sf_list = SubscribeFeeds.objects.filter(
        user_id=owner).order_by('-sub_time')

    if len(sf_list) == 0:
        return get_res_json(code=200, data={'list': []})

    # 先做出订阅列表
    my_sub_list = [
        {
            'uploader_id': item.uploader_id,  # 被订阅者id
            'sub_type': item.sub_type,  # 订阅类型
            'sub_type_cn': get_sub_type_cn(item.sub_type),  # 订阅类型
            'sub_time': item.sub_time.strftime('%Y-%m-%d %H:%M:%S'),  # 订阅时间
            'is_active': item.is_active,  # 是否生效中
            'puber_allow_rec': item.puber_allow_rec,  # up主是否允许用户收取邮件
            'uploader': None
        } for item in sf_list
    ]

    # 再反查 MsgPuber 表
    for sub_info in my_sub_list:
        uploader_id = sub_info['uploader_id']
        mp_info = MsgPuber.objects.filter(id=uploader_id)[0]
        # 获取当前up主的信息
        sub_info['uploader_info'] = get_msgpub_info(mp_info)

    return get_res_json(code=200, data={'list': my_sub_list})
Пример #30
0
    def send(self, mtool, email):
        vcode = self._get_vcode()
        # 获取当前时间
        nowtime = get_date_time()
        # 先将之前的数据设置为失效(无论之前有没有数据)
        u_result = mtool.update_row(
            'UPDATE reset_pw_list SET is_invalid=1 WHERE email=%s', [email])

        if u_result is False:
            # 回滚数据库操作
            mtool.set_uncommit()
            return get_res_json(code=0, msg='服务器错误(0),请重试')

        # 数据库插入一行记录(用于之后重置密码时校验使用)
        row_id = mtool.insert_row(
            'INSERT reset_pw_list'
            '(id, email, verify_key, ctime, last_vtime, is_pass, is_invalid) VALUES'
            '(%s, %s,    %s,         %s,    %s,         0,       0)',
            [None, email, vcode, nowtime, nowtime])

        if row_id is False:
            # 回滚数据库操作
            mtool.set_uncommit()
            return get_res_json(code=0, msg='服务器错误(1),请重试')

        # 【5】生成连接
        url = self._get_reset_url(email, vcode)
        # 此时跳转到邮件发送提示页面,提示用户点击邮箱里的链接进行验证
        send_result = self._send_resetpw_email(email, url)

        # 发送失败——》返回错误信息
        if send_result.code is not 200:
            # 回滚数据库操作
            mtool.set_uncommit()
            return get_res_json(code=0, data={'msg': send_result.msg})

        # 此时跳转到邮件发送提示页面,提示用户点击邮箱里的链接进行验证
        return get_res_json(code=200,
                            data={'msg': '已发送密码重置邮件,请访问邮箱,打开邮件中的链接地址'})