Example #1
0
def bank_detail(request, bank_id):
    try:
        bank = BankInfo.objects.get(bank_id=bank_id)
    except BankInfo.DoesNotExist:
        return json_response(*SetError.BankInfoNotFound)

    return json_response(200, 'OK', {'bank_info': bank.data})
def reset_password(request):
    email = request.POST.get('email', '')
    new_password = request.POST.get('new_password', '')
    new_password_again = request.POST.get('new_password_again', '')
    is_biz = request.POST.get('is_biz', 0)

    if new_password != new_password_again:
        return json_response(*UserError.PasswordError)

    try:
        User.objects.get(email=email)
    except User.DoesNotExist:
        return json_response(*UserError.UserNotFound)

    if not get_has_sentemail(email):
        sign = str(uuid.uuid1())
        set_passwd(sign, new_password)
        set_has_sentemail(email)

        title = '[Quizz.cn密码重置邮件]'
        sender = settings.EMAIL_HOST_USER
        url = settings.DOMAIN + '/auth/reset_notify?email=' + email + '&sign=' + sign + '&is_biz=' + str(
            is_biz)
        msg = '您好,Quizz.cn管理员想邀请您确认是否重置密码?{}'.format(url)

        ret = send_mail(title, msg, sender, [email], fail_silently=True)
        if not ret:
            return json_response(*UserError.UserSendEmailFailed)

        return json_response(200, 'OK', {})

    else:
        return json_response(*UserError.UserHasSentEmail)
Example #3
0
def register(request):
    """
    用户注册模块
    """
    body = json.loads(request.body)            # 获取请求内容
    account = body.get('account', '')       # 获取用户名
    password = body.get('password', '')     # 获取密码
    city = body.get('city', '')             # 获取城市
    introduction = body.get('introduction', '')     # 获取用户简介
    cert_type = body.get('cert_type', 0)           # 证件类型
    cert_number = body.get('cert_number', '')       # 证件号
    phone = body.get('telephone', 0)        # 电话号码
    name = body.get('nick_name', '')             # 姓名

    try:
        p = Profile.objects.get(account=account)
    except Profile.DoesNotExist:  # 用户信息不存在
        with transaction.atomic():
            Profile.objects.create(  # 创建新用户信息并写入数据库
                account=account,
                password=password,
                city=city,
                introduction=introduction,
                cert_type=cert_type,
                cert_number=cert_number,
                phone=phone,
                user_name=name,
                user_type=1,
                user_level=0,
            )
        return json_response(200, 'OK', {  # 返回用户uid
            'uid': Profile.objects.values().get(account=account).get('uid')
        })
    else:
        return json_response(300003, 'User Has Existed', {'error': True})
Example #4
0
def signup(request):
    email = request.POST.get('email', '')  # 邮箱
    password = request.POST.get('password', '')  # 密码
    password_again = request.POST.get('password_again', '')  # 确认密码
    vcode = request.POST.get('vcode', '')  # 注册验证码
    sign = request.POST.get('sign')  # 注册验证码检验位
    if password != password_again:  # 两次密码不一样,返回错误码300002
        return json_response(*UserError.PasswordError)
    result = get_vcode(sign)  # 校验vcode,逻辑和登录视图相同
    if not (result and (result.decode('utf-8') == vcode.lower())):
        return json_response(*UserError.VeriCodeError)
    if User.objects.filter(email__exact=email).exists():  # 检查数据库是否存在该用户
        return json_response(*UserError.UserHasExists)  # 返回错误码300004
    username = email.split('@')[0]  # 生成一个默认的用户名
    if User.objects.filter(username__exact=username).exists():
        username = email  # 默认用户名已存在,使用邮箱作为用户名
    User.objects.create_user(  # 创建用户,并设置为不可登录
        is_active=False,
        is_staff=False,
        username=username,
        email=email,
        password=password,
    )
    Profile.objects.create(  # 创建用户信息
        name=username, email=email)
    sign = str(uuid.uuid1())  # 生成邮箱校验码
    set_signcode(sign, email)  # 在redis设置30min时限的验证周期
    return json_response(
        200,
        'OK',
        {  # 返回JSON数据
            'email': email,
            'sign': sign
        })
Example #5
0
def normal_login(request):
    """
    普通视图登录
    :param request: 请求对象
    :return: 返回json数据:user_info:用户信息;has_login:用户是否已登录
    """
    email = request.POST.get('email', '')
    password = request.POST.get('password', '')
    sign = request.POST.get('sign', '')
    vcode = request.POST.get('vcode', '')
    result = get_vcode(sign)
    if not (result and (result.decode('utf-8') == vcode.lower())):
        return json_response(*UserError.VeriCodeError)
    try:
        user = User.objects.get(email=email)
    except User.DoesNotExist:
        return json_response(*UserError.UserNotFound)
    user = authenticate(request, username=user.username, password=password)
    if user is not None:
        login(request, user)
        profile, created = Profile.objects.select_for_update().get_or_create(email=user.email)
        if profile.user_src != Profile.COMPANY_USER:
            profile.name = user.username
            profile.user_src = Profile.NORMAL_USER
            profile.save()
        request.session['uid'] = profile.uid
        request.session['username'] = profile.name
        set_profile(profile.data)
    else:
        return json_response(*UserError.PasswordError)
    return json_response(200, 'OK', {
        'user_info': profile.data,
        'has_login': bool(profile)
    })
Example #6
0
def pickup(order_id):
    """
    Update the status to reflect the laundryman picked the laundry from the request person.

    ---
    tags:
      - Laundry_orders
    parameters:
      - name: Authorization
        in: header
        required: true
        type: string
      - name: order_id
        in: path
        type: string
        required: true
    responses:
      200:
        description: Laundry order with the status updated.
        schema:
          $ref: '#/definitions/OrderInformationResponse'

    """
    user = user_from_authorization_headers(request)
    order = OrderInformation(id=order_id)
    if order.user_accepted.user != user.id:
        return json_response({'message': 'Unauthorized'}, 400)
    order.order_is_pickup()

    return json_response({
        'message': 'pickup',
        'order': OrderInformationSchema().dump(order)[0]
    })
    def wrapper(request, *args, **kwargs):
        kind_id = request.GET.get('kind_id', '') or request.POST.get(
            'kind_id', '')

        try:
            kind_info = CompetitionKindInfo.objects.get(kind_id=kind_id)
        except CompetitionKindInfo.DoesNotExist:
            if request.path.startswith('/bs'):
                return render(request, 'err.html', CompetitionNotFound)
            if request.path.startswith('/api'):
                return json_response(*CompetitionError.CompetitionNotFound)

        if kind_info.cop_finishat < datetime.datetime.now(
                tz=datetime.timezone.utc):
            if request.path.startswith('/bs'):
                return render(request, 'err.html', CompetitionHasEnded)
            if request.path.startswith('/api'):
                return json_response(*CompetitionError.CompetitionHasEnded)

        if kind_info.cop_startat > datetime.datetime.now(
                tz=datetime.timezone.utc):
            if request.path.startswith('/bs'):
                return render(request, 'err.html', CompetitionNotStarted)
            if request.path.startswith('/api'):
                return json_response(*CompetitionError.CompetitionNotStarted)

        return func(request, *args, **kwargs)
Example #8
0
def banks(request, s):
    if s == '999':
        banks = BankInfo.objects.values_list(
            'bank_name', 'bank_id', 'kind_num', 'choice_num',
            'fillinblank_num').order_by('-kind_num')
        return json_response(
            200, 'OK', {
                'banks': [{
                    'bank_name': b[0],
                    'bank_id': b[1],
                    'kind_num': b[2],
                    'total_question_num': b[3] + b[4]
                } for b in banks]
            })
    bank_types = [t[0] for t in BankInfo.BANK_TYPES]

    if int(s) in bank_types:
        banks = BankInfo.objects.filter(bank_type=s).values_list(
            'bank_name', 'bank_id', 'kind_num', 'choice_num',
            'fillinblank_num')
        return json_response(
            200, 'OK', {
                'banks': [{
                    'bank_name': b[0],
                    'bank_id': b[1],
                    'kind_num': b[2],
                    'total_question_num': b[3] + b[4]
                } for b in banks]
            })

    return json_response(*SetError.BankTypeError)
Example #9
0
def registry_biz(request):
    email = request.POST.get('email', '')
    name = request.POST.get('name', '')
    username = request.POST.get('username', '')
    phone = request.POST.get('phone', '')
    ctype = request.POST.get('type', BusinessAccountInfo.INTERNET)
    flag = int(request.POST.get('flag', 2))

    uname = email.split('@')[0]
    if not User.objects.filter(username__exact=name).exists():
        final_name = username
    elif not User.objects.filter(username__exact=uname).exists():
        final_name = uname
    else:
        final_name = email

    if flag == 2:
        user = User.objects.create_user(username=final_name,
                                        email=email,
                                        password=settings.INIT_PASSWORD,
                                        is_active=False,
                                        is_staff=False)
    if flag == 1:
        try:
            user = User.objects.get(email=email)
        except User.DoesNotExist:
            return json_response(*UserError.UserNotFound)

    pvalues = {
        'phone': phone,
        'name': final_name,
        'user_src': Profile.COMPANY_USER,
    }

    profile, _ = Profile.objects.select_for_update().get_or_create(email=email)

    for k, v in pvalues.items():
        setattr(profile, k, v)
    profile.save()

    bizvalues = {
        'company_name': name,
        'company_username': username,
        'company_phone': phone,
        'company_type': ctype,
    }

    biz, _ = BusinessAccountInfo.objects.select_for_update().get_or_create(
        email=email, defaults=bizvalues)

    return json_response(200, 'OK', {
        'name': final_name,
        'email': email,
        'flag': flag
    })
Example #10
0
def update_profile(request):
    phone = request.POST.get('phone', '')
    classname = request.POST.get('classname', '')
    trainee_code = request.POST.get('trainee_code', '')

    try:  # 校验成功,获得返回用户信息
        Profile.objects.filter(name=phone).update(classname=classname,
                                                  trainee_code=trainee_code)
        return json_response(200, 'OK', {})
    except User.DoesNotExist:
        return json_response(*UserError.ProfileNotFound)
Example #11
0
def delete_p4table_rule(table_id):
    if request.content_type != JSON_MIME_TYPE:
        error = json.dumps({'error': 'Invalid Content Type'})
        return json_response(error, 400)
    data = request.json
    response, message = core.delete_rule(table_id, data)
    if response:
        return json_response(message, status=201)
    else:
        error = json.dumps({'error': message})
        return json_response(error, 400)
Example #12
0
def get_questions(request):
    """
    获取题目信息接口
    :param request: 请求对象
    :return: 返回json数据: user_info: 用户信息;kind_info: 比赛信息;qa_id: 比赛答题记录;questions: 比赛随机后的题目;
    """
    kind_id = request.GET.get('kind_id', '')  # 获取kind_id
    uid = request.GET.get('uid', '')  # 获取uid
    try:  # 获取比赛信息
        kind_info = CompetitionKindInfo.objects.select_for_update().get(
            kind_id=kind_id)
    except CompetitionKindInfo.DoesNotExist:  # 未获取到,返回错误码100001
        return json_response(*CompetitionError.CompetitionNotFound)
    try:  # 获取题库信息
        bank_info = BankInfo.objects.get(bank_id=kind_info.bank_id)
    except BankInfo.DoesNotExist:  # 未获取到,返回错误码100004
        return json_response(*CompetitionError.BankInfoNotFound)
    try:  # 获取用户信息
        profile = Profile.objects.get(uid=uid)
    except Profile.DoesNotExist:  # 未获取到,返回错误码200001
        return json_response(*ProfileError.ProfileNotFound)
    qc = ChoiceInfo.objects.filter(bank_id=kind_info.bank_id)  # 选择题
    qf = FillInBlankInfo.objects.filter(bank_id=kind_info.bank_id)  # 填空题
    questions = []  # 将两种题型放到同一个列表中
    for i in qc.iterator():
        questions.append(i.data)
    for i in qf.iterator():
        questions.append(i.data)
    question_num = kind_info.question_num  # 出题数
    q_count = bank_info.total_question_num  # 总题数
    if q_count < question_num:  # 出题数大于总题数,返回错误码100005
        return json_response(CompetitionError.QuestionNotSufficient)
    qs = random.sample(questions, question_num)  # 随机分配题目
    qa_info = CompetitionQAInfo.objects.select_for_update(
    ).create(  # 创建答题log数据
        kind_id=kind_id,
        uid=uid,
        qsrecord=[q['question'] for q in qs],
        asrecord=[q['answer'] for q in qs],
        total_num=question_num,
        started_stamp=tc.utc_timestamp(ms=True, milli=True),  # 设置开始时间戳
        started=True)
    for i in qs:  # 剔除答案信息
        i.pop('answer')
    return json_response(
        200,
        'OK',
        {  # 返回JSON数据,包括题目信息,答题log信息等
            'kind_info': kind_info.data,
            'user_info': profile.data,
            'qa_id': qa_info.qa_id,
            'questions': qs
        })
Example #13
0
def registry_biz(request):
    email = request.POST.get('email', '')  # 获取填写的邮箱
    name = request.POST.get('name', '')  # 获取填写的机构名
    username = request.POST.get('username', '')  # 获取填写的机构联系人
    phone = request.POST.get('phone', '')  # 获取填写的手机号
    ctype = request.POST.get('type', BusinessAccountInfo.INTERNET)  # 获取机构类型
    flag = int(request.POST.get('flag', 2))  # 获取一个标记位,代表用户是创建新用户还是使用绑定老用户的方式
    uname = email.split('@')[0]  # 和之前的注册逻辑没什么区别,创建一个账户名
    if not User.objects.filter(username__exact=name).exists():
        final_name = username
    elif not User.objects.filter(username__exact=uname).exists():
        final_name = uname
    else:
        final_name = email
    if flag == 2:  # 如果标记位是2,那么将为他创建新用户
        user = User.objects.create_user(username=final_name,
                                        email=email,
                                        password=settings.INIT_PASSWORD,
                                        is_active=False,
                                        is_staff=False)
    if flag == 1:  # 如果标记位是1,那么为他绑定老用户
        try:
            user = User.objects.get(email=email)
        except User.DoesNotExist:
            return json_response(*UserError.UserNotFound)
    pvalues = {
        'phone': phone,
        'name': final_name,
        'user_src': Profile.COMPANY_USER,
    }
    profile, _ = Profile.objects.select_for_update().get_or_create(
        email=email)  # 获取或创建用户信息
    for k, v in pvalues.items():
        setattr(profile, k, v)
    profile.save()
    bizvalues = {
        'company_name': name,
        'company_username': username,
        'company_phone': phone,
        'company_type': ctype,
    }
    biz, _ = BusinessAccountInfo.objects.select_for_update(
    ).get_or_create(  # 获取或创建机构账户信息
        email=email, defaults=bizvalues)
    return json_response(
        200,
        'OK',
        {  # 响应JSON格式数据,这个标记位在发送验证邮件的时候还有用
            'name': final_name,
            'email': email,
            'flag': flag
        })
Example #14
0
def login():
    """
    Login the user to get session key.
    ---
    tags:
      - Users
    parameters:
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/UserCredentials'
    definitions:
      UserCredentials:
        type: object
        properties:
          email:
            type: string
            format: email
          password:
            type: string
            format: password
      JwtToken:
        type: object
        properties:
          token:
            type: string

    responses:
      200:
        description: JWT session key.
        schema:
          $ref: '#/definitions/JwtToken'
      500:
        description: Invalid form.
      400:
        description: Wrong user.
    """
    user_form, errors = RegisterSchema(only=['email', 'password']).load(request.json)
    if errors:
        return json_response({'error': errors}, 500)
    try:
        user = User.objects.get(email=user_form.email)
    except:
        return json_response({'error': 'Wrong User'}, 400)

    if user.password != user_form.password:
        return json_response({'error': 'Wrong User'}, 400)

    encoded = jwt.encode({'some': 'payload', 'email': user.email}, JWT_SECRET, algorithm='HS256').decode('utf-8')
    return jsonify({'token': encoded})
Example #15
0
def reset_password(request):
    resetUserId = request.POST.get('resetUserId', '')
    resetUsername = request.POST.get('resetUsername', '')
    try:
        user = User.objects.get(username=resetUsername)  # 获取用户
    except User.DoesNotExist:
        user = None

    if user is not None:  # 校验成功,获得返回用户信息
        user.set_password("123456")
        user.save()
        return json_response(200, 'OK', {})
    else:
        return json_response(*UserError.PasswordError)
Example #16
0
def normal_login(request):
    """
    普通登录视图
    :param request: 请求对象
    :return: 返回json数据: user_info: 用户信息;has_login: 用户是否已登录
    """
    phone = request.POST.get('phone', '')  # 获取phone
    password = request.POST.get('password', '')  # 获取password
    sign = request.POST.get('sign', '')  # 获取登录验证码的sign
    vcode = request.POST.get('vcode', '')  # 获取用户输入的验证码
    result = get_vcode(sign)  # 从redis中校验sign和vcode
    if not (result and (result.decode('utf-8') == vcode.lower())):
        return json_response(*UserError.VeriCodeError)  # 校验失败返回错误码300003
    try:
        user = User.objects.get(username=phone)  # 使用phone获取Django用户
    except User.DoesNotExist:
        return json_response(*UserError.UserNotFound)  # 获取失败返回错误码300001
    # print(user.username)
    # print(password)
    user = authenticate(request, username=user.username,
                        password=password)  # 授权校验
    if user is not None:  # 校验成功,获得返回用户信息
        login(request, user)  # 登录用户,设置登录session
        profile, created = Profile.objects.select_for_update(
        ).get_or_create(  # 获取或创建Profile数据
            name=user.username, )
        if profile.user_src != Profile.COMPANY_USER:
            profile.name = user.username
            profile.user_src = Profile.NORMAL_USER
            profile.save()
        request.session.get("usertype")  #让session创建usertyp这个值
        request.session['uid'] = profile.uid  # 设置Profile uid的session
        request.session['username'] = profile.name  # 设置用户名的session
        request.session['displayname'] = profile.displayname  # 设置用户名的session
        request.session[
            'usertype'] = profile.user_src  # 设置用户类型session,普通用户,管理员
        # print("---------------profile.user_src")
        # print(profile.user_src)
        # print(request.session.get("usertype"))
        set_profile(profile.data)  # 将用户信息保存到redis,查用户信息从redis中查询
    else:
        return json_response(*UserError.PasswordError)  # 校验失败,返回错误码300002
    recode = 200
    if 33 == profile.user_src:
        recode = 300
    return json_response(recode, 'OK', {  # 返回JSON格式数据
        'user_info': profile.data,
        'has_login': bool(profile),
    })
Example #17
0
def game_list_data(request):
    kindData = []
    kinds = CompetitionKindInfo.objects.all().order_by('-created_at')
    for kind in kinds:
        copStartat = kind.cop_startat.strftime("%Y/%m/%d")
        copFinishat = kind.cop_finishat.strftime("%Y/%m/%d")
        copFinishatValue = kind.cop_finishat.strftime("%Y-%m-%d")
        isOpen = "否"
        if kind.is_open:
            isOpen = "是"
        bank_info = BankInfo.objects.get(bank_id=kind.bank_id)
        kindData.append({
            'sponsor_name': kind.get_sponsor_name_display(),
            'kind_name': kind.kind_name,
            'kind_id': kind.kind_id,
            'bank_name': bank_info.bank_name,
            'kind_type': kind.get_kind_type_display(),
            'total_score': kind.total_score,
            'question_num': kind.question_num,
            'A1_choice_num': kind.A1_choice_num,
            'A2_choice_num': kind.A2_choice_num,
            'A3_choice_num': kind.A3_choice_num,
            'B_choice_num': kind.B_choice_num,
            'cop_startat': copStartat,
            'period': kind.period_time,
            'cop_finishat': copFinishat,
            'copFinishatValue': copFinishatValue,
            'is_open': isOpen,
            'is_open_value': kind.is_open,
            'total_partin_num': kind.total_partin_num,
        })

    return json_response(200, 'OK', {
        'data': kindData,
    })
Example #18
0
def get(order_id):
    """
    Show a single laundry order.

    ---
    tags:
      - Laundry_orders
    parameters:
      - name: Authorization
        in: header
        required: true
        type: string
      - name: order_id
        in: path
        required: true
        type: string

    responses:
      200:
        description: Single order details.
        schema:
          $ref: '#/definitions/OrderInformationResponse'
      404:
        description: Not found.

    """

    order = OrderInformation(id=order_id)
    return json_response({
        'message': 'Order',
        'order': OrderInformationSchema().dump(order)[0]
    })
Example #19
0
def slave_create(request):
    """
    接令者申请召集令
    """
    body = json.loads(request.body)
    tid = body.get('order_id', '')
    pid = body.get('slave_id', '')
    desc = body.get('request_msg', '')

    try:
        task = Task.objects.get(uid=tid)
        req = Profile.objects.get(uid=pid)
        name = req.user_name
        if(task.cur_people<task.max_people):
            Request.objects.create(
                task=task,
                requester=req,
                description=desc,
                requester_name=name
            )
        else:
            return HttpResponseBadRequest({"msg":"召集人数已满"})
    except Exception as e:
        # return json_response(400003, 'Create Request Error', {'error': str(e)})
        return HttpResponseServerError
    else:
        data = Request.objects.values().get(
            task=tid, requester=pid)
        return json_response(200, 'OK', data)
Example #20
0
def master_query(request):
    """
    查询请求信息
    """
    # body = json.loads(request.body)
    body = request.GET
    task = body.get('order_id', '')
    # req = list(Request.objects.values().filter(task__exact=task))

    req = Request.objects.filter(task__exact=task)

    # slave = list(i.requester for i in req)

    response_body = [{
        "task_name": each.task.task_name,
        "task_id": each.task.uid,
        "requester_id": each.requester.uid,
        "requester_name": each.requester.user_name,
        "request_status": each.request_status,
        "uid": each.uid,
        "description": each.description
    } for each in req]
    # slave = list
    # for i in req:
    #     slave.append(Profile.objects.values().get(uid=i['uid']))

    if req.exists() == False:
        return HttpResponseBadRequest("没有该任务的申请")
    else:
        return json_response(200, 'OK', response_body)
Example #21
0
def comment_create(request):
    article_id = int(request.POST["article_id"])
    content = request.POST["content"].strip()
    to_comment_id = int(request.POST["to_comment_id"])
    # print article_id, content, to_comment_id

    article = Article.objects.get(id=article_id)
    # print article
    comment = Comment(block=article.block, article=article, 
    				  owner=request.user, content=content, 
    				  to_comment_id=to_comment_id
    				 )
    comment.save()
    if to_comment_id == 0:
      owner=article.owner
      content=u"有人评论了您的文章 %s" % article.title
    else:
      owner=comment.to_comment.owner
      content=u"有人评论了您的评论 %s" % comment.to_comment.content[:30]
    
    new_message = UserMessage(owner=owner, 
                              content=content, 
                              link=reverse("detail_message", args=[int(article_id), int(comment.id)])
                              )
    new_message.save()
    return json_response({})
Example #22
0
def create_comment(request):
    article_id = int(request.POST["article_id"])
    to_comment_id = int(request.POST["to_comment_id"])
    content = request.POST["content"].strip()

    article = Article.objects.get(id=article_id)
    comment = Comment(block=article.block,
                      article=article,
                      owner=request.user,
                      to_comment_id=to_comment_id,
                      content=content)
    comment.save()
    if to_comment_id == 0:
        new_msg = UserMessage(owner=article.owner,
                              content=u"有人评论了您的文章《%s》" % article.title,
                              link=reverse("article_detail",
                                           args=[article.id]))
        new_msg.save()
    else:
        to_comment = Comment.objects.get(id=to_comment_id)
        new_msg = UserMessage(
            owner=to_comment.owner,
            content=u"有人回复了你的评论'%s'" % to_comment.content[:30],
            link=reverse("article_detail", args=[article.id]))
        new_msg.save()
    return json_response({})
Example #23
0
def comment_create(request):
    article_id = int(request.POST["article_id"])
    content = request.POST["content"].strip()
    to_comment_id = int(request.POST["to_comment_id"])
    # print article_id, content, to_comment_id

    article = Article.objects.get(id=article_id)
    # print article
    comment = Comment(block=article.block,
                      article=article,
                      owner=request.user,
                      content=content,
                      to_comment_id=to_comment_id)
    comment.save()
    if to_comment_id == 0:
        owner = article.owner
        content = u"有人评论了您的文章 %s" % article.title
    else:
        owner = comment.to_comment.owner
        content = u"有人评论了您的评论 %s" % comment.to_comment.content[:30]

    new_message = UserMessage(owner=owner,
                              content=content,
                              link=reverse(
                                  "detail_message",
                                  args=[int(article_id),
                                        int(comment.id)]))
    new_message.save()
    return json_response({})
Example #24
0
def login(request):
    """
    用户登录模块
    """
    body = json.loads(request.body)
    account = body.get('account', '')
    password = body.get('password', '')

    try:
        p = Profile.objects.values().get(account=account)
    except Profile.DoesNotExist:
        return HttpResponseBadRequest("没有该用户")
    else:
        if p.get('password') != password:
            return HttpResponseBadRequest("密码错误")
        else:
            return json_response(200, "OK", {
                'uid': p.get('uid'),
                'nick_name': p.get('user_name'),
                'account': p.get('account'),
                'introduction': p.get('introduction'),
                'telephone': p.get('phone'),
                'cert_type': p.get('cert_type'),
                'cert_number': p.get('cert_number')
            })
Example #25
0
def comment_create(request):
    article_id = int(request.POST["article_id"])
    to_comment_id = int(request.POST["to_comment_id"])
    content = request.POST["content"]
    page_nums = request.POST["page_nums"]
    article = Article.objects.get(id=article_id)
    block = article.block
    owner = request.user

    comment = Comment(block=block, article=article, owner=owner, to_comment_id=to_comment_id, content=content)
    comment.save()

    if to_comment_id == 0:
        msg = UserMessage(
            owner=article.author,
            content=u"有人评论了你的文章:《%s》" % article.title,
            link=reverse("article_display", args=[article.id]) + "?comment_no=" + page_nums,
        )
        msg.save()
    else:
        to_comment = Comment.objects.get(id=to_comment_id)
        msg = UserMessage(
            owner=to_comment.owner,
            content=u"有人评论了你的评论:'%s'" % to_comment.content[:20],
            link=reverse("article_display", args=[article.id]) + "?comment_no=" + page_nums,
        )
        msg.save()

    return response.json_response({})
Example #26
0
def test(request):
    some_data_to_dump = {
        'some_var_1': 'foo',
        'some_var_2': 'bar',
    }

    return json_response(some_data_to_dump)
Example #27
0
def games(request, s):
    """
    获取所有比赛接口
    :param request: 请求对象
    :param s: 请求关键字
    :return: 返回该请求关键字对应的所有比赛类别
    """

    if s == 'hot':
        # 筛选条件: 完成时间大于当前时间;根据参与人数降序排序;根据创建时间降序排序;筛选10个
        kinds = CompetitionKindInfo.objects.filter(
            cop_finishat__gt=datetime.datetime.now(tz=datetime.timezone.utc),
        ).order_by('-total_partin_num').order_by('-created_at')[:10]

    elif s == 'tech':
        kinds = CompetitionKindInfo.objects.filter(
            sponsor_name=CompetitionKindInfo.INFECTION,
            cop_finishat__gt=datetime.datetime.now(tz=datetime.timezone.utc)
        ).order_by('-total_partin_num').order_by('-created_at')

    elif s == 'edu':
        kinds = CompetitionKindInfo.objects.filter(
            sponsor_name=CompetitionKindInfo.EDUCATION,
            cop_finishat__gt=datetime.datetime.now(tz=datetime.timezone.utc)
        ).order_by('-total_partin_num').order_by('-created_at')

    elif s == 'culture':
        kinds = CompetitionKindInfo.objects.filter(
            sponsor_name=CompetitionKindInfo.CULTURE,
            cop_finishat__gt=datetime.datetime.now(tz=datetime.timezone.utc)
        ).order_by('-total_partin_num').order_by('-created_at')

    elif s == 'sport':
        kinds = CompetitionKindInfo.objects.filter(
            sponsor_name=CompetitionKindInfo.SPORT,
            cop_finishat__gt=datetime.datetime.now(tz=datetime.timezone.utc)
        ).order_by('-total_partin_num').order_by('-created_at')

    elif s == 'general':
        kinds = CompetitionKindInfo.objects.filter(
            sponsor_name=CompetitionKindInfo.GENERAL,
            cop_finishat__gt=datetime.datetime.now(tz=datetime.timezone.utc)
        ).order_by('-total_partin_num').order_by('-created_at')

    elif s == 'interview':
        kinds = CompetitionKindInfo.objects.filter(
            sponsor_name=CompetitionKindInfo.INTERVIEW,
            cop_finishat__gt=datetime.datetime.now(tz=datetime.timezone.utc)
        ).order_by('-total_partin_num').order_by('-created_at')

    else:
        kinds = None

    uid = request.session.get('uid', '')
    return json_response(200, 'OK', {
        'kinds': [i.data for i in kinds],
        'uid': uid
    })
Example #28
0
def sendmail(request):
    to_email = request.GET.get('email', '')  # 在url中获取的注册邮箱地址
    sign = request.GET.get('sign', '')  # 在url中获取的sign标识
    if not get_has_sentregemail(to_email):  # 检查用户是否在同一时间多次点击发送邮件
        title = '[Quizz.cn用户激活邮件]'  # 定义邮件标题
        sender = settings.EMAIL_HOST_USER  # 获取发送邮件的邮箱地址
        url = settings.DOMAIN + '/auth/email_notify?email=' + to_email + '&sign=' + sign  # 回调函数
        msg = '您好,Quizz.cn管理员想邀请您激活您的用户,点击链接激活。{}'.format(url)  # 邮件内容
        ret = send_mail(title, msg, sender, [to_email],
                        fail_silently=True)  # 发送邮件并获取发送结果
        if not ret:
            return json_response(
                *UserError.UserSendEmailFailed)  # 发送出错,返回错误码300006
        set_has_sentregemail(to_email)  # 正常发送,设置3分钟的继续发送限制
        return json_response(200, 'OK', {})  # 返回空JSON数据
    else:
        return json_response(
            *UserError.UserHasSentEmail)  # 如果用户同一时间多次点击发送,返回错误码300005
Example #29
0
def signup(request):
    phone = request.POST.get('phone', '')  # 电话
    displayname = request.POST.get('displayname', '')  # 显示姓名
    password = request.POST.get('password', '')  # 密码
    password_again = request.POST.get('password_again', '')  # 确认密码
    vcode = request.POST.get('vcode', '')  # 注册验证码
    classname = request.POST.get('classname', '')  # 班级名称
    trainee_type = request.POST.get('trainee_type', '')  # 班级名称
    trainee_code = request.POST.get('trainee_code', '')  # 班级名称
    sign = request.POST.get('sign')  # 注册验证码检验位

    if password != password_again:  # 两次密码不一样,返回错误码300002
        return json_response(*UserError.PasswordError)
    result = get_vcode(sign)  # 校验vcode,逻辑和登录视图相同
    if not (result and (result.decode('utf-8') == vcode.lower())):
        return json_response(*UserError.VeriCodeError)
    if User.objects.filter(username=phone).exists():  # 检查数据库是否存在该用户
        return json_response(*UserError.UserHasExists)  # 返回错误码300004
    username = phone  # 生成一个默认的用户名
    if User.objects.filter(username__exact=username).exists():
        username = phone  # 默认用户名已存在,使用邮箱作为用户名
    User.objects.create_user(  # 创建用户,并设置为不可登录
        is_active=False,
        is_staff=False,
        username=username,
        password=password,
    )
    Profile.objects.create(  # 创建用户信息
        name=username,
        phone=phone,
        displayname=displayname,
        classname=classname,
        trainee_type=trainee_type,
        trainee_code=trainee_code,
    )
    sign = str(uuid.uuid1())  # 生成邮箱校验码
    set_signcode(sign, phone)  # 在redis设置30min时限的验证周期
    return json_response(
        200,
        'OK',
        {  # 返回JSON数据
            'phone': phone,
            'sign': sign
        })
Example #30
0
def sendmail(request):
    to_email = request.GET.get('email', '')
    sign = request.GET.get('sign', '')

    if not get_has_sentregemail(to_email):
        title = '[Quizz.cn用户激活邮件]'
        sender = settings.EMAIL_HOST_USER
        url = settings.DOMAIN + '/auth/email_notify?email=' + to_email + '&sign=' + sign
        msg = '您好,Quizz.cn管理员想邀请您激活您的用户,点击链接激活。{}'.format(url)

        ret = send_mail(title, msg, sender, [to_email], fail_silently=True)
        if not ret:
            return json_response(*UserError.UserSendEmailFailed)

        set_has_sentregemail(to_email)

        return json_response(200, 'OK', {})
    else:
        return json_response(*UserError.UserHasSentEmail)
Example #31
0
def check_biz(request):
    email = request.GET.get('email', '')  # 获取邮箱
    try:  # 检查数据库中是否由该邮箱注册过的数据
        biz = BusinessAccountInfo.objects.get(email=email)
    except BusinessAccountInfo.DoesNotExist:
        biz = None
    return json_response(200, 'OK', {  # 返回是否已经被注册过和是否已经有此用户
        'userexists': User.objects.filter(email=email).exists(),
        'bizaccountexists': bool(biz)
    })
Example #32
0
    def wrapper(request, *args, **kwargs):
        uid = request.session.get('uid', '')

        if not uid:
            if request.path.startswith('/bs'):
                return render(request, 'err.html', ProfileNotFound)
            elif request.path.startswith('/api'):
                return json_response(*ProfileError.ProfileNotFound)

        return func(request, *args, **kwargs)
Example #33
0
def get_my_rank(request):
    uid = request.GET.get('uid', '')
    kind_id = request.GET.get('kind_id', '')

    try:
        profile = Profile.objects.get(uid=uid)
    except Profile.DoesNotExist:
        return json_response(*UserError.UserNotFound)

    try:
        kind_info = CompetitionKindInfo.objects.get(kind_id=kind_id)
    except CompetitionKindInfo.DoesNotExist:
        return json_response(*CompetitionError.CompetitionNotFound)

    return json_response(200, 'OK', {
        'time': get_user_rank(kind_id, uid).get('time', 0),
        'score': get_user_rank(kind_id, uid).get('score', 0),
        'rank': get_rank(kind_id, uid)
    })
Example #34
0
def create_comment(request):
    article_id = int(request.POST["article_id"])
    to_comment_id = int(request.POST["to_comment_id"])
    content = request.POST["content"].strip()
    article = Article.objects.get(id=article_id)
    comment = Comment(block=article.block, article=article, owner=request.user, to_comment_id=to_comment_id, content=content)
    comment.save()

    if to_comment_id == 0:
         new_msg = UserMessage(owner=article.owner, content = u"有人评论您的文章 (%s)" % article.title, link = reverse("article_detail", args = [article.id]))
         new_msg.save()
    else:
         to_comment = Comment.objects.get(id=to_comment_id)
         new_msg=UserMessage(owner = to_comment.owner,content=u"有人回复了您的评论 '%s' "%to_comment.content[:30], link=reverse("article_detail", args=[article.id]))
         new_msg.save()
    return json_response({})
Example #35
0
def comment_create(request):
    article_id = int(request.POST['article_id'])
    to_comment_id = int(request.POST['to_comment_id'])
    content = request.POST['content'].strip()

    article = Article.objects.get(id=article_id)
    comment = Comment(block=article.block, article=article, owner=request.user, to_comment_id=to_comment_id,
                      content=content)
    comment.save()
    if to_comment_id == 0:
        new_msg = UserMessage(owner=article.owner,
                              content=u'有人评论了您的文章《%s》' % article.title,
                              link=reverse("article_detail", args=[article.id]))
        new_msg.save()
    else:
        to_comment = Comment.objects.get(id=to_comment_id)
        new_msg = UserMessage(owner=to_comment.owner,
                              content=u'有人评论了您的评论"%s"' % to_comment.content[:30],
                              link=reverse("article_detail", args=[article.id]))
        new_msg.save()

    return json_response({})
Example #36
0
def create_comment(request):
    article_id = int(request.POST['article_id'])
    current_href = request.POST['current_href'].strip()
    to_comment_id = int(request.POST['to_comment_id'])
    content = request.POST['content'].strip()
    article = Article.objects.get(id=article_id)
    comment = Comment(block=article.block,article=article,owner=request.user,to_comment_id=to_comment_id,content=content)
    comment.save()
    if to_comment_id == 0:
        new_msg = UserMessage(owner=article.owner,
            content=u'有人评论了您的文章(%s)' % article.title,
            link=reverse('ariticle_detail',args=[article.id]))
        new_msg.save()
    else:
        to_comment = Comment.objects.get(id=to_comment_id)
        new_msg = UserMessage(owner=to_comment.owner,
            content=u'有人评论了您的评论(%s)' % to_comment.content[:30],
            # link=reverse('ariticle_detail',args=[article.id]))
            # link=reverse('ariticle_detail',
            #              kwargs={'article.id':article.id,'comment_page_no':ariticle_detail(article_id).pagination_data.page_no}))
            # link=reverse('ariticle_detail',args=[article.id])+'?comment_page_no='+ current_href
            link=current_href)
        new_msg.save()
    return json_response({})
Example #37
0
 def _error(self, message):
     data = {
         'error': True,
         'message': message
     }
     return json_response(data)
Example #38
0
 def _success(self):
     data = {
         'error': False,
         'success': True
     }
     return json_response(data)