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='密码错误')
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)
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='验证码错误')
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)
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('验证码错误')
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())
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()
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)
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())
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})
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})
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)
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)
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)
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)
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)
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()
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'})
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)
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)
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='手机验证码发送失败')
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)
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})
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录入成功')
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)
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)
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)
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)
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)
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()