def post(self, request): #如何取数据 json_str = request.body json_obj = json.loads(json_str) username = json_obj['username'] email = json_obj['email'] phone = json_obj['phone'] password_1 = json_obj['password_1'] password_2 = json_obj['password_2'] sms_num = json_obj['sms_num'] #校验验证码 old_code = cache.get('sms_%s' % (phone)) if not old_code: result = {'code': 10113, 'error': 'code is wrong!'} return JsonResponse(result) if int(sms_num) != old_code: result = {'code': 10114, 'error': 'code is wrong!'} return JsonResponse(result) #TODO 参数检查 if len(username) > 11: result = {'code': 10100, 'error': 'The username is wrong~'} return JsonResponse(result) #检查用户名是否可用 old_user = UserProfile.objects.filter(username=username) if old_user: result = {'code': 10101, 'error': 'The username is already exist~'} return JsonResponse(result) #密码处理 if password_1 != password_2: result = {'code': 10102, 'error': 'The password is error~'} return JsonResponse(result) p_m = hashlib.md5() p_m.update(password_1.encode()) password_m = p_m.hexdigest() #插入数据 try: user = UserProfile.objects.create(username=username, password=password_m, email=email, phone=phone, nickname=username) except Exception as e: print('create error is %s' % (e)) result = {'code': 10103, 'error': 'The username is already exist~'} return JsonResponse(result) #签发jwt token = make_token(username) return JsonResponse({ 'code': 200, 'username': username, 'data': { 'token': token.decode() } })
def post(self, request): json_str = request.body print(json_str) json_obj = json.loads(json_str) print(json_obj) print(type(json_obj)) if not json_str: result = {'code': 10100, 'error': 'no data'} return JsonResponse(result) username = json_obj['username'] password_1 = json_obj['password_1'] password_2 = json_obj['password_2'] email = json_obj['email'] phone = json_obj['phone'] sms_num = json_obj['sms_num'] # 校验验证码 code_cache_key = 'sms_%s' % phone old_code = cache.get(code_cache_key) if old_code != int(sms_num): return JsonResponse({'code': 10111, 'error': 'The code is error'}) # 校验用户名是否可用 old_users = UserProfile.objects.filter(username=username) if old_users: result = { 'code': 10102, 'error': 'The username is already existed' } return JsonResponse(result) if password_1 != password_2: result = {'code': 10101, 'error': 'The password is not same'} return JsonResponse(result) # 密码做mds m = hashlib.md5() m.update(password_1.encode()) # 创建用户 - UserProfile插入数据 try: user = UserProfile.objects.create(username=username, nickname=username, password=m.hexdigest(), email=email) except Exception as e: print('create user error is %s' % e) result = { 'code': 10103, 'error': 'The username is already existed' } return JsonResponse(result) # 签发token token = make_token(username) return JsonResponse({ 'code': 200, 'username': username, 'data': { 'token': token.decode() } })
def post(self, request): json_str = request.body json_obj = json.loads(json_str) username = json_obj['username'] email = json_obj['email'] phone = json_obj['phone'] password_1 = json_obj['password_1'] password_2 = json_obj['password_2'] sms_num = json_obj['sms_num'] # 校验验证码 cache_key = 'sms_%s' % (phone) old_code = cache.get(cache_key) # 验证码过期 if not old_code: result = {'code': 10113, 'error': 'code is wrong'} return JsonResponse(result) # 比较 if int(sms_num) != old_code: result = {'code': 10114, 'error': 'code is wrong2'} return JsonResponse(result) if len(username) > 11: result = {'code': 10100, 'error': 'username is too long'} return JsonResponse(result) # 用户名是否可用 old_user = UserProfile.objects.filter(username=username) if old_user: result = {'code': 10101, 'error': 'username is exist'} return JsonResponse(result) # 处理密码 if password_1 != password_2: result = {'code': 10102, 'error': 'password is error'} return JsonResponse(result) md5 = hashlib.md5() md5.update(password_1.encode()) password_m = md5.hexdigest() # 插入数据 try: user = UserProfile.objects.create(username=username, password=password_m, email=email, phone=phone, nickname=username) except Exception as e: print('create error is %s' % e) result = {'code': 10101, 'error': 'username is exist'} return JsonResponse(result) # 签发jwt token = make_token(username) return JsonResponse({ 'code': 200, 'username': username, 'data': { 'token': token.decode() } })
def post(self,request): """ 1. 获取浏览器前端传递的数据 2. 验证前端传递的数据。 3. 判断用户是不是在我们数据库中存在。 4. 判断用户密码是否合法。对密码进行处理 5. 创建用户。生成token.返回给前端。 """ json_obj = request.body if not json_obj: return JsonResponse({'code':201,'error':'no content!'}) json_dict = json.loads(json_obj) # 验证用户名 username = json_dict.get('username',None) if not username: return JsonResponse({'code':202,'error':'no username'}) # 获取邮箱。获取密码 email = json_dict.get('email',None) if not email: return JsonResponse({'code':203,'error':'no email'}) password_1 = json_dict.get('password_1',None) password_2 = json_dict.get('password_2',None) if not password_1 or not password_2: return JsonResponse({'code':204,'error':'no password'}) # 密码1 和 密码2 需要一致 if password_1 != password_2: return JsonResponse({'code':205,'error':'different password!'}) old_user = UserProfile.objects.filter(username=username) if old_user: return JsonResponse({'code':206,'error':'user already existed!'}) m = hashlib.md5() m.update(password_1.encode()) sign = info = " " try: UserProfile.objects.create( username=username, nickname=username, password=m.hexdigest(), sign=sign, info=info, email=email ) except Exception as e: # logging return JsonResponse({'code':207,'error':'server is busy!'}) # 生成token token = make_token({'username':username}) return JsonResponse({ 'code':200, 'username':username, 'data':{ 'token':token.decode() } })
def login(request): if request.method == 'GET': return render(request, 'user/login.html') elif request.method == 'POST': if not request.body: code = 202 error = '请求为空' return JsonResponse({'code': code, 'error': error}) try: json_obj = json.loads(request.body.decode()) except Exception as e: code = '' error = '' return JsonResponse({'code': code, 'error': error}) try: phonenumber = json_obj['phonenumber'] password = json_obj['password'] checked = json_obj.get('checked') except Exception as e: code = 210 error = '请求关键字缺失' return JsonResponse({'code': code, 'error': error}) if not phonenumber: code = 203 error = '请求中未提交用户名' return JsonResponse({'code': code, 'error': error}) if not password: code = 205 error = '请求中未提交密码' return JsonResponse({'code': code, 'error': error}) old_user = UserProfile.objects.filter(phonenumber=phonenumber) if not old_user: code = 208 error = '用户名不存在' return JsonResponse({'code': code, 'error': error}) p_m = hashlib.md5(mysettings.Token_key) p_m.update(password.encode()) if old_user[0].password != p_m.hexdigest(): code = 209 error = '提交的密码不正确' return JsonResponse({'code': code, 'error': error}) # 登录成功 expire = 7 * 3600 * 24 if checked else 3600 * 24 token = make_token(old_user[0], expire) code = 200 data = {"token": token} return JsonResponse({'code': code, 'phonenumber': old_user[0].phonenumber, 'data': data})
def users(request, username=None): if request.method == 'GET': # 取数据 # /v1/users/***?info=1 if username: try: user = UserProfile.objects.get(username=username) except UserProfile.DoesNotExist: user = None if not user: result = {'code': 208, 'error': 'The user is not exist'} return JsonResponse(result) if request.GET.keys(): data = {} for k in request.GET.keys(): # 数据库中最好有默认值 if hasattr(user, k): data[k] = getattr(user, k) result = {'code': 200, 'username': username, 'data': data} return JsonResponse(result) else: # 证明指定查询用户全量数据 result = { 'code': 200, 'username': username, 'data': { 'info': user.info, 'sign': user.sign, 'nickname': user.nickname, 'avatar': str(user.avatar) } } return JsonResponse(result) else: # 全部用户数据 all_users = UserProfile.objects.all() res = [] for u in all_users: dic = {} dic['username'] = u.username dic['email'] = u.email res.append(dic) result = {'code': 200, 'data': res} return JsonResponse(result) elif request.method == 'POST': # 注册用户 json_str = request.body if not json_str: # 前端异常提交数据 result = {'code': '202', 'error': 'Please POST'} return JsonResponse(result) # 序列化JSON字符串 json_obj = json.loads(json_str) username = json_obj.get('username') email = json_obj.get('email') password_1 = json_obj.get('password_1') password_2 = json_obj.get('password_2') if not username: # 判断用户名是否为空 result = {'code': 203, 'error': 'Please give name'} return JsonResponse(result) if not email: # 判断邮箱是否为空 result = {'code': 204, 'error': 'Please give email'} return JsonResponse(result) if not password_1 or not password_2: # 判断两次密码是否有为空 result = {'code': 205, 'error': 'Please give password'} return JsonResponse(result) if password_1 != password_2: # 判断两次密码是否一致 result = {'code': 206, 'error': 'The password is wrong'} return JsonResponse(result) old_user = models.UserProfile.objects.filter(username=username) if old_user: # 判断用户名是否已存在s result = {'code': 207, 'error': 'this username is existed'} return JsonResponse(result) # 对密码进行散列操作 h = hashlib.sha1() h.update(password_1.encode()) try: # 在数据库中创建用户 models.UserProfile.objects.create( username=username, nickname=username, email=email, password=h.hexdigest(), ) except Exception as e: # 创建异常则返回异常信息 print('UserProfile create error i %s' % e) result = {'code': 207, 'error': 'this username is existed'} return JsonResponse(result) # 创建成功则返回一个token信息 token = make_token(username) result = { 'code': 200, 'username': username, 'data': { 'token': token.decode() } } return JsonResponse(result) elif request.method == 'PUT': # 修改用户数据 # 'form enctype=' # 前端返回的JSON格式{'nickname':****, 'sign':***, 'info':***} users = request.user json_str = request.body if not json_str: result = {'code': 202, 'error': 'data null'} return JsonResponse(result) json_obj = json.loads(json_str) nickname = json_obj.get('nickname') if not nickname: # 昵称不能为空 result = {'code': 209, 'error': 'nickname is null'} return JsonResponse(result) sign = json_obj.get('sign', '') info = json_obj.get('info', '') # 存 users.sign = sign users.info = info users.nickname = nickname users.save() result = {'code': 200, 'username': username} return JsonResponse(result) return JsonResponse({'code': 200, 'data': {'username': 1}})
def users(request, username=None): # 获取用户数据 if request.method == 'GET': # /v1/users/kzzf?info=1 获取对象的对应属性---> {'info': 'xxx'} if username: # 具体用户的数据 try: user = UserProfile.objects.get(username=username) except UserProfile.DoesNotExist: user = None if not user: result = {'code': 208, 'error': '用户不存在'} return JsonResponse(result) # 判断有无查询字符串 if request.GET.keys(): data = {} for k in request.GET.keys(): # 判断对象是否有此属性》》》》》》》》》》》》》》》》》 if hasattr(user, k): data[k] = getattr(user, k) result = {'code': 200, 'username': username, 'data': data} return JsonResponse(result) else: # 没有查询字符串,返回前端需要的所有属性 result = {'code': 200, 'username': username, 'data': # user.avatar拿到的是图片对象,str一下拿路径 {'info': user.info, 'sign': user.sign, 'nickname': user.nickname, 'avatar': str(user.avatar)}} return JsonResponse(result) else: # 查询全部用户的数据 all_users = UserProfile.objects.all() res = [] for user in all_users: d = dict() d['username'] = user.username d['email'] = user.email res.append(d) result = {'code': 200, 'data': res} return JsonResponse(result) # 注册用户 elif request.method == 'POST': # 获取前端传递的json数据 json_str = request.body if not json_str: # 前端异常提交:空数据 result = {'code': 202, 'error': 'Please POST data'} return JsonResponse(result) json_obj = json.loads(json_str) username = json_obj.get('username') email = json_obj.get('email') password_1 = json_obj.get('password_1') password_2 = json_obj.get('password_2') if not username: result = {'code': 203, 'error': 'Please give me username'} return JsonResponse(result) if not email: result = {'code': 204, 'error': 'Please give me email'} return JsonResponse(result) if not password_1 or not password_2: result = {'code': 205, 'error': 'Please give me password'} return JsonResponse(result) if password_1 != password_2: result = {'code': 206, 'error': '两次密码不一致'} return JsonResponse(result) old_user = UserProfile.objects.filter(username=username) if old_user: result = {'code': 207, 'error': '用户名已存在'} hash_password = hashlib.sha1() hash_password.update(password_1.encode()) try: UserProfile.objects.create(username=username, nickname=username, email=email, password=hash_password.hexdigest()) except Exception as e: print('新用户创建失败,error=%s' % e) result = {'code': 207, 'error': '用户名已存在'} return JsonResponse(result) # 注册成功,生成token记录登陆状态 token = make_token(username) result = {'code': 200, 'username': username, 'data': {'token': token.decode()}} return JsonResponse(result) # 修改用户数据 /v1/users/<username> elif request.method == 'PUT': user = request.user json_str = request.body if not json_str: result = {'code': 202, 'error': '请上传数据'} return JsonResponse(result) json_obj = json.loads(json_str) nickname = json_obj.get('nickname') if not nickname: result = {'code': 209, 'error': '昵称不能为空'} return JsonResponse(result) sign = json_obj.get('sign', '') info = json_obj.get('info', '') user.sign = sign user.info = info user.nickname = nickname user.save() result = {'code': 200, 'username': username} return JsonResponse(result)
def users(request, username=None): if request.method == 'GET': all_users = UserProfile.objects.all() res = [] for u in all_users: d = {} d['username'] = u.username d['email'] = u.email res.append(d) result = {'code': 200, 'data': res} return JsonResponse(result) elif request.method == 'POST': json_str = request.body if not json_str: result = {'code': '202', 'error': 'Please POST data'} return JsonResponse(result) json_obj = json.loads(json_str) username = json_obj.get('username') email = json_obj.get('email') password_1 = json_obj.get('password_1') password_2 = json_obj.get('password_2') if not username: result = {'code': 203, 'error': 'Please give me uesrname'} return JsonResponse(result) if not email: result = {'code': 204, 'error': 'Please give me email'} return JsonResponse(result) if not password_1 or not password_2: result = {'code': 205, 'error': 'Please give me password'} return JsonResponse(result) if password_1 != password_2: result = {'code': 206, 'error': 'The password is wrong!'} return JsonResponse(result) #检查用户是否存在 old_user = UserProfile.objects.filter(username=username) if old_user: result = {'code': 207, 'error': 'The username is existed!!!'} return JsonResponse(result) h_p = hashlib.sha1() h_p.update(password_1.encode()) try: UserProfile.objects.create(username=username, nickname=username, email=email, password=h_p.hexdigest()) except Exception as e: print('UserProfile create error is %s' % (e)) result = {'code': 207, 'error': 'The username is existed!!!'} return JsonResponse(result) token = make_token(username) result = { 'code': 200, 'username': username, 'data': { 'token': token.decode() } } return JsonResponse(result) elif request.method == 'PUT': pass users = UserProfile.objects.filter(username=username) if not users: result = {'code': 208, 'error': 'The user is not existed'} return JsonResponse(result) json_str = request.body if not json_str: result = {'code': 202, 'error': 'Please give me data'} return JsonResponse(result) json_obj = json.loads(json_str) nickname = json_obj.get('nickname') if not nickname: result = {'code': 209, 'error': 'nickname is none!'} return JsonResponse(result) sign = json_obj.get('sing', '') info = json_obj.get('info', '') users[0].sign = sign users[0].info = info users[0].nickname = nickname users[0].save() result = {'code': 200, 'username': username} return JsonResponse(result) return JsonResponse({'code': 200, 'data': {'username': 1}})
def users(request, username=None): if request.method == 'GET': if username: try: user = models.User.objects.get(username=username) except models.User.DoesNotExist: user = None if not user: result = {'code': 208, 'error': 'The user is not existed'} return JsonResponse(result) # 判断查询字符串 if request.GET.keys(): data = {} for k in request.GET.keys(): if hasattr(user, k): data[k] = getattr(user, k) result = {'code': 200, 'username': username, 'data': data} return JsonResponse(result) else: # 证明指定查询用户全量数据 result = { 'code': 200, 'username': username, 'data': { 'info': user.info, 'sign': user.sign, 'nickname': user.nickname, 'avatar': str(user.avatar) } } return JsonResponse(result) else: # 获取全部用户的数据 all_users = models.User.objects.all() print(all_users) res = [] for u in all_users: d = {} d['username'] = u.username d['email'] = u.email res.append(d) result = {'code': 200, 'data': res} return JsonResponse(result) elif request.method == 'POST': # 获取json数据 json_str = request.body if not json_str: result = {'code': 202, 'error': 'Please POST data'} return JsonResponse(result) # 反序列化json_str json_obj = json.loads(json_str) username = json_obj.get('username') email = json_obj.get('email') password1 = json_obj.get('password_1') password2 = json_obj.get('password_2') if not username: result = {'code': 203, 'error': 'Please give me username'} return JsonResponse(result) if not email: result = {'code': 204, 'error': 'Please give me email'} return JsonResponse(result) if not password1 or not password2: result = {'code': 205, 'error': 'Please give me password'} return JsonResponse(result) if password1 != password2: result = {'code': 206, 'error': 'The password is wrong'} return JsonResponse(result) # 检查用户是否存在 old_user = models.User.objects.filter(username=username) if old_user: result = {'code': 207, 'error': 'The username is existed'} return JsonResponse(result) h_p = hashlib.sha1() h_p.update(password1.encode()) try: models.User.objects.create(username=username, nickname=username, email=email, password=h_p.hexdigest()) except Exception as e: print('User create error is %s' % e) result = {'code': 207, 'error': 'The username is existed'} return JsonResponse(result) # make_token token = make_token(username) result = { 'code': 200, 'username': username, 'data': { 'token': token.decode() } } return JsonResponse(result) elif request.method == 'PUT': # print(dir(request)) user = request.user # print(user) json_str = request.body # 判断前端是否给了json串 if not json_str: result = {'code': 202, 'error': 'Please Give Data'} return JsonResponse(result) json_obj = json.loads(json_str) nickname = json_obj.get('nickname') # 昵称不能为空 if not nickname: result = {'code': 209, 'error': 'Please Give nickname'} return JsonResponse(result) sign = json_obj.get('sign', '') info = json_obj.get('info', '') user.sign = sign user.info = info user.nickname = nickname user.save() result = {'code': 200, 'username': username} return JsonResponse(result)
def users(request, username=None): if request.method == 'GET': #获取用户数据 if username: #拿指定用户 try: user = UserProfile.objects.get(username=username) except Exception as e: user = None if not user: result = {'code': 208, 'error': 'no user'} return JsonResponse(result) #检查是否有查询字符串 if request.GET.keys(): #查询指定字段 data = {} for k in request.GET.keys(): if hasattr(user, k): v = getattr(user, k) if k == 'avatar': data[k] = str(v) else: data[k] = v result = {'code': 200, 'username': username, 'data': data} return JsonResponse(result) else: #全量查询( pwd emi不给) result = { 'code': 200, 'username': username, 'data': { 'info': user.info, 'sign': user.sign, 'avatar': str(user.avatar), 'nickname': user.nickname } } return JsonResponse(result) return JsonResponse({ 'code': 200, 'error': 'wolaila GET %s' % (username) }) else: return JsonResponse({'code': 200, 'error': 'wolaila GET'}) elif request.method == 'POST': #创建用户 #前端注册页面 5000register #校验前端提交的基础数据 json_str = request.body if not json_str: result = {'code': 201, 'error': 'give me data'} return JsonResponse(result) #load回来是个字典,所以要 把字典中的字段取出来 json_obj = json.loads(json_str) username = json_obj.get('username') if not username: result = {'code': 200, 'error': 'give me username'} return JsonResponse(result) email = json_obj.get('email') if not email: result = {'code': 203, 'error': 'give me email'} return JsonResponse(result) password_1 = json_obj.get('password_1') password_2 = json_obj.get('password_2') if not password_1 or not password_2: result = {'code': 204, 'error': 'give me pwd'} return JsonResponse(result) if password_1 != password_2: result = {'code': 500, 'error': 'not same pwd'} return JsonResponse(result) #一定要优先查询当前用户名是否存在 #用get查询一定要try一下 old_user = UserProfile.objects.filter(username=username) if old_user: result = {'code': 206, 'error': 'is existed'} return JsonResponse(result) #密码处理 md5 hash m = hashlib.md5() m.update(password_1.encode()) #charfield 尽量避免使用null=true 都完成了之后再做数据的插入 sign = info = '' try: UserProfile.objects.create(username=username, nickname=username, password=m.hexdigest(), sign=sign, info=info, email=email) except Exception as e: result = {'code': 207, 'error': 'is busy'} return JsonResponse(result) #make token 用户注册成功 生成token 返给前端 token = make_token(username) #正常返回前端 result = { 'code': 200, 'username': username, 'data': { 'token': token.decode() } } return JsonResponse(result) elif request.method == 'PUT': #更新数据 #此头可获取前端传来的token #meta可拿去http协议原生头,meta也是类字典对象,可使用字典相关方法 ,有可能被django重命名 request.META.get('HTTP_AUTHORIZATION') user = request.user print(111111111) print(user) json_str = request.body if not json_str: result = {'code': 209, 'error': 'p json'} return JsonResponse(result) json_obj = json.loads(json_str) if 'sign' not in json_obj: result = {'code': 210, 'error': 'no sign'} return JsonResponse(result) if 'info' not in json_obj: result = {'code': 211, 'error': 'no info'} return JsonResponse(result) sign = json_obj.get('sign') info = json_obj.get('info') request.user.sign = sign request.user.info = info request.user.save() result = {'code': 200, 'username': request.user.username} return JsonResponse(result) else: raise return JsonResponse({'code': 200})
def users(request, username=None): if request.method == 'GET': # 取数据 if username: # 具体用户的数据 # /v1/users/guoxiaonao?info=1&email=1 {'info':xxx, 'email':xxx} try: user = UserProfile.objects.get(username=username) except UserProfile.DoesNotExist: user = None if not user: # 用户不存在 result = {'code': 208, 'error': 'The user is not existed'} return JsonResponse(result) # 判断查询字符串 if request.GET.keys(): # 证明有查询字符串 data = {} for k in request.GET.keys(): # 数据库中最好是有非空默认值 if hasattr(user, k): data[k] = getattr(user, k) result = {'code': 200, 'username': username, 'data': data} return JsonResponse(result) else: # 证明指定查询用户全量数据 result = { 'code': 200, 'username': username, 'data': { 'info': user.info, 'sign': user.sign, 'nickname': user.nickname, 'avatar': str(user.avatar) } } return JsonResponse(result) else: # 全部用户的数据 all_users = UserProfile.objects.all() res = [] for u in all_users: d = {} d["username"] = u.username d["email"] = u.email res.append(d) result = {"code": 200, "data": res} return JsonResponse(result) elif request.method == "POST": json_str = request.body.decode() if not json_str: result = {"code": 202, "error": "Please POST data"} return JsonResponse(result) json_obj = json.loads(json_str) username = json_obj.get("username") email = json_obj.get("email") password_1 = json_obj.get("password_1") password_2 = json_obj.get("password_2") if not username: result = {"code": 203, "error": "Please give me a username"} return JsonResponse(result) if not email: result = {"code": 204, "error": "Please give me a email"} return JsonResponse(result) if not password_1 or not password_2: result = {"code": 205, "error": "Please give me password"} return JsonResponse(result) if password_1 != password_2: result = {"code": 206, "error": "The password is wrong"} return JsonResponse(result) old_user = UserProfile.objects.filter(username=username) if old_user: result = {"code": 207, "error": "The username is existed!!!"} return JsonResponse(result) # 将密码进行哈希运算加密 h_p = hashlib.sha1() h_p.update(password_1.encode()) try: UserProfile.objects.create(username=username, nickname=username, email=email, password=h_p.hexdigest()) except Exception as e: print("UseProfile create error is %s" % (e)) result = {"code": 207, "error": "The username is existed!!!"} return JsonResponse(result) token = make_token(username) result = { "code": 200, "username": username, "data": { "token": token.decode() } } return JsonResponse(result) elif request.method == 'PUT': # 修改用户数据 /v1/users/用户名 # 前端返回的json格式{'nickaname': xxx, 'sign':xxx, 'info':xxx} user = request.user json_str = request.body.decode() # 判断前端是否给了json串 if not json_str: result = {'code': 202, 'error': 'Please give me data'} return JsonResponse(result) json_obj = json.loads(json_str) nickname = json_obj.get('nickname') if not nickname: # 昵称不能为空 result = {'code': 209, 'error': 'nickname is none!'} return JsonResponse(result) # sign&info 默认值为空字符串 sign = json_obj.get('sign', '') info = json_obj.get('info', '') # 存 user.sign = sign user.info = info user.nickname = nickname user.save() result = {'code': 200, 'username': username} return JsonResponse(result)
def users(request, username=None): if request.method == "GET": #获取数据,现在这个GET存在两种可能,一种带用户名,一种不带 #/v1/users/@ant?info=1&email=1 {'info':XXX}表示只取某个对象的指定属性 if username: #获取具体用户信息 try: user = UserProfile.objects.get(username=username) except UserProfile.DoesNotExis: user = None if not user: #用户不存在 return JsonResponse({ 'code': 208, 'error': 'The user is not existed' }) # 判断查询字符串 if request.GET.keys(): #证明有查询字符串 data = {} for k in request.GET.keys(): #数据库中最好是非空默认值. if hasattr(user, k): data[k] = getattr(user, k) result = {'code': 200, 'username': username, 'data': data} return JsonResponse(result) else: #证明指定查询用户全量数据 result = { 'code': 200, 'username': username, 'data': { 'info': user.info, 'sign': user.sign, 'nickname': user.nickname, 'avatar': str(user.avatar), } } return JsonResponse(result) else: #全部用户的数据 all_users = UserProfile.objects.all() res = [] for u in all_users: d = {} d['username'] = u.username d['email'] = u.email res.append(d) #通过列表嵌套字典的方式来存储每条记录. return JsonResponse({'code': 200, 'data': res}) elif request.method == "POST": #注册用户 json_str = request.body if not json_str: #前端异常提交,空数据 result = {'code': 202, 'error': 'Please POST data'} return JsonResponse(result) json_obj = json.loads(json_str) username = json_obj.get('username') password_1 = json_obj.get('password_1') password_2 = json_obj.get('password_2') email = json_obj.get('email') if not username: result = {'code': 203, 'error': 'Please give me username'} return JsonResponse(result) if not email: result = {'code': 204, 'error': 'Please give me email'} return JsonResponse(result) if not password_1 or not password_2: return JsonResponse({ 'code': 205, 'error': 'Please give me password' }) if password_1 != password_2: return JsonResponse({ 'code': 206, 'error': 'The password is wrong!' }) # 检查用户是否存在 old_user = UserProfile.objects.filter(username=username) if old_user: return JsonResponse({ 'code': 207, 'error': 'The username is exited!!!' }) # 密码做哈希 password_hash = CodePwd.code_password(password_1) #写入数据库 try: UserProfile.objects.create(username=username, nickname=username, password=password_hash, email=email) except Exception as e: print('UserProfile create error is %s' % e) return JsonResponse({ 'code': 207, 'error': 'The username is exited!!!' }) # make_token,直接登录 token = make_token(username) result = { 'code': 200, 'username': username, 'data': { 'token': token.decode() } } return JsonResponse(result) elif request.method == "PUT": # 修改用户数据 /v1/users/用户名 # 前端返回的json格式{'nickaname': xxx, 'sign':xxx, 'info':xxx} user = request.user # 获取装饰器token验证后的user json_str = request.body # 判断前端是否给了json串 if not json_str: result = {'code': 202, 'error': 'Please give me data'} return JsonResponse(result) json_obj = json.loads(json_str) nickname = json_obj.get('nickname') if not nickname: # 昵称不能为空 result = {'code': 209, 'error': 'nickname is none!'} return JsonResponse(result) # sign&info 默认值为空字符串,允许这两项为空 sign = json_obj.get('sign', '') info = json_obj.get('info', '') # 存 user.sign = sign user.info = info user.nickname = nickname user.save() result = {'code': 200, 'username': username} return JsonResponse(result) elif request.method == "DELETE": user = request.user pass
def users(request, username=None): if request.method == 'GET': # 取数据 # /v1/users/liuxiaoxia?info=1 {'info':xxx} if username: # 具体用户的数据 try: user = UserProfile.objects.get(username=username) except UserProfile.DoesNotExist: user = None if not user: result = {'code': 208, 'error': 'The user is not existed'} return JsonResponse(result) # 判断查询字符串 if request.GET.keys(): # 证明有查询字符串 data = {} for k in request.GET.keys(): # 数据库中最好是有非空默认值 if hasattr(user, k): data[k] = getattr(user, k) result = {'code': 200, 'username': username, 'data': data} return JsonResponse(result) else: # 证明指定查询用户全量数据 result = { 'code': 200, 'username': username, 'data': { 'info': user.info, 'sign': user.sign, 'nickname': user.nickname, 'avatar': str(user.avatar) } } return JsonResponse(result) else: # 全部用户的数据 # UserProfile获取全部用户的数据 all_users = UserProfile.objects.all() res = [] for u in all_users: d = {} d['username'] = u.username d['email'] = u.email res.append(d) print(d) result = {'code': 200, 'data': res} return JsonResponse(result) elif request.method == 'POST': #注册用户 #密码需要SHA-1 hashlib.sha1() -> update -> hexdigest() #获取json数据 json_str = request.body print(json_str) if not json_str: result = {'code': 202, 'error': 'Please POST data'} return JsonResponse(result) #反序列话json_str json_obj = json.loads(json_str) nickname = json_obj.get('nickname', '') email = json_obj.get('email', '') password = json_obj.get('password') if not nickname: result = {'code': 203, 'error': 'Please give me nickname'} return JsonResponse(result) if not email: result = {'code': 204, 'error': 'Please give me email'} return JsonResponse(result) if not password: result = {'code': 205, 'error': 'Please give me password'} return JsonResponse(result) #检查用户是否存在 old_email = UserProfile.objects.filter(email=email) if old_email: #该用户已经注册 result = {'code': 207, 'error': 'The email is existed'} return JsonResponse(result) s1 = hashlib.sha1() s1.update(password.encode()) try: UserProfile.objects.create(nickname=nickname, email=email, password=s1.hexdigest()) except Exception as e: print('UserProfile create error is %s' % (e)) result = {'code': 207, 'error': 'The email is existed'} return JsonResponse(result) #make token token = make_token(email) result = { 'code': 200, 'nickname': nickname, 'email': email, 'data': { 'token': token.decode() } } return JsonResponse(result) elif request.method == 'PUT': #修改用户数据 #前端返回的json格式{'nickname':xxx, 'sign':xxx, 'info':xxx} json_str = request.body #print(json_str) #判断前端是否给了json if not json_str: result = {'code': 202, 'error': 'Please give me data'} return JsonResponse(result) if not username: result = {'code': 203, 'error': 'Please give me username'} return JsonResponse(result) #检查用户是否存在 user = request.user json_obj = json.loads(json_str) nickname = json_obj.get('nickname', '') sign = json_obj.get('sign', '') info = json_obj.get('info', '') if not nickname: #昵称不能为空 result = {'code': 209, 'error': 'nickname is none!'} return JsonResponse(result) #存 user.nickname = nickname user.sign = sign user.info = info user.save() result = {'code': 200, 'username': username} return JsonResponse(result) return JsonResponse({'code': 200, 'username': 1})
def users(request, username=None): #http://127.0.0.1:8000/v1/users GET if request.method == 'GET': #查询数据 if username: #查询具体用户的数据 try: user = UserProfile.objects.get(username=username) except Exception as e: user = None if not user: result = {'code':10108, 'error': 'User is not existed !'} return JsonResponse(result) #判断是否有查询字符串 if request.GET.keys(): #有查询字符串 data = {} # /?nickname=1&sign=1&ppp=1 for k in request.GET.keys(): #判断查询字符串的key 是否在表里有该对应的字段 if k in ['password']: continue if hasattr(user, k): data[k] = getattr(user, k) result = {'code':200, 'username':username, 'data':data} return JsonResponse(result) else: #无查询字符串 result = {'code':200, 'username':username, 'data':{'nickname':user.nickname, 'email':user.email,'sign':user.sign, 'info': user.info,'avatar':str(user.avatar)}} return JsonResponse(result) else: print('---全量---') all_user = UserProfile.objects.all() all_data = [] for u in all_user: d = {'nickname':u.nickname, 'email':u.email, 'sign': u.sign } all_data.append(d) return JsonResponse({'code':200, 'data':all_data}) elif request.method == 'POST': #创建资源/ 注册用户 # 注册用户成功后 签发 token[一天] #用户模块状态码 10100 开始 / 200为正常返回 #{'code': 200/101xx, 'data':xxx, 'error':xxx} #响应json字符串 return JsonResponse({}) print(12123123123) json_str = request.body if not json_str: result = {'code':10100, 'error':'Please give me data'} return JsonResponse(result) json_obj = json.loads(json_str) username = json_obj.get('username') email = json_obj.get('email') password_1 = json_obj.get('password_1') password_2 = json_obj.get('password_2') if not username: result = {'code':10101, 'error':'Please give me username'} return JsonResponse(result) if not email: result = {'code':10102, 'error':'Please give me email'} return JsonResponse(result) if not password_1 or not password_2: result = {'code':10103, 'error':'Please give me password'} return JsonResponse(result) if password_1 != password_2: result = {'code': 10104, 'error':'The password is not same!'} return JsonResponse(result) #检查当前用户名是否可用 old_user = UserProfile.objects.filter(username=username) if old_user: result = {'code': 10105, 'error':'The username is already existed!'} return JsonResponse(result) #密码进行哈希 - md5 p_m = hashlib.md5() p_m.update(password_1.encode()) #创建用户 now = datetime.datetime.now() try: UserProfile.objects.create(username=username,password=p_m.hexdigest(),nickname=username, email=email, login_time=now) except Exception as e: print(e) result = {'code':10106, 'error':'The username is already used!'} return JsonResponse(result) #todo 生成token token = make_token(username, now) result = {'code':200, 'username':username, 'data':{'token':token.decode()}} return JsonResponse(result) elif request.method == 'PUT': #更新用户数据 json_str = request.body if not json_str: result = {'code': 10109, 'error': 'Please give me data'} return JsonResponse(result) json_obj = json.loads(json_str) if 'sign' not in json_obj: result = {'code': 10110, 'error': 'Please give me sign !'} return JsonResponse(result) if 'info' not in json_obj: result = {'code':10111, 'error':'Please give me info'} return JsonResponse(result) if 'nickname' not in json_obj: result = {'code': 10112, 'error': 'Please give me nickname'} return JsonResponse(result) nickname = json_obj['nickname'] sign = json_obj['sign'] info = json_obj['info'] #初级版 # try: # user = UserProfile.objects.get(username=username) # except Exception as e: # result = {'code':10113, 'error':'no user'} # return JsonResponse(result) #获取用户 user = request.user #判断是否要更新 to_update = False if user.nickname != nickname: to_update = True if user.sign != sign: to_update = True if user.info != info: to_update = True if to_update: print('----to updae----') user.nickname = nickname user.sign = sign user.info = info user.save() result = {'code':200, 'username':username} return JsonResponse(result) return HttpResponse('test user')
def register_user(request): response = {} json_str = request.body print('json-str:', json_str) # 数据可用性判断 if not json_str: response['code'] = 10100 response['error'] = '请求中无内容' return JsonResponse(response) try: json_obj = json.loads(json_str) except Exception as e: print(e) response['code'] = 10101 response['error'] = '请求内容格式有问题' return JsonResponse(response) username = json_obj.get('username') gender = json_obj.get('gender') birthday = json_obj.get('birthday') password_1 = json_obj.get('password_1') password_2 = json_obj.get('password_2') if not username: response['code'] = 10102 response['error'] = '请求中未提交用户名' return JsonResponse(response) if not gender: response['code'] = 10103 response['error'] = '请求中未提交性别' return JsonResponse(response) if not birthday: response['code'] = 10104 response['error'] = '请求中未提交生日' return JsonResponse(response) if not password_1 or not password_2: response['code'] = 10105 response['error'] = '请求中未提交密码' return JsonResponse(response) if password_1 != password_2: response['code'] = 10106 response['error'] = '两次提交的密码不一致' return JsonResponse(response) # 检查当前用户名是否可用 users = User.objects.filter(username=username) if users: response['code'] = 10107 response['error'] = '用户名已存在' return JsonResponse(response) # 创建用户 try: user_obj = User() user_obj.username = username user_obj.nickname = username user_obj.password = get_password(password_1) user_obj.gender = gender user_obj.birthday = birthday user_obj.save() except Exception as e: print(e) response['code'] = 10108 response['error'] = '用户名已存在.' return JsonResponse(response) # 计算token token = make_token(username) response['code'] = 200 response['username'] = username response['data'] = {"token": token.decode()} return JsonResponse(response)
def users(req, username=None): if req.method == 'POST': # 注册 json_str = req.body if not json_str: result = {'code': 202, 'error': 'Please POST data!!'} return JsonResponse(result) # 如果当前报错,请执行json_str.decode() json_obj = json.loads(json_str) username = json_obj.get('username') email = json_obj.get('email') password_1 = json_obj.get('password_1') password_2 = json_obj.get('password_2') if not username: result = {'code': 203, 'error': 'Please give me username!'} return JsonResponse(result) if not email: result = {'code': 204, 'error': 'Please give me email!'} return JsonResponse(result) if not password_1 or not password_2: result = {'code': 205, 'error': 'Please give me password!'} return JsonResponse(result) if password_1 != password_2: result = {'code': 206, 'error': 'Please give me right password!'} return JsonResponse(result) # 检查用户名是否存在 old_user = UserProfile.objects.filter(username=username) if old_user: result = {'code': 207, 'error': 'The username is userd !!!'} return JsonResponse(result) # 密码散列 p_m = hashlib.sha256() p_m.update(password_1.encode()) try: UserProfile.objects.create(username=username, nickname=username, email=email, password=p_m.hexdigest()) except Exception as e: print('----create error is %s' % (e)) result = {'code': 500, 'error': 'Sorry,server is busy !'} return JsonResponse(result) token = make_token(username) # token 编码问题? bytes串不能json dumps, 所以要执行decode方法 # http://127.0.0.1:5000/register result = { 'code': 200, 'username': username, 'data': { 'token': token.decode() } } return JsonResponse(result) elif req.method == 'GET': # s = json.dumps({'code':200}) # return HttpResponse(s) # 获取数据 if username: # 获取指定用户数据[] users = UserProfile.objects.filter(username=username) if not users: result = {'code': 208, 'error': 'The user is not existed.'} return JsonResponse(result) user = users[0] if req.GET.keys(): # 当前请求有查询字符串 data = {} for key in req.GET.keys(): if key == 'password': # 如果查询密码,则continue! continue # hasattr 第一个参数为对象,第二个参数为属性字符串,若对象含有第二个参数的属性,则返回True,反之False # getattr 参数用hasattr ,若对象含有第二个参数的属性,则反水对应属性的值,贩子抛出异常AttrbuteError if hasattr(user, key): if key == 'avatar': # avatar 属性需要调用str方法__str__ data[key] = str(getattr(user, key)) else: data[key] = getattr(user, key) result = {'code': 200, 'username': username, 'data': data} return JsonResponse(result) else: # 无查询字符串,即获取指定用户所有数据 result = { 'code': 200, 'username': username, 'data': { 'info': user.info, 'sign': user.sign, 'nickname': user.nickname, 'avatar': str(user.avatar) } } return JsonResponse(result) else: # 没有username # [{username nickname sign info email avatar}] all_users = UserProfile.objects.all() result = [] for _user in all_users: d = {} d['username'] = _user.username d['nickname'] = _user.nickname d['sign'] = _user.sign d['info'] = _user.info d['email'] = _user.email d['avatar'] = str(_user.avatar) result.append(d) return JsonResponse({'code': 200, 'data': result}) # return JsonResponse({'code': 200}) elif req.method == 'PUT': # 前段访问地址 http://127.0.0.1:5000/<username>/change_info # 后端地址 http://127.0.0.1:8000/v1/users/<username> # 更新用户数据 user = req.user # 装饰器调用 # user = check_token(req) # if not user: # result = {'code': 209, 'error': 'The PUT need token!'} # return JsonResponse(result) json_str = req.body json_obj = json.loads(json_str) nickname = json_obj.get('nickname') if not nickname: result = {'code': 210, 'error': 'The nickname can not be none!'} return JsonResponse(result) sign = json_obj.get('sign') if sign is None: result = {'code': 211, 'error': 'The sign not in json!'} return JsonResponse(result) info = json_obj.get('info') if info is None: result = {'code': 212, 'errror': 'The info not in json!'} return JsonResponse(result) if user.username != username: result = {'code': 213, 'error': 'This is wrong!!!'} return JsonResponse(result) user.sign = sign user.info = info user.nickname = nickname user.save() result = {'code': 200, 'username': username} return JsonResponse(result)
def users(request, username=None): if request.method == 'GET': if username: # 具体用户的数据 # /v1/users/clark?into=1&email=1 try: user = models.UserProfile.objects.get(username=username) except models.UserProfile.DoesNotExist: user = None if not user: # 用户不存在 result = {'code': 208, 'error': 'The user is not existed'} return JsonResponse(result) # 判断查询字符串 if request.GET.keys(): # 证明有查询字符串 data = {} for k in request.GET.keys(): # 数据库中最好有非空默认值 if hasattr(user, k): data[k] = getattr(user, k) result = {'code': 200, 'username': username, 'data': data} return JsonResponse(result) else: # 证明指定查询用户全量数据 result = {'code': 200, 'username': username, 'data': {'info': user.info, 'sign': user.sign, 'nickname': user.nickname, 'avatar': str(user.avatar) }} return JsonResponse(result) else: # 全部用户的数据 try: users = models.UserProfile.objects.all() except: users = [] data = [] host = request.META['HTTP_HOST'] for item in users: obj = { 'username': item.username, 'email': item.email, 'info': item.info, 'avatar': host + "/" + str(item.avatar), 'sign': item.sign } data.append(obj) result = {"code": 200, 'data': data} return JsonResponse(result) elif request.method == 'POST': # 注册 # 密码需用SHA-1 hashlib.sha1() ->update -> json_str = request.body if not json_str: # 前端异常提交,空数据 result = {"code": 202, 'error': 'please POST data'} return JsonResponse(result) # 反序列化json_str json_str = json.loads(json_str) username = json_str.get("username") email = json_str.get("email") password_1 = json_str.get("password_1") password_2 = json_str.get("password_2") if not username: # 用户名不存在 result = {"code": 203, "error": 'please give me username'} return JsonResponse(result) if not email: # 邮箱不存在 result = {"code": 204, "error": 'please give me email'} return JsonResponse(result) if not password_1 or not password_2: # 密码不存在 result = {"code": 205, "error": 'please give me password'} return JsonResponse(result) if password_1 != password_2: result = {"code": 206, "error": 'Two password is not same'} return JsonResponse(result) # 检查用户是否存在 old_user = models.UserProfile.objects.filter(username=username) if old_user: # 改用户已经注册 result = {"code": 207, "error": '用户已存在!'} return JsonResponse(result) # 将密码进行hash h = hashlib.sha1() h.update(password_1.encode()) try: new_user = models.UserProfile.objects.create(username=username, nickname=username, email=email, password=h.hexdigest()) except Exception as e: print("UserProfile create error is %s" % (e)) result = {"code": 207, "error": 'The username is existed'} return JsonResponse(result) # 根据用户名 生成token token = make_token(username) result = {'code': 200, 'username': username, 'data': {'token': token.decode(), 'nickname': username, 'avatar': new_user.avatar}} return JsonResponse(result) elif request.method == 'PUT': user = request.user if not username: # 用户名不存在 result = {"code": 203, "error": 'please give me username'} return JsonResponse(result) if username != user.username: result = {"code": 203, "error": '没有权限修改!'} return JsonResponse(result) json_str = request.body # 判断前端是否给了json 串 if not json_str: result = {'code': 202, 'error': '没有数据传过来!'} return JsonResponse(result) json_obj = json.loads(json_str) nickname = json_obj.get('nickname') if not nickname: result = {'code': 209, 'error': '昵称不能为空!'} return JsonResponse(result) # sign = json_obj.get('sign', '') info = json_obj.get('info', '') # 保存 user.sign = sign user.nickname = nickname user.info = info user.save() return JsonResponse({'code': 200, 'username': username})
def users(request, username=None): if request.method == 'GET': # 獲取用戶數據 if username: # /v1/users/<username> # 拿指定用戶數據 try: user = UserProfile.objects.get(username=username) except Exception as e: user = None if not user: result = {'code': 208, 'error': 'There is no user!'} return JsonResponse(result) # 檢查是否有帶查詢字符串 if request.GET.keys(): # 查詢指定字符串 data = {} for k in request.GET.keys(): if hasattr(user, k): v = getattr(user, k) if k == 'avatar': data[k] = str(v) else: data[k] = v result = {'code': 200, 'username': username, 'data': data} return JsonResponse(result) else: # 全量查詢「password email 不給」 result = { 'code': 200, 'username': username, 'data': { 'info': user.info, 'sign': user.sign, 'avatar': str(user.avatar), 'nickname': user.nickname } } return JsonResponse(result) return JsonResponse({ 'code': 200, 'error': 'GET accept! %s' % (username) }) else: return JsonResponse({'code': 200, 'error': 'GET accept!'}) elif request.method == 'POST': # request.POST只能提取'表單POST'的數據,json格式使用request.body # 創建用戶 # 前端註冊地址 http://127.0.0.1:5000/register json_str = request.body if not json_str: result = {'code': 201, 'error': 'Please give me data!'} return JsonResponse(result) json_obj = json.loads(json_str) username = json_obj.get('username') if not username: result = {'code': 202, 'error': 'Please give me username!'} return JsonResponse(result) email = json_obj.get('email') if not email: result = {'code': 203, 'error': 'Please give me email!'} return JsonResponse(result) password_1 = json_obj.get('password_1') password_2 = json_obj.get('password_2') if not password_1 or not password_2: result = {'code': 204, 'error': 'Please give me password!'} return JsonResponse(result) if password_1 != password_2: result = {'code': 205, 'error': 'password_1&2 are not the same!'} return JsonResponse(result) # 優先查詢一下用戶名是否已經存在 old_users = UserProfile.objects.filter(username=username) if old_users: result = {'code': 206, 'error': 'User is already existed!'} return JsonResponse(result) # 密碼處理 md5 哈希/散列 不要說加密! m = hashlib.md5() m.update(password_1.encode()) #======charfild 盡量避免使用 null=True sign = info = '' try: UserProfile.objects.create(username=username, nickname=username, email=email, password=m.hexdigest(), sign=sign, info=info) except Exception as e: # 報錯可能:用戶名已存在!因為可能別人比你更快註冊一樣的名子or數據庫當機 result = {'code': 207, 'error': 'Server is busy!'} return JsonResponse(result) # make token token = make_token(username) # 正常返回給前端 result = { 'code': 200, 'username': username, 'data': { 'token': token.decode() } } return JsonResponse(result) elif request.method == 'PUT': # 更新數據 # 此頭可以獲取前端傳來的token # META可拿去http協議原生頭,META也是類字典對象可使用字典相關方法 # 特別注意 http頭有可能被django重新命名,建議上網google token = request.META.get('HTTP_AUTHORIZATION') user = request.user json_str = request.body if not json_str: result = {'code': 209, 'error': 'Please give json!'} return JsonResponse(result) json_obj = json.loads(json_str) if 'sign' not in json_obj: result = {'code': 210, 'error': 'No sign!'} return JsonResponse(result) if 'info' not in json_obj: result = {'code': 211, 'error': 'No info!'} return JsonResponse(result) sign = json_obj.get('sign') info = json_obj.get('info') request.user.sign = sign request.user.info = info request.user.save() result = {'code': 200, 'username': request.user.username} return JsonResponse(result) else: raise return JsonResponse({'code': 200})
def users(request, username=None): # 注册 if request.method == 'POST': json_str = request.body.decode() # 接受json数据,字节串转换为字符串 if not json_str: result = {'code': 202, 'error': 'Please POST data!'} return JsonResponse(result) # 如果当前报错,执行json_str=json_str.decode() json_obj = json.loads(json_str) # 尽量不用索引直接强拿,用.get username = json_obj.get('username') e_mail = json_obj.get('email') password_1 = json_obj.get('password_1') password_2 = json_obj.get('password_2') if not username: result = {'code': 203, 'error': 'username can not empty'} return JsonResponse(result) if not e_mail: result = {'code': 204, 'error': 'e_mail can not empty'} return JsonResponse(result) if not password_1 or not password_2: result = {'code': 205, 'error': 'password can not empty'} return JsonResponse(result) if password_1 != password_2: result = {'code': 206, 'error': 'both of password not same'} return JsonResponse(result) # 检查用户名 old_user = UserProfile.objects.filter(username=username) if old_user: result = {'code': 207, 'error': 'The username is used !!'} return JsonResponse(result) # 密码散列 p_m = hashlib.sha256() # ***转成二进制*** p_m.update(password_1.encode()) try: UserProfile.objects.create(username=username, nickname=username, email=e_mail, password=p_m.hexdigest()) except Exception as e: print(e) result = {'code': 500, 'error': 'Server is busy'} return JsonResponse(result) token = make_token(username) # token 编码问题 byte串不能json dump,所以要执行decode方法 result = { 'code': 200, 'username': username, 'data': { 'token': token.decode() } } return JsonResponse(result) # 查询 elif request.method == 'GET': # 有一定缺陷 # s=json.dumps({'code':200}) # return HttpResponse(s) # 获取数据 if username: # 获取指定用户数据 users = UserProfile.objects.filter( username=username) # filter只能找一个 if not users: result = {'code': 208, 'error': 'The users is not existed'} return JsonResponse(result) user = users[0] if request.GET.keys(): # 当前字符串的值 data = {} for key in request.GET.keys(): if key == 'password': # 如果查询密码,则continue continue # hasattr 第一个参数为对象,第二个参数为属性字符串 # 若对象还有第二个参数的属性,返回True,反之False if hasattr(user, key): if key == 'avatar': # avatar属性需要调用str方法 __str__ data[key] = str(getattr(user, key)) else: data[key] = getattr(user, key) data[key] = getattr(user, key) result = {'code': 200, 'username': username, 'data': data} else: # 无查询字符串,即获取指定用户的所有数据 result = { 'code': 200, 'username': username, 'data': { 'info': user.info, 'sign': user.sign, 'nickname': user.nickname, 'avatar': str(user.avatar) } } return JsonResponse(result) # getattr 参数同hasattr,若对象含有第二个参数的属性, # 则返回对应属性的值,反之,抛出异常 AttributeError else: # 没有username # [{username,nickname,sign,info,e_mail,avatar}] # {'code':200,'data':[{},{}]} #all(),(慎用),会使内存压力变大 all_users = UserProfile.objects.all() result = [] for _user in all_users: d = {} d['username'] = _user.username d['nickname'] = _user.nickname d['sign'] = _user.sign d['info'] = _user.info d['email'] = _user.email d['avatar'] = str(_user.avatar) result.append(d) return JsonResponse({'code': 200, 'data': result}) # 获取指定用户数据 # 使用JsonResponse,让传输格式更完整 # return JsonResponse({'code':200}) # 修改 elif request.method == 'PUT': # 更新用户数据 # http://127.0.0.1:8000/v1/users/<username> # user = check_token(request) user = request.user # if not user: # result = {'code': '209', 'error': 'The Put need token'} # return JsonResponse(result) json_str = request.body json_obj = json.loads(json_str) nickname = json_obj.get('nickname') if not nickname: result = {'code': '209', 'error': 'the nickname can not empty'} return JsonResponse(result) sign = json_obj.get('sign') if sign is None: result = {'code': 211, 'error': 'The sign not in json'} return JsonResponse(result) info = json_obj.get('info') if info is None: result = {'code': 212, 'error': 'The info not in json'} return JsonResponse(result) if user.username != username: result = {'code': 213, 'error': 'What are you doing!!!'} return JsonResponse(result) # 修改个人信息 user.sign = sign user.info = info user.nickname = nickname #修改信息赋值最后要加 --user.save()--修改数据一定要通过save保存数据 user.save() result = {'code': 214, 'username': username} return JsonResponse(result)
def register(request): if request.method == 'GET': return render(request, 'user/register.html') if request.method == 'POST': print(request.body) try: json_obj = json.loads(request.body.decode()) # 校验数据 phonenumber = json_obj['phonenumber'] nickname = json_obj['nickname'] password = json_obj['password'] authcode = json_obj['authcode'] checked = json_obj.get('checked') except Exception as e: print("user/POST/try1/", e) code = 10100 error = "注册数据有问题" return JsonResponse({'code': code, 'error': error}) if not phonenumber: code = 10101 error = "请输入用户名" return JsonResponse({'code': code, 'error': error}) if len(phonenumber) != 11: code = 208 error = "请输入正确的用户名" return JsonResponse({'code': code, 'error': error}) if not nickname: code = 10102 error = "请输入昵称" return JsonResponse({'code': code, 'error': error}) if not password: code = 10205 error = "请输入密码" return JsonResponse({'code': code, 'error': error}) if not checked: code = 10206 error = "请勾选使用协议" return JsonResponse({'code': code, 'error': error}) if not authcode: code = 10207 error = "验证码错误" return JsonResponse({'code': code, 'error': error}) older_user = UserProfile.objects.filter(phonenumber=phonenumber) if older_user: code = 10207 error = "用户名已存在" return JsonResponse({'code': code, 'error': error}) p_m = hashlib.md5(mysettings.Token_key) p_m.update(password.encode()) try: new_user = UserProfile.objects.create(phonenumber=phonenumber, nickname=nickname, password=p_m.hexdigest()) except Exception as e: print("user/POST/create/", e) code = 207 error = "用户名已存在" return JsonResponse({'code': code, 'error': error}) token = make_token(new_user) code = 200 data = {"token": token} return JsonResponse({'code': code, 'phonenumber': phonenumber, 'data': data})
def users(request,username=None): if request.method =='GET': # 获取用户数据 if username: # /v1/users/<username> # 拿指定用户数据 try: user = UserProfile.objects.get(username=username) except Exception as e: user = None if not user: result = {'code': 208, 'error': 'no user'} return JsonResponse(result) # 检查是否有查询字符串 if request.GET.keys(): # 查询指定字段 data = {} for k in request.GET.keys(): if hasattr(user, k): v = getattr(user, k) if k == 'avatar': data[k] = str(v) else: data[k] = v result = {'code': 200, 'username': username, 'data': data} return JsonResponse(result) else: # 全量查询【password email address ...】 result = {'code': 200, 'username': username, 'data': {'info': user.info, 'sign': user.sign, 'avatar': str(user.avatar), 'nickname': user.nickname,'phone':user.phone,'address':user.address}} return JsonResponse(result) elif request.method=='POST': #前端页面地址 127.0.0.1/register.html #创建用户 符合restful规则 #新建token json_str = request.body if not json_str: result = {'code': 201, 'error': 'Please give me data'} return JsonResponse(result) json_obj = json.loads(json_str) username = json_obj.get('username') if not username: result = {'code': 202, 'error': '请输入用户名'} return JsonResponse(result) email = json_obj.get('email') if not email: result = {'code': 203, 'error': '请输入邮箱'} return JsonResponse(result) password_1 = json_obj.get('password_1') password_2 = json_obj.get('password_2') if not password_1 or not password_2: result = {'code': 204, 'error': '请输入密码'} return JsonResponse(result) if password_1 != password_2: result = {'code': 205, 'error': '请输入相同的密码'} return JsonResponse(result) # 优先查询当前用户名是否已存在 old_user = UserProfile.objects.filter(username=username) if old_user: result = {'code': 206, 'error': '用户名已存在'} return JsonResponse(result) #密码处理 md5哈希/散列 m = hashlib.md5() m.update(password_1.encode()) #======charfield 尽量避免使用 null=True sign = info = '' try: UserProfile.objects.create(username=username,nickname=username,password=m.hexdigest(),sign=sign,info=info,email=email) except Exception as e: #数据库down了, 用户名已存在 result = {'code': 207, 'error': 'Server is busy'} return JsonResponse(result) #make token token = make_token(username) #正常返回给前端 result = {'code':200, 'username':username, 'data':{'token':token.decode()}} return JsonResponse(result) if request.method=='PUT': #http://127.0.0.1:5000/<username>/change_info #更新数据 json_str=request.body if not json_str: result='please give me data' return JsonResponse(result) json_dict=json.loads(json_str) #取出用户名 # username = json_dict.get('username') print('用户名:',username) #数据库中取出用户数据 userobj = UserProfile.objects.filter(username=username)[0] print(userobj) list_str=['sign','nickname','info'] #取出put字段值,存到数据库 for item in list_str: if item in json_dict: #设置数据属性 setattr(userobj,item,json_dict[item]) #保存结果 userobj.save() result = {'code':200, 'username':request.user.username} return JsonResponse(result)
def users(request,username=None): if request.method=='POST': #注册 # print(request.body) json_str=request.body if not json_str: result={'code':202,'error':'Please POST data!!!'} return JsonResponse(result) #如果当前报错,请执行json_str.decode json_obj=json.loads(json_str) print(json_obj) username=json_obj.get('username') email=json_obj.get('email') password_1=json_obj.get('password_1') password_2=json_obj.get('password_2') if not username: result={'code':203,'error':'Please give me username!!!'} return JsonResponse(result) if not email: result={'code':204,'error':'Please give me email!!!'} return JsonResponse(result) if not password_1 or not password_2: result={'code':205,'error':'Please give me password!!!'} return JsonResponse(result) if password_1!=password_2: result={'code':206,'error':'Please give me right password!!!'} return JsonResponse(result) #检查用户名是否存在 old_user=UserProfile.objects.filter(username=username) if old_user: result={'code':207,'error':'The username was used!!!'} return JsonResponse(result) #密码散列 p_m=hashlib.sha256() p_m.update(password_1.encode()) #创建用户 try: UserProfile.objects.create(username=username,nickname=username,email=email,password=p_m.hexdigest()) except Exception as e: print("------create error is %s"%e) result={'code':500,'error':'Sorry,server is busy!!!'} return JsonResponse(result) token=make_token(username) #token编码问题,bytes串不能json dumps所以需要使用decode方法 result={'code': 200,'username':username,'data':{'token':token.decode()}} return JsonResponse(result) elif request.method=='GET': #获取数据 if username: # 获取指定用户数据 users = UserProfile.objects.filter(username=username) print(users[0].nickname) if not users: #当前用户不存在 return JsonResponse({'code': 200, 'error': 'The user is not existed'}) user=users[0] if request.GET.keys(): #当前请求有查询字符串 data={} for key in request.GET.keys(): if key=='password': #如果查询密码,则continue continue #hasattr,第一个参数为对象,第二个参数为属性字符串,-->若对象有第二个参数的属性,则返回True,反之False #gatattr,参数同hasattr,若对象含有第二个参数的属性,则返回对应属性的值,反之抛出异常:AttributeError if hasattr(user,key): if key=='avatar': #avatar属性需要调用str方法 __str__ data[key]=str(getattr(user,key)) else: data[key]=getattr(user,key) result={'code':200,'username':username,'data':data} else: #无查询字符串即获取制定用户所有数据 result={'code':200,'username':username,'data':{'info':user.info,'sign':user.sign,'nickname':user.nickname,'avatar':str(user.avatar)}} return JsonResponse(result) else: #如果没有username #username nickname sign info email avatar #{'code':200,'data':{'info':user.info}} all_users = UserProfile.objects.all() print(all_users) result=[] for _user in all_users: d={} d['username']=_user.username d['nickname']=_user.nickname d['sign']=_user.sign d['info']=_user.info d['email']=_user.email d['avatar']=str(_user.avatar) result.append(d) return JsonResponse({'code':200,'data':result}) elif request.method=='PUT': #前端访问地址 http://127.0.0.1:5000/<username>/change_info #后端地址 http://127.0.0.1:8000/v1/users/<username> #更新用户数据 # user=check_token(request) user=request.user # if not user: # result={'code':209,'error':'The PUT need token'} # return JsonResponse(result) json_str=request.body json_obj=json.loads(json_str) nickname=json_obj.get('nickname') if not nickname: result={'code':210,'error':'The nickname can not be none!'} return JsonResponse(result) sign=json_obj.get('sign') if sign is None: result={'code':211,'error':'The sign not in json!'} return JsonResponse(result) info = json_obj.get('info') if info is None: result={'code':212,'error':'The info not in json!'} return JsonResponse(result) if user.username!=username: result = {'code': 213, 'error': 'This is wrong!'} return JsonResponse(result) #修改个人信息 user.sign=sign user.info=info user.nickname=nickname user.save() result = {'code': 200, 'username': username} return JsonResponse(result)
def users(request, username=None): """ 用户模块 路由 GET : 获取用户信息 POST: 注册(创建用户信息) PUT : 修改用户信息 :param username: 通过 url 传递的用户名 :param request: 请求 :return: json """ if request.method == 'GET': print(username) # 取数据 if username: # 具体用户数据 # 利用 视图传参 和 查询字符串相结合 的方式,获取 某一用户信息内的 某一个字段内容 # /v1/users/username?info=1 返回 {info:xxx} try: user = UserProfile.objects.get(username=username) except UserProfile.DoesNotExist: user = None if not user: # 用户不存在 result = {"code": 208, "error": "user not exist"} return JsonResponse(result) # 判断查询字符串 if request.GET.keys(): data = {} for key in request.GET.keys(): if hasattr(user, key): data[key] = getattr(user, key) result = {"code": 200, "username": username, "data": data} return JsonResponse(result) else: # 指定查询用户全量数据 result = { "code": 200, "username": username, "data": { "nickname": user.nickname, "info": user.info, "sign": user.sign, "avatar": str(user.avatar) } } return JsonResponse(result) else: # 全部用户数据 all_users = UserProfile.objects.all() dict_res = [] for item in all_users: item_d = dict() item_d['username'] = item.username item_d['email'] = item.email item_d['sign'] = item.sign item_d['info'] = item.info dict_res.append(item_d) result = {"code": 200, "data": dict_res} return JsonResponse(result) elif request.method == 'POST': # 注册 # 密码 SHA-1 # 获取json 数据 json_str = request.body if not json_str: # 前端异常,提交空数据 result = {"code": 202, "error": "pl. transfer data"} return JsonResponse(result) # 反序列化 json_str json_obj = json.loads(json_str) username = json_obj.get('username') email = json_obj.get('email') password_1 = json_obj.get('password_1') password_2 = json_obj.get('password_2') # 前端数据 验证 if not username: # 用户名不存在 result = {"code": 203, "error": "pl. transfer username"} return JsonResponse(result) if not email: # 邮箱不存在 result = {"code": 204, "error": "pl. transfer email"} return JsonResponse(result) if not password_1 or not password_2: # 密码不存在 result = {"code": 205, "error": "pl. transfer password"} return JsonResponse(result) if password_1 != password_2: # 两次输入的密码,不一致 result = {"code": 206, "error": "The two passwords do not agree"} return JsonResponse(result) # 验证用户 是否已存在 old_user = UserProfile.objects.filter(username=username) if old_user: result = {"code": 207, "error": "The username is existed!!!"} return JsonResponse(result) # SHA-1 散列加密 pw_sha = hashlib.sha1() pw_sha.update(password_1.encode()) # 存入数据 try: UserProfile.objects.create(username=username, nickname=username, email=email, password=pw_sha.hexdigest()) except Exception as e: print('UserProfile create error is %s' % e) result = {"code": 207, "error": "The username is existed!!!"} return JsonResponse(result) # 根据用户名,生成 token token = make_token(username) result = { "code": 200, "username": username, "data": { "token": token.decode() } } return JsonResponse(result) elif request.method == 'PUT': # 更新数据 user = request.user json_str = request.body if not json_str: # 前端是否传递数据 result = {"code": 202, "error": "pl. transfer data"} return JsonResponse(result) json_obj = json.loads(json_str) nickname = json_obj.get('nickname') if not nickname: # 昵称不能为空 result = {"code": 209, "error": "pl. transfer nickname"} return JsonResponse(result) sign = json_obj.get('sign', '') info = json_obj.get('info', '') user.nickname = nickname user.sign = sign user.info = info user.save() result = {"code": 200, "username": username} return JsonResponse(result) elif request.method == 'DELETE': user = request.user user.delete() result = {"code": 200, "data": "User Deleted..."} return JsonResponse(result)
def users(request, username=None): if request.method == 'GET': #取数据 if username: #具体用户的数据 # /v1/users/guoxiaonao?info=1&email=1 {'info':xxx, 'email':xxx} try: user = UserProfile.objects.get(username=username) except UserProfile.DoesNotExist: user = None if not user: #用户不存在 result = {'code': 208, 'error': 'The user is not existed'} return JsonResponse(result) #判断查询字符串 if request.GET.keys(): #证明有查询字符串 data = {} for k in request.GET.keys(): #数据库中最好是有非空默认值 if hasattr(user, k): data[k] = getattr(user, k) result = {'code': 200, 'username': username, 'data': data} return JsonResponse(result) else: #证明指定查询用户全量数据 result = { 'code': 200, 'username': username, 'data': { 'info': user.info, 'sign': user.sign, 'nickname': user.nickname, 'avatar': str(user.avatar) } } return JsonResponse(result) else: #全部用户的数据 #UserProfile获取全部用户数据 all_users = UserProfile.objects.all() res = [] for u in all_users: d = {} d['username'] = u.username d['email'] = u.email res.append(d) #[{username:xx,..}, {username:xx,..}] result = {'code': 200, 'data': res} return JsonResponse(result) elif request.method == 'POST': #注册用户 #密码需用SHA-1 hashlib.sha1() -> update -> hexdigest() #获取json数据 json_str = request.body if not json_str: #前端异常提交,空数据 result = {'code': 202, 'error': 'Please POST data'} return JsonResponse(result) #反序列化json str json_obj = json.loads(json_str) username = json_obj.get('username') email = json_obj.get('email') password_1 = json_obj.get('password_1') password_2 = json_obj.get('password_2') if not username: #用户名不存在 result = {'code': 203, 'error': 'Please give me username'} return JsonResponse(result) if not email: #email不存在 result = {'code': 204, 'error': 'Please give me email'} return JsonResponse(result) if not password_1 or not password_2: #p1 or p2 不存在 result = {'code': 205, 'error': 'Please give me password'} return JsonResponse(result) if password_1 != password_2: result = {'code': 206, 'error': 'The password is wrong !'} return JsonResponse(result) #检查用户是否存在 old_user = UserProfile.objects.filter(username=username) if old_user: #该用户已经注册 result = {'code': 207, 'error': 'The username is existed !!! '} return JsonResponse(result) #将密码进行hash h_p = hashlib.sha1() h_p.update(password_1.encode()) try: UserProfile.objects.create(username=username, nickname=username, email=email, password=h_p.hexdigest()) except Exception as e: print('UserProfile create error is %s' % (e)) result = {'code': 207, 'error': 'The username is existed !!! '} return JsonResponse(result) #根据用户名 生成token token = make_token(username) result = { 'code': 200, 'username': username, 'data': { 'token': token.decode() } } return JsonResponse(result) elif request.method == 'PUT': #修改用户数据 /v1/users/用户名 #前端返回的json格式{'nickaname': xxx, 'sign':xxx, 'info':xxx} user = request.user json_str = request.body #判断前端是否给了json串 if not json_str: result = {'code': 202, 'error': 'Please give me data'} return JsonResponse(result) json_obj = json.loads(json_str) nickname = json_obj.get('nickname') if not nickname: #昵称不能为空 result = {'code': 209, 'error': 'nickname is none!'} return JsonResponse(result) #sign&info 默认值为空字符串 sign = json_obj.get('sign', '') info = json_obj.get('info', '') #存 user.sign = sign user.info = info user.nickname = nickname user.save() result = {'code': 200, 'username': username} return JsonResponse(result)
def readers(request, readername=None): if request.method == 'GET': if readername: try: user = Reader_Profile.objects.get(readername=readername) except Exception as e: user = None if not user: result = {'code': 208, 'error': 'no user'} return JsonResponse(result) if request.GET.keys(): data = {} for k in request.GET.keys(): if hasattr(user, k): v = getattr(user, k) if k == 'avatar': data[k] = str(v) else: data[k] = v result = {'code': 200, 'readername': readername, 'data': data} return JsonResponse(result) else: result = { 'code': 200, 'readername': readername, 'data': { 'gender': user.gender, 'sign': user.sign, 'email': user.email, 'avatar': str(user.avatar), 'nickname': user.nickname } } return JsonResponse(result) else: return JsonResponse({'code': 200, 'error': '我来了 GET'}) elif request.method == 'POST': json_str = request.body if not json_str: result = {'code': 201, 'error': 'Please give me data'} return JsonResponse(result) # 把客户端拿取的json串转化为字符串 json_obj = json.loads(json_str) readername = json_obj.get('readername') if not readername: result = {'code': 202, 'error': '用户名为空!'} return JsonResponse(result) # 判断用户名中不能含有特殊字符 if not re.search(u'^[_a-zA-Z0-9\u4e00-\u9fa5]+$', readername): result = {'code': 203, 'error': '用户名不可以包含非法字符(!,@,#,$,%...)'} return JsonResponse(result) # 优先查询当前用户名是否已存在 old_user = Reader_Profile.objects.filter(readername=readername) if old_user: result = {'code': 206, 'error': '抱歉,此用户名已经存在!'} return JsonResponse(result) # email = json_obj.get('email') # if not email: # result = {'code':203, 'error': 'Please give me email'} # return JsonResponse(result) password_1 = json_obj.get('password01') password_2 = json_obj.get('password02') if not password_1 or not password_2: result = {'code': 204, 'error': '密码为空!'} return JsonResponse(result) if password_1 != password_2: result = {'code': 205, 'error': '两次输入的密码不一致!'} return JsonResponse(result) # 密码处理 md5哈希/散列 m = hashlib.md5() m.update(password_1.encode()) # ======charfield 尽量避免使用 null=True sign = gender = email = avatar = '' try: Reader_Profile.objects.create(readername=readername, nickname=readername, password=m.hexdigest(), sign=sign, gender=gender, email=email, avatar=avatar) except Exception as e: # 数据库down了, 用户名已存在 result = {'code': 207, 'error': '服务器繁忙...'} return JsonResponse(result) # make token token = make_token(readername) # 正常返回给前端 result = { 'code': 200, 'readername': readername, 'data': { 'token': token.decode() } } return JsonResponse(result) # result = {'code': 200, 'readername': readername, 'data': "测试一下路径成功"} # return JsonResponse(result) elif request.method == 'PUT': # http://127.0.0.1:5000/<readername>/change_info # 更新数据 # 此头可获取前端传来的token # META可拿取http协议原生请求头,META 也是类字典对象,可使用 # 字典相关方法 # 特别注意 http头有可能被django重命名,建议百度 # try: # # except: request.META.get('HTTP_AUTHORIZATION') user = request.user json_str = request.body if not json_str: result = {'code': 209, 'error': 'Please give me json'} return JsonResponse(result) json_obj = json.loads(json_str) if 'sign' not in json_obj: result = {'code': 210, 'error': '请输入签名'} return JsonResponse(result) if 'gender' not in json_obj: result = {'code': 211, 'error': '请输入性别'} return JsonResponse(result) if 'email' not in json_obj: result = {'code': 212, 'error': '请输入邮箱'} return JsonResponse(result) if 'nickname' not in json_obj: result = {'code': 212, 'error': '请输入昵称'} return JsonResponse(result) sign = json_obj.get('sign') gender = json_obj.get('gender') email = json_obj.get('email') nickname = json_obj.get('nickname') request.user.sign = sign request.user.gender = gender request.user.email = email request.user.nickname = nickname request.user.save() result = {'code': 200, 'readername': request.user.readername} return JsonResponse(result) else: raise KeyError
def users(request, username=None): if request.method == 'POST': # 注册 json_str = request.body if not json_str: result = {'code': 202, 'error': 'Please POST data!!'} return JsonResponse(result) # 如果当前报错,请执行 json_str = json_str.decode() json_obj = json.loads(json_str) username = json_obj.get('username') email = json_obj.get('email') password_1 = json_obj.get('password_1') password_2 = json_obj.get('password_2') if not username: result = {'code': 203, 'error': 'Please give me username !'} return JsonResponse(result) if not email: result = {'code': 204, 'error': 'Please give me email !'} return JsonResponse(result) if not password_1 or not password_2: result = {'code': 205, 'error': 'Please give me password !'} return JsonResponse(result) if password_1 != password_2: result = {'code': 206, 'error': 'Please give me right password !'} return JsonResponse(result) # 检查用户名是否存在 old_user = UserProfile.objects.filter(username=username) if old_user: result = {'code': 207, 'error': 'The username is used !!! '} return JsonResponse(result) # 密码散列 p_m = hashlib.sha256() p_m.update(password_1.encode()) try: UserProfile.objects.create(username=username, nickname=username, email=email, password=p_m.hexdigest()) except Exception as e: print('----create error is %s' % (e)) result = {'code': 500, 'error': 'Sorry, server is busy !'} return JsonResponse(result) token = make_token(username) # token 编码问题 !!!! bytes串不能json dumps, 所以要执行decode方法 result = { 'code': 200, 'username': username, 'data': { 'token': token.decode() } } # http://127.0.0.1:5000/register rep = JsonResponse(result) rep.set_cookie(username, value=token) request.session[username] = token.decode() return rep elif request.method == 'GET': # 获取数据 if username: # 获取指定用户数据 users = UserProfile.objects.filter(username=username) if not users: # 当前username的用户不存在 result = {'code': 208, 'error': 'The user is not existed'} return JsonResponse(result) user = users[0] if request.GET.keys(): # 当前请求有查询字符串 data = {} for key in request.GET.keys(): if key == 'password': # 如果查询密码,则continue! continue # hasattr 第一个参数为对象, 第二个参数为 属性字符串 -> 若对象含有第二个参数的属性,则返回True,反之 False # getattr 参数同hasattr, 若对象含有第二个参数的属性,则返回对应属性的值, 反之 抛出异常 AttributeError if hasattr(user, key): if key == 'avatar': # avatar属性需要调用str方法 __str__ data[key] = str(getattr(user, key)) else: data[key] = getattr(user, key) result = {'code': 200, 'username': username, 'data': data} else: # 无查询字符串,即获取指定用户数据 result = { 'code': 200, 'username': username, 'data': { 'info': user.info, 'sign': user.sign, 'nickname': user.nickname, 'avatar': str(user.avatar) } } return JsonResponse(result) else: # 没有username # [{username nickname sign info email avatar}] all_users = UserProfile.objects.all() result = [] for _user in all_users: d = {} d['username'] = _user.username d['nickname'] = _user.nickname d['sign'] = _user.sign d['info'] = _user.info d['email'] = _user.email d['avatar'] = str(_user.avatar) result.append(d) return JsonResponse({'code': 200, 'data': result})
def users(request, username=None): if request.method == 'GET': # 获取用户数据 if username: try: user = UserProfile.objects.get(username=username) except Exception as e: user = None if not user: result = {'code': 208, 'error': 'no user'} return JsonResponse(result) # 检查是否有查询字符串 if request.GET.keys(): # 查询指定字段 data = {} for k in request.GET.keys(): if hasattr(user, k): v = getattr(user, k) if k == 'avatar': data[k] = str(v) else: data[k] = v result = {'code': 200, 'username': username, 'data': data} return JsonResponse(result) else: # 全量查询,不包括密码与邮箱 result = {'code': 200, 'username': username, 'data': {'info': user.info, 'sign': user.sign, 'avatar': str(user.avatar), 'nickname': user.nickname}} return JsonResponse(result) else: return JsonResponse({'code': 200, 'error': 'test'}) elif request.method == 'POST': # 创建用户数据 # print(request.body) json_str = request.body if not json_str: result = {'code': 201, 'error': 'Data Is Null'} return JsonResponse(result) json_obj = json.loads(json_str) username = json_obj.get('username') if not username: result = {'code': 202, 'error': 'username is null'} return JsonResponse(result) email = json_obj.get('email') if not email: result = {'code': 203, 'error': 'email is null'} return JsonResponse(result) password_1 = json_obj.get('password_1') password_2 = json_obj.get('password_2') if not password_1 or not password_2: result = {'code': 204, 'error': 'password is null'} return JsonResponse(result) if password_1 != password_2: result = {'code': 205, 'error': 'password_1 is not same as password_2'} return JsonResponse(result) # 检查当前数据库是否有此用户 user = UserProfile.objects.filter(username=username) if user: result = {'code': 206, 'error': 'your username is already existed!'} return JsonResponse(result) # 处理密码 md5/哈希/散列 m = hashlib.md5() m.update(password_1.encode()) # 个人签名/个人信息 可以为空 sign = info = '' try: UserProfile.objects.create( username=username, nickname=username, password=m.hexdigest(), email=email, sign=sign, info=info ) except Exception as e: result = {'code': 207, 'error': 'Server is busy, please try again'} return JsonResponse(result) # 生成token token = make_token(username) # 正常返回给前端 result = {'code': 200, 'username': username, 'data': {'token': token.decode()}} return JsonResponse(result) elif request.method == 'PUT': # http://127.0.0.1:5000/<username>/change_info # 修改个人信息, 更新用户数据 # 获取前端传来的token # META可拿取http协议原生头,META也是类字典对象,可使用字典相关方法 # 特别注意 http头有可能被django重命名 user = request.user json_str = request.body if not json_str: result = {'code': 209, 'error': 'please give me token'} return JsonResponse(result) json_obj = json.loads(json_str) if 'sign' not in json_obj: result = {'code': 210, 'error': 'no sign'} return JsonResponse(result) if 'info' not in json_obj: result = {'code': 211, 'error': 'no info'} return JsonResponse(result) sign = json_obj.get('sign') info = json_obj.get('info') request.user.sign = sign request.user.info = info request.user.save() result = {'code': 200, 'username': request.user.username} return JsonResponse(result) else: raise
def users(request, username=None): if request.method == 'GET': #获取用户数据 if username: #/v1/users/<username> #拿指定用户数据 try: user = UserProfile.objects.get(username=username) except Exception as e: user = None if not user: result = {'code': 208, 'error': 'no user'} return JsonResponse(result) #检查是否有查询字符串 if request.GET.keys(): #查询指定字段 data = {} for k in request.GET.keys(): if hasattr(user, k): v = getattr(user, k) if k == 'avatar': data[k] = str(v) else: data[k] = v result = {'code': 200, 'username': username, 'data': data} return JsonResponse(result) else: #全量查询【password email 不给】 result = { 'code': 200, 'username': username, 'data': { 'info': user.info, 'sign': user.sign, 'avatar': str(user.avatar), 'nickname': user.nickname } } return JsonResponse(result) # return JsonResponse({'code': 200, 'error':'wolaila GET %s'%(username)}) else: #/v1/users return JsonResponse({'code': 200, 'error': 'wolaile GET'}) elif request.method == 'POST': #此功能模块异常码 201 开始 #request.POST 只能拿表单post提交的数据 #创建用户 #前端注册页面地址 http://127.0.0.1:5000/register # print(request.body) # dict = json.loads(request.body) # import jwt # jwt.encode() json_str = request.body if not json_str: result = {'code': 201, 'error': 'Please give me data'} return JsonResponse(result) #把客户端拿取的json串转化为字符串 json_obj = json.loads(json_str) username = json_obj.get('username') if not username: result = {'code': 202, 'error': 'Please give me username'} return JsonResponse(result) email = json_obj.get('email') if not email: result = {'code': 203, 'error': 'Please give me email'} return JsonResponse(result) password_1 = json_obj.get('password_1') password_2 = json_obj.get('password_2') if not password_1 or not password_2: result = {'code': 204, 'error': 'Please give me password'} return JsonResponse(result) if password_1 != password_2: result = {'code': 205, 'error': 'Your password not same'} return JsonResponse(result) #优先查询当前用户名是否已存在 old_user = UserProfile.objects.filter(username=username) if old_user: result = {'code': 206, 'error': 'Your username is already existed'} return JsonResponse(result) #密码处理 md5哈希/散列 m = hashlib.md5() m.update(password_1.encode()) #======charfield 尽量避免使用 null=True sign = info = '' try: UserProfile.objects.create(username=username, nickname=username, password=m.hexdigest(), sign=sign, info=info, email=email) except Exception as e: #数据库down了, 用户名已存在 result = {'code': 207, 'error': 'Server is busy'} return JsonResponse(result) #make token token = make_token(username) #正常返回给前端 result = { 'code': 200, 'username': username, 'data': { 'token': token.decode() } } return JsonResponse(result) elif request.method == 'PUT': #http://127.0.0.1:5000/<username>/change_info #更新数据 #此头可获取前端传来的token #META可拿取http协议原生请求头,META 也是类字典对象,可使用 #字典相关方法 #特别注意 http头有可能被django重命名,建议百度 request.META.get('HTTP_AUTHORIZATION') user = request.user json_str = request.body if not json_str: result = {'code': 209, 'error': 'Please give me json'} return JsonResponse(result) json_obj = json.loads(json_str) if 'sign' not in json_obj: result = {'code': 210, 'error': 'no sign'} return JsonResponse(result) if 'info' not in json_obj: result = {'code': 211, 'error': 'no info'} return JsonResponse(result) sign = json_obj.get('sign') info = json_obj.get('info') request.user.sign = sign request.user.info = info request.user.save() result = {'code': 200, 'username': request.user.username} return JsonResponse(result) else: raise KeyError
def users(request, username=None): if request.method == 'GET': if username: try: user = models.UserProfile.objects.get(username=username) except models.UserProfile.DoesNotExist: user = None if not user: result = {'code': 208, 'error': 'The user not exist'} return JsonResponse(result) if request.GET.keys(): data = {} for k in request.GET.keys(): if hasattr(user, k): data[k] = getattr(user, k) result = {'code': 200, 'username': username, 'data': data} return JsonResponse(result) else: data = { 'info': user.info, 'sign': user.sign, 'nickname': user.nickname, 'avatar': str(user.avatar), 'email': user.email } result = {'code': 200, 'username': username, 'data': data} return JsonResponse(result) else: users = models.UserProfile.objects.all() res = [] for u in users: data = {} data['username'] = u.username data['email'] = u.email res.append(data) result = {'code': 200, 'data': res} return JsonResponse(result) elif request.method == 'POST': json_str = request.body if not json_str: result = {'code': 202, 'error': 'Please Post Data'} return JsonResponse(result) json_obj = json.loads(json_str) username = json_obj.get("username") email = json_obj.get("email") password_1 = json_obj.get("password_1") password_2 = json_obj.get("password_2") if not username: result = {'code': 203, 'error': 'Please give me username'} return JsonResponse(result) if not email: result = {'code': 204, 'error': 'Please give me email'} return JsonResponse(result) if not password_1 or not password_2: result = {'code': 205, 'error': 'Please give me Password'} return JsonResponse(result) if password_1 != password_2: result = {'code': 206, 'error': 'Password not equal'} return JsonResponse(result) old_user = models.UserProfile.objects.filter(username=username) if old_user: result = {'code': 207, 'error': 'The username is existed!!!'} return JsonResponse(result) h_p = hashlib.sha1() h_p.update(password_1.encode()) try: models.UserProfile.objects.create(username=username, nickname=username, email=email, password=h_p.hexdigest()) except Exception as e: print("UserProfile create error is %s" % (e)) result = {'code': 207, 'error': 'The username is existed!!!'} return JsonResponse(result) token = make_token(username) result = { 'code': 200, 'username': username, 'data': { 'token': token.decode() } } return JsonResponse(result) elif request.method == 'PUT': # users=models.UserProfile.objects.filter(username=username) # if not users: # result={'code':208,'error':'The user is not exist'} # return JsonResponse(result) user = request.user json_str = request.body if not json_str: result = {'code': 202, 'error': 'Please Put Data'} return JsonResponse(result) json_obj = json.loads(json_str) nickname = json_obj.get("nickname") if not nickname: result = {'code': 209, 'error': "The nickname is none!"} return JsonResponse(result) sign = json_obj.get('sign', '') info = json_obj.get('info', '') # 存 user.sign = sign user.info = info user.nickname = nickname user.save() result = {'code': 200, 'username': username} return JsonResponse(result)