예제 #1
0
파일: apis.py 프로젝트: xixi-sq/zbm1
def login(request):
    '''登陆'''

    # 是否用account_name待定,没有设置唯一键
    print('----------', request.META.get('HTTP_AUTHORIZATION'))
    # print(request.META)

    account_name = request.POST.get('account_name')
    user_password = request.POST.get('user_password')

    user = User.objects.filter(account_name=account_name).first()

    if not user:
        return render_json(code=100, data=None, message='用户名错误')
    password = user.user_password
    if user_password == password:

        token = create_token(user.id)
        result = {
            'code': 1,
            'data': None,
            'message': '验证成功',
            'token': token,
        }

        return HttpResponse(json.dumps(result))
    else:
        return render_json(code=0, data=None, message='密码错误')
예제 #2
0
def yourname(request):
    name = request.POST.get("username")

    if name == "moson":
        return render_json(data="你好,Moson")
    else:
        return render_json(code=errors.PHONE_NUM_ERR)
예제 #3
0
파일: apis.py 프로젝트: nz1901/swiper
def submit_vcode(request):
    """通过验证码登录、注册"""
    # 用户提交收到短信验证, 接收之后,和刚才发送的短信验证做对比
    # 如果正确,就可以登录注册, 不正确,返回错误信息
    phone = request.POST.get('phone')
    vcode = request.POST.get('vcode')

    # 从缓存中获取vcode
    key = keys.VCODE % phone
    cached_vcode = cache.get(key)
    print('vcode:', vcode)
    print('cached_vcode', cached_vcode)
    if vcode and vcode == cached_vcode:
        # 可以登录或注册
        # app的登录注册非常简单. 如果是第一次登录,那就注册一个新用户.
        # 如果在数据库中已经存在这个用户
        # try:
        #     user = User.objects.get(phonenum=phone)
        # except User.DoesNotExist:
        #     # 找不到用户说明是注册
        #     user = User.objects.create(phonenum=phone, nickname=phone)
        # User.objects.get_or_create()
        # 使用get_or_create进行优化
        user, _ = User.objects.get_or_create(phonenum=phone,
                                             defaults={'nickname': phone})
        # 把用户的id写入session
        request.session['uid'] = user.id
        info_logger.info(f'user {user.nickname} 登录')
        return render_json(data=user.to_dict(exclude='id', ))
    else:
        error_logger.error('验证码错误')
        return render_json(code=errors.VCODE_ERROR, data='验证码错误')
예제 #4
0
def check_vcode(request: HttpRequest):
    '''进行验证并且进行登录注册'''
    phonenum = request.POST.get('phonenum')
    vcode = request.POST.get('vcode')  # 存在用户未提交vcode状态;
    # # 从缓存取出验证码cache.get('Key')
    cached_vcode = cache.get(keys.VCODE_KEY % phonenum)
    # 存在用户未提交vcode状态解决方案:vcode\cache_vcode为空并且相等;
    if vcode and cached_vcode and vcode == cached_vcode:
        # 进行登录或者注册操作,需要判断是否注册过,或者判断用户是否已在登录状态
        try:
            # 查询用户,如果用户没有注册,需要进行判断
            user = User.objects.get(phonenum=phonenum)
        except User.DoesNotExist:
            # 如果不存在,则需要进行注册
            user = User.objects.create(
                phonenum=phonenum,
                nickname=phonenum  # 可随机生成,现在昵称作为手机号
            )
        # 记录至日志文件
        info_logs.info('User(%s) login in ' % (user.id))
        # 记录用户ID,并将用户信息传给服务端
        request.session['uid'] = user.id
        return render_json(data=user.to_dict(), code=OK)
    else:
        return render_json(data=None, code=AVILD_VCODE)
예제 #5
0
def submit_code(request):
    phonenum = request.POST.get('phonenum')
    vcode = request.POST.get('vcode')

    # 检查验证码是否正确
    key = keys.VCODE_K % phonenum
    cache_code = rds.get(key)

    # 验证码正确时...
    if vcode and vcode == cache_code:
        user_num = User.objects.filter(phonenum=phonenum).count()
        # 如果验证码正确并且已有帐号时...
        if user_num == 1:
            user = User.objects.filter(phonenum=phonenum)[0]
            inf_log.info(f'User Login:{user.id}/{user.phonenum}')

            request.session['uid'] = user.id

            return render_json(data=user.to_dict())

        # 如果验证码正确 没有帐号时...
        elif user_num == 0:
            # 添加 用户
            user = User.objects.create(phonenum=phonenum, nickname=phonenum)
            # 添加 用户资料
            profile = Profile.objects.create(id=user.id)
            # 日志
            inf_log.info(f'User Register:{user.id}/{user.phonenum}')
            # 设置session
            request.session['uid'] = user.id

            return render_json(data=user.to_dict())
    # 验证码错误时...
    else:
        raise errors.VcodeErr('验证码错误')
예제 #6
0
def login(request):
    """
    登录和注册接口


    :param request:
    :return:

    """
    phone_num = request.POST.get('phone_num', '')
    code = request.POST.get('code', '')
    phone_num = phone_num.strip()
    code = code.strip()

    cache_code = cache.get(
        cache_keys.VERIFY_CODE_CACHE_PREFIX.format(phone_num))

    if cache_code != code:
        return render_json(code=errors.VERIFY_CODE_ERR)

    # user, created = User.objects.get_or_create(phonenum=phone_num)

    try:
        user = User.objects.get(pk=1)
    except User.DoesNotExist:
        user = User.objects.create()

    request.session['uid'] = user.id

    #token认证方式
    # token =user.get_or_create_token()
    # data ={'token':token}
    # return render_json(data=data)

    return render_json(data=user.to_dict())
예제 #7
0
파일: apis.py 프로젝트: nz1901/swiper
def edit_profile(request):
    """修改个人资料、及交友资料"""
    # 定义两个form表单的实例对象
    user_form = forms.UserForm(request.POST)
    profile_form = forms.ProfileForm(request.POST)

    # 检查user_form和profile_form
    if not user_form.is_valid() or not profile_form.is_valid():
        # 返回错误信息.
        form_errors = {}
        form_errors.update(user_form.errors)
        form_errors.update(profile_form.errors)
        return render_json(code=errors.PROFILE_ERROR, data=form_errors)

    # 如果form表单提交的数据没问题
    # 更新user和profile
    uid = request.uid
    # user_form.cleaned_data本身就是一个字典.可以使用**进行解包
    User.objects.filter(id=uid).update(**user_form.cleaned_data)

    # 更新或者创建profile
    # 注意: profile和user是一对一的关系, 创建profile的时候,为了满足一对一的关系.
    #  必须保证创建出来的profile的id和这个profile对应的user的id是一致.
    print(type(profile_form.cleaned_data))
    print(profile_form.cleaned_data)
    profile, _ = Profile.objects.update_or_create(
        id=uid, defaults=profile_form.cleaned_data)
    # 更新缓存的数据
    profile_key = keys.PROFILE % uid
    user_key = keys.OBJECT % (User.__name__, uid)
    cache.delete_many(profile_key, user_key)
    return render_json()
예제 #8
0
 def process_exception(self, request, exception):
     if isinstance(exception, (LogicException, LogicError)):
         return render_json(code=exception.code)
     else:
         error_info = traceback.format_exc()
         err_logger.error(error_info)
         return render_json(code=-1)
예제 #9
0
def login(request):
    phone_num = request.POST.get('phone_num', '')
    code = request.POST.get('code', '')

    phone_num = phone_num.strip()
    code = code.strip()

    # 1、检查 验证码
    cached_code = cache.get(config.VERIFY_CODE_CACHE_PREFIX % phone_num)
    if cached_code != code:
        return render_json(code=errors.VerifyCodeError.code)

    # 2、登录或注册
    # try:
    #     user = User.get(phonenum=phone)
    # except User.DoesNotExist:
    #     user = User.objects.create(phonenum=phone)
    #     # 创建用户的同时,使用 user.id 创建 Profile 对象,建立一对一的关联
    #     Profile.objects.create(id=user.id)

    user, created = User.get_or_create(phonenum=phone_num)
    request.session['uid'] = user.id

    logger.info('user.login, uid:%s' % user.id)

    return render_json(data=user.to_dict())
예제 #10
0
파일: apis.py 프로젝트: nz1901/swiper
def superlike(request):
    sid = int(request.GET.get('sid'))
    uid = request.uid
    flag = logics.superlike(uid, sid)
    rds.zincrby(config.TOP_N, config.SUPERLIKE_SCORE, keys.TOP_N_KEY % sid)
    if flag:
        return render_json(data={'matched': True})
    return render_json(data={'matched': False})
예제 #11
0
def superlike(request):
    user = request.user
    sid = request.POST.get('sid')
    if sid is None:
        return render_json(code=errors.SID_ERR)

    matched = logics.superlike_someone(user.id, int(sid))
    return render_json(data={'matched': matched})
예제 #12
0
파일: api.py 프로젝트: wyx123654/swiper
def get_vcode(request):
    # .GET  .POST .COOKIES .session .FILES .META
    phonenum = request.GET.get('phonenum')
    #     发送验证码,并且检查是否发送成功
    if logics.send_vcode(phonenum):
        return render_json()
    else:
        return render_json(code=stat.VCODE_ERR)
예제 #13
0
파일: api.py 프로젝트: Hy-Oy/Swipter
def set_profile(request):
    user = request.user
    form = ProfileForm(data=request.POST, instance=user.profile)
    if form.is_valid():
        form.save()
        return render_json()
    else:
        return render_json(data=form.errors)
예제 #14
0
def get_vcode(request: HttpRequest):
    '''获取短信验证码'''
    # 获取客户端请求GET请求提交的数据
    phonenum = request.GET.get("phonenum", )
    # 发送验证码,并检查是否发送成功:
    if logics.send_vcode(phonenum):
        return render_json(data=None, code=OK)
    else:
        return render_json(data=None, code=VCODE_ERR)
예제 #15
0
def get_vcode(request):
    phonenum = request.POST.get('phonenum')
    if logics.is_phonenum(phonenum):
        #发送验证码
        logics.send_vcode(phonenum)
        print('=========')
        return render_json()
    else:
        print('====时报=====')
        return render_json(code=errors.PHONENUM_ERR)
예제 #16
0
def set_profile(request):
    ''''''
    form = ProfileForm(request.POST)
    if form.is_valid():
        profile = form.save(commit=False)
        profile.id = request.session['uid']
        profile.save()
        return render_json()
    else:
        return render_json(form.errors, errors.PROFILE_ERR)
예제 #17
0
def dislike(request):
    user = request.user
    sid = request.POST.get('sid')
    if sid is None:
        return render_json(code=errors.SID_ERR)

    sid = int(sid)

    Swiped.swipe(uid=user.id, sid=sid, mark='dislike')

    return render_json()
예제 #18
0
파일: api.py 프로젝트: zuoliang-web/test
def send_mes():
    if request.method == 'POST':
        phone = request.form.get('phone')
        code_key = str(code_status.SENDMES_KEY % phone)
        if session.get(code_key):
            return render_json({'code': '1000'})
        msg = logics.send_mes(phone)
        if msg:
            return render_json({'code': 'ok'})
        else:
            return render_json({'code': '1001'})
예제 #19
0
파일: api.py 프로젝트: Eric-jxl/swiper
def submit_phone(request):
    '''提交手机号,发送验证码'''
    phonenum = request.POST.get('phonenum')

    if is_phonenum(phonenum):
        # 向短信平台发送验证码
        if send_vcode(phonenum):
            return render_json()
        else:
            return render_json(code=errors.PlatformErr.code)
    else:
        return render_json(code=errors.PhoneErr.code)
예제 #20
0
def submit_phone(request):
    """发送验证码"""

    phone_num = request.POST.get('phonenum')
    if is_phone_num(phone_num):
        if send_Vcode(phone_num=phone_num):
            return render_json(data={
                'msg': 'OK',
            })


        return render_json(code=errors.PlatformError.code)
    return render_json(code=errors.PhoneError.code)
예제 #21
0
파일: apis.py 프로젝트: yinhu0329/swiper
def submit_phone(request):
    """获取短信验证码"""
    phone = request.POST.get('phone')
    # 验证手机号格式
    result = re.match(r'^1[3456789]\d{9}', phone)

    if not result:
        return render_json(code=errors.PHONE_ERROR, data='手机格式有误')
    # 发送验证码
    flag = send_sms(phone)
    if flag:
        return render_json(data="手机验证码发送成功")
    else:
        return render_json(code=errors.SEND_VCODE_ERROR, data='手机验证码发送失败')
예제 #22
0
def set_profile(request):
    """修改个人资料"""
    # 表单验证
    form_data = FormProfile(request.POST)
    # 如果验证没有问题

    if form_data.is_valid():
        # 只保存,不提交
        profile = form_data.save(commit=False)
        profile.id = request.user.id
        profile.save()
        return render_json()

    return render_json(data=form_data.errors, code=errors.ProfileError.code)
예제 #23
0
def like(request):

    user = request.user

    sid = request.POST.get('sid')

    if sid is None:
        return render_json(code=errors.SDI_ERR)

    sid = int(sid)

    matched = logics.like_someone(uid=user.id, sid=sid)

    return render_json(data={'matched': matched})
예제 #24
0
def set_org(request):
    '''新增组织'''
    orgForm = forms.OrgForm(request.POST)

    if not orgForm.is_valid():
        return render_json(code=0, message='org信息填写不正确')

    #获取
    # print(orgForm.cleaned_data)

    #保存
    org = orgForm.save()

    return render_json(code=1, data=orgForm.cleaned_data, message='org录入成功')
예제 #25
0
def submit_vcode(request):
    """提交验证码进行注册登录"""
    phone_num = request.POST.get('phonenum')

    vcode = request.POST.get('vcode')
    if vcode == cache.get(keys.VCode % phone_num):
        user, _ = User.get_or_create(phonenum=phone_num, nickname=phone_num)
        # 记录登录状态
        request.session['uid'] = user.id
        # 记录登录日志
        info_log.info(f'uid = {user.id}')
        return render_json(data=user.to_dict())

    return render_json(code=errors.VcodeError.code)
예제 #26
0
 def process_request(self, requset):
     ''' '''
     if requset.path in self.AUTH_URL_WHITE_LIST:
         return
     ''' '''
     uid = requset.session.get('uid')
     if uid:
         try:
             requset.user = User.objects.get(id=uid)
             return
         except User.DoesNotExist:
             return render_json(code=errors.USER_NOT_EXIST)
     else:
         return render_json(code=errors.LOGIN_REQIRED)
예제 #27
0
def set_profile(request):
    form = ProfileForm(request.POST)
    if form.is_valid():
        profile = form.save(commit=False)  # 未添加到数据库  但得到profile模型对象
        profile.id = request.user.id
        profile.save()
        #数据发生变化后需要更新缓存

        key = keys.PROFILE % request.user.id
        profile_data = profile.to_dict('vibration', 'only_matche', 'auto_play')
        cache.set(key, profile_data)

        return render_json()
    else:
        return render_json(form.errors, code=errors.ProfileErr.code)
예제 #28
0
파일: api.py 프로젝트: Eric-jxl/swiper
def submit_vcode(request):
    '''提交验证码,进行登录注册'''
    phone = request.POST.get('phonenum')
    vcode = request.POST.get('vcode')

    # 从缓存取出验证码,并进行验证
    cached_vcode = cache.get(keys.VCODE % phone)
    if vcode == cached_vcode:
        # 执行登录、注册
        user, _ = User.get_or_create(phonenum=phone, nickname=phone)
        inf_log.info(f'uid = {user.id}')
        request.session['uid'] = user.id
        return render_json(data=user.to_dict())
    else:
        return render_json(code=errors.VcodeErr.code)
예제 #29
0
def verify_phone(request):
    """
    验证手机号
    :param request:
    :return:
    """
    phone_num = request.POST.get('phone_num', '')
    phone_num = phone_num.strip()

    if utils.is_phone_num(phone_num):
        if logic.send_verify_code(phone_num):
            return render_json()
        else:
            return render_json(code=errors.SmsSendError.code)

    return render_json(code=errors.PhoneNumError.code)
예제 #30
0
파일: apis.py 프로젝트: gz-1901/swiper
def upload_avatar(request):
    user = request.user
    avatar = request.FILES.get('avatar')

    # file_name = 'avatar-{}'.format(int(time.time()))
    #
    # # 1、先将文件上传到本地服务器
    #
    # # file_path = os.path.join(settings.MEDIA_ROOT, file_name)
    # #
    # # with open(file_path, 'wb+') as destination:
    # #     for chunk in avatar.chunks():
    # #         destination.write(chunk)
    #
    # file_path = logics.upload_avatar(file_name, avatar)
    #
    # # 2、将本地文件上传到七牛云
    # ret = logics.upload_qiniuyun(file_name, file_path)
    #
    # if ret:
    #     return render_json()
    # else:
    #     return render_json(code=errors.AVATAR_UPLOAD_ERR)

    logics.async_upload_avatar.delay(user, avatar)

    return render_json()