示例#1
0
    def _wrapped_view(request,*args,**kwargs):
        userpk = None
        token = None
        basic_auth = request.META.get('HTTP_AUTHORIZATION')
        userpk = request.POST.get('id', request.GET.get('id'))
        # userpk = request.POST.get('userpk')
        token = request.POST.get('token', request.GET.get('token'))
        # token = request.POST.get('token')
        # print userpk,token
        if not (userpk and token) and request.body:
        # print request.body
            try:
                request_data= json.loads(request.body)
            except Exception:
                return JsonError("data should be json")
            else:
                userpk = request_data['id']
                token = request_data['token']
        if not (userpk and token) and basic_auth:
            auth_method, auth_string = basic_auth.split(' ', 1)

            if auth_method.lower() == 'basic':
                auth_string = b64decode(auth_string.strip())
                userpk, token = auth_string.decode().split(':', 1)
        if not (userpk and token):
            return JsonError("Must include 'id' and 'token' parameters with request.")
        # print userpk,token
        result = authenticate(pk=userpk, token=token)
        # print user
        if isinstance(result,User):

            request.user = result
            return view_func(request, *args, **kwargs)
        else:
            return result
示例#2
0
def upload_ava(request):
    try:
        # data =UPLOAD_PIC_2
        data = json.loads(request.body)
        avatar = data["avatar"]
        id = data["id"]
        user = AuthUser.objects.get(id=id)
        try:
            pic_url = save_pic(avatar[1:-1].replace(" ", ""), id)
        except Exception, e:
            return JsonError("save pic fail")
        try:
            user_inf_set = user.userinformation_set.all()
            if len(user_inf_set) == 0:
                value = {
                    'height': "165",
                    'weight': "55",
                    'sex': "男",
                    'birth': "1990-01-01"
                }
                user_inf = UserInformation(user_avatar=pic_url)
                user_inf.user = user
            else:
                user_inf = user_inf_set[0]
                user_inf.user_avatar = pic_url  #更新url,虽然id相同但后缀可能不同
            user_inf.save()

            result = {}
            result["avatar"] = DOMAIN + user_inf.user_avatar
            return JsonResponse(result)

        except Exception, e:
            # print e.message
            return JsonError("inf Fail")
示例#3
0
def check_token_in_cache_encode(data):
    token = data['token']
    userpk= data['userpk']

    # time_signer.unsign(token)
    userpk_origin = get_userpk(token)
    # print userpk_origin
    if userpk_origin:
        user_str = "userpk"+"-"+str(userpk_origin)
        value = user_str+":"+token
        try:
            time_signer.unsign(value,max_age=max_age)
        except Exception,e:
            # print e.message
            delete_token(token)
            return None,JsonError("expired please login in again")
        else:
            userpk_str = str(userpk_origin)+":"+str(userpk)
            # print userpk_str,type(userpk_str),id(userpk_str)
            userpk_sige_str=user_signer.sign(userpk_origin)
            # print userpk_sige_str,type(userpk_sige_str),id(userpk_sige_str)
            if userpk_str ==userpk_sige_str:
                #更新token时间?
                user = User.objects.get(pk=userpk_origin)
                return user,HttpResponse("succeed")
            else:
                return None,JsonError("Login in Fail PK ")
示例#4
0
def upload_result(request):
    # with open("")
    # return JsonResponse(RUNNING_RESULT)
    try:
        # r_r =RUNNING_RESULT_2
        r_r = json.loads(request.body)
    except Exception, e:
        return JsonError("json format error")
示例#5
0
def createUser(**kwargs):
    username = kwargs['username']
    password = kwargs['password']
    email = kwargs['email']
    try:
        user = User.objects.create_user(username, email, password)
    except IntegrityError:
        JsonError("Fail")
示例#6
0
def get_month_res(request):
    # data = MONTH_REQUEST
    try:
        data = json.loads(request.body)
        id = data["id"]
        month = data["month"]
        user = AuthUser.objects.get(id=1)
        # print user.username
        year, month = data["month"].split("-")[0], data["month"].split("-")[1]
        rs = user.runningresult_set.filter(
            running_result_starttime__year=year,
            running_result_starttime__month=month)

        # from django.core import serializers
        # data =serializers.serialize("json",rs)
        # print data
        # print "````````````````````````"
        # print rs[0].toJSON()
        result = []
        # print rs
        if rs != None:
            for every_res in rs:
                #每个跑步结果的坐标集
                res = {}
                res["distance"] = every_res.running_result_distance

                sp = every_res.running_result_duration

                # print str(every_res.running_result_duration)
                # sp = time.strptime(str(every_res.running_result_duration),'%H:%M:%S')
                # res["duration"]=str(sp.tm_sec+sp.tm_min*60+sp.tm_hour*3600)
                res["duration"] = str(sp.second + sp.minute * 60 +
                                      sp.hour * 3600)
                res["starttime"] = str(every_res.running_result_starttime)
                res["endtime"] = str(every_res.running_result_endtime)
                res["running_result_id"] = str(every_res.running_result_id)
                # print res["duration"]
                res["locations"] = []
                loc_set = every_res.locations_set.all()
                # from django.core import serializers
                # data =serializers.serialize("json",loc_set)
                # print data
                for every_loc in loc_set:
                    el = {}
                    el["latitude"] = every_loc.latitude
                    el["longitude"] = every_loc.longitude
                    # el["time"]=time.mktime(time.strptime(every_loc.time, '%Y-%m-%d %H:%M:%S'))
                    el["time"] = str(
                        int(time.mktime(every_loc.time.timetuple())))
                    # print el["time"]
                    res["locations"].append(el)
                result.append(res)

        return JsonResponse({"run": result})
    except Exception, e:
        return JsonError(e.message)
示例#7
0
def check_token_in_cache(data):
    token = data['token']
    userpk= data['userpk']
    userpk_origin = get_userpk(token)
    if userpk_origin:
        # try :
        user_str = "userpk"+"-"+str(userpk_origin)
        value = user_str+":"+token
        try:
            time_signer.unsign(value,max_age=max_age)
        except Exception,e:
            # print e.message
            delete_token(token)
            return None,JsonError("expired please login in again")
        else:
            if userpk ==userpk_origin:
                user = User.objects.get(pk=userpk_origin)
                return user,JsonResponse({})
            else:
                return None,JsonError("Login in Fail PK ")
示例#8
0
def change_inf(request):
    try:
        # data = USER_INF
        data = json.loads(request.body)
        # avatar = getattr(data,"user_avatar",None)
        user_id = data["id"]
        try:
            user = AuthUser.objects.get(id=user_id)
        except AuthUser.DoesNotExist, e:
            return JsonError("id is not valid")
        #修改真实名字
        realname = data["realname"]
        # print realname
        user.first_name = realname[:-2]
        user.last_name = realname[-2:]
        user.save()
        del data["id"]
        del data["token"]
        del data["realname"]
        # avatar =data["user_avatar"]
        #上传图片返回连接
        # print len(avatar)

        # data["user_avatar"]=pic_url
        try:
            user_inf_set = user.userinformation_set.all()
            if len(user_inf_set) == 0:
                user_inf = UserInformation(**data)
                user_inf.user = user
                user_inf.save()
            else:
                user_inf_set.update(**data)
                user_inf = user_inf_set[0]
                # user_inf.user_avatar = getattr(data,"user_avatar",None)
                # user_inf.user_height = getattr(data,"user_height",None)
                # user_inf.user_weight = getattr(data,"user_weight",None)
                # user_inf.user_sex = getattr(data,"user_sex",None)
        except Exception, e:
            # print e.message
            return JsonError("inf Fail")
示例#9
0
def change_pwd(request):
    try:
        # data=PWD
        data = json.loads(request.body)
        id = data["id"]
        a_user = AuthUser.objects.get(id=id)
        username = a_user.username
        password = data["old_password"]
        new_password = data["new_password"]

        if username and password:
            user = authenticate(username=username, password=password)

            if user and user.is_active:
                user.set_password(new_password)
                user.save()
                return JsonResponse()
            else:
                return JsonError("password is not valid")
        else:
            return JsonError("Fail")

    except Exception, e:
        return JsonError(e.message)
示例#10
0
def walk_test(request):
    return JsonResponse(DOMAIN)
    try:
        walk = WALK
        user = AuthUser.objects.get(id=walk["id"])
        time_tmp = datetime.datetime.now()
        walk_set = walk["walk"]
        for i in walk_set:
            oneDayAgo = (time_tmp - datetime.timedelta(days=1))
            otherStyleTime = oneDayAgo.strftime("%Y-%m-%d")
            time_tmp = oneDayAgo
            walk_obj = Walk(time=otherStyleTime, value=i)
            walk_obj.user = user
            walk_obj.save()
    except Exception, e:
        return JsonError("fail")
示例#11
0
def get_month_ranking(request):
    try:
        # data = MONTH_RANK
        data = json.loads(request.body)
        # year,month =data["time"].split("-")
        # rs_sort =RunningResult.objects.filter(running_result_starttime__year=year)\
        #         .filter(running_result_starttime__month=month)\
        #         .extra({'running_result_distance_de':"CAST(running_result_distance as DECIMAL)"})\
        #         .order_by('-running_result_distance_de')\
        #         .values('user_id').annotate(ds=Count("user_id"))
        # print rs_sort
        year_month = data["time"]
        res = my_custom_sql(year_month)  #获取当月的所有记录。然后再找自己的记录
        # print res
        result = {}
        #得到自身排名
        for index, values in enumerate(res):
            if values["user_id"] == int(data["id"]):
                result["my_ranking"] = str(index + 1)
                # print index,type(values["user_id"])
        page = int(data["page"])
        interval = int(data["interval"])
        strat = (page - 1) * interval
        #获取排名列表
        r = res[strat:strat + 5]
        for i in r:
            sum = str(i.pop("amount_sum"))
            id = i.pop("user_id")
            user = AuthUser.objects.get(id=id)
            i["username"] = user.username
            i["sum"] = sum
            #获取头像
            user_inf_set = user.userinformation_set.all()
            if len(user_inf_set) == 0:
                res_avatar = defalut_avatar
            else:
                user_inf = user_inf_set[0]
                res_avatar = defalut_avatar if user_inf.user_avatar == "" else user_inf.user_avatar
            i["avatar"] = DOMAIN + res_avatar

        result["ranking"] = r
        return JsonResponse(result)
    except Exception, e:
        return JsonError(e.message)
示例#12
0
def return_first_three(my_rs):
    # RunningResult.objects.all()
    #返回距离前三名
    #将mysql里面的distance(varchar)转换为小数
    try:
        rs_sort =RunningResult.objects.all()\
        .extra({'running_result_distance_de':"CAST(running_result_distance as DECIMAL)"})\
        .order_by('-running_result_distance_de')
        rs_fir_thr = rs_sort[:3]

        # my_rs = RunningResult.objects.get(running_result_id=9)
        result = {}
        run = []
        #个人排名
        my_ranking = list(rs_sort.values_list(
            'running_result_id', flat=True)).index(my_rs.running_result_id) + 1
        result["my_ranking"] = str(my_ranking)
        result["running_result_id"] = my_rs.running_result_id
        #返回前三
        for i in rs_fir_thr:
            data = {}
            data['username'] = i.user.username
            data['distance'] = i.running_result_distance
            run.append(data)
        result["three"] = run

        # print type(rs_sort)
        # print rs_sort.index(my_rs)
        # print rs_sort[2] ==my_rs
        # for index, item in enumerate(rs_sort):
        #     # print index,type(item)
        #     print my_rs.running_result_id,item.running_result_id
        #     if item.running_result_id == my_rs.running_result_id:
        #         print index
        #         break
        #     print "end"

        # print rs_sort.index(my_rs)
        return JsonResponse(result)
    except Exception, e:
        # print e.message
        return JsonError("get the first three fail")
示例#13
0
def upload_mul_result(request):
    try:
        mul_res = json.loads(request.body)
        # mul_res=RUNNING_MUL_RESULT
        result = []
        for i in mul_res["run"]:
            one_res = {}
            one_res["id"] = mul_res["id"]
            one_res["run"] = i
            ret = upload_one_result(one_res)
            content = ret.content
            ret_dic = json.loads(content)
            if ret_dic["success"] == "0":
                return ret
            else:
                result.append(ret_dic['running_result_id'])
            # if isinstance(ret,JsonError):
            #     pass
        return JsonResponse({"running_result_id": result})
    except Exception, e:
        return JsonError(e.message)
示例#14
0
def get_ranking(request):
    try:
        # data=RANK
        data = json.loads(request.body)
        r_r_id = data["running_result_id"]
        r_r = RunningResult.objects.get(running_result_id=r_r_id)
        r_r_start = str(r_r.running_result_starttime)
        # r_r_start
        day = time.strptime(r_r_start, '%Y-%m-%d %H:%M:%S').tm_mday
        month = time.strptime(r_r_start, '%Y-%m-%d %H:%M:%S').tm_mon
        year = time.strptime(r_r_start, '%Y-%m-%d %H:%M:%S').tm_year
        # print r_r_start,day,month,year

        rs_sort =RunningResult.objects.filter(running_result_starttime__year=year)\
            .filter(running_result_starttime__month=month)\
            .filter(running_result_starttime__day=day)\
            .extra({'running_result_distance_de':"CAST(running_result_distance as DECIMAL)"})\
            .order_by('-running_result_distance_de')
        result = {}
        #个人排名
        my_ranking = list(rs_sort.values_list(
            'running_result_id', flat=True)).index(r_r.running_result_id) + 1
        result["my_ranking"] = str(my_ranking)
        #根据需求返回列表
        page = int(data["page"])
        interval = int(data["interval"])
        start = (page - 1) * interval
        rs_list = rs_sort[start:start + interval]
        print rs_sort, rs_list
        rank = []
        for i in rs_list:
            evr = {}
            rs_user = i.user
            evr["username"] = rs_user.username
            evr["distance"] = i.running_result_distance
            rank.append(evr)
        result["ranking"] = rank
        return JsonResponse(result)
    except Exception, e:
        return JsonError(e.message)
示例#15
0
                        inf = user.userinformation_set.all()
                        if len(inf) != 0:
                            inf = inf[0]
                            data["avatar"] = DOMAIN + inf.user_avatar
                            data["height"] = inf.user_height
                            data["weight"] = inf.user_weight
                            data["sex"] = inf.user_sex
                            data["birth"] = str(inf.user_birth)
                        return JsonResponse(data)
                    else:

                        return JsonError("用户被关进小黑屋")
                else:
                    return JsonError("用户已经存在")
            else:
                return JsonError("用户名、密码和姓名不能为空")

                # print request_data
                # return HttpResponse(request.body,content_type="application/json")
                # print request_data
            # print username,password
            # data['username']=username
            # data['password']=password
            # return HttpResponse(json.dumps(data),content_type="application/json")

        return JsonError("请POST请求")
    except Exception, e:
        return JsonError(e.message)


#用户密码登录返回token
示例#16
0
def signup(request):
    data = {}
    # print request.method
    try:
        if request.method == "POST":
            username = request.POST.get('username', None)
            password = request.POST.get('password', None)
            realname = request.POST.get('realname', None)

            if not (username and password and realname):
                # print request.body
                try:
                    request_data = json.loads(request.body, "utf-8")
                    # request_data= simplejson.loads(request.body)
                    username = request_data["username"]
                    password = request_data["password"]
                    realname = request_data["realname"]
                except Exception, e:
                    # print e
                    return JsonError(e.message + "is required")
                # email =request_data['email']
            # print username,password,realname
            if username and password and realname:
                try:
                    # print "test get user"
                    user = User.objects.get(username=username)
                    # print user
                except User.DoesNotExist, e:
                    # print repr(realname)
                    user = User.objects.create_user(username,
                                                    password=password,
                                                    first_name=realname[:-2],
                                                    last_name=realname[-2:])
                    # user = User.objects.create_user(username,password=password,first_name=realname.encode('unicode_escape'))
                    # user = User.objects.create_user(username,password=password,first_name=u"尹子勺")

                    if user and user.is_active:
                        login(request, user)
                        token = make_token_in_cache(user).split(":", 1)[1]

                        #将{token:id}放在redis内
                        redis_data = {
                            'token': token,
                            'userpk': user.pk,
                        }
                        insert_token(redis_data)
                        #将pk加密

                        # userpk_encode = user_signer.sign(user.pk).split(":",1)[1]
                        # data = {
                        #     'token':token,
                        #     'userpk':userpk_encode,
                        # }

                        ##默认值
                        data = {
                            'token': token,
                            'id': str(user.pk),
                            'username': username,
                            'realname': realname,
                            'avatar': DOMAIN + defalut_avatar,
                            'height': "165",
                            'weight': "55",
                            'sex': "男",
                            'birth': "1990-01-01",
                        }
                        user = AuthUser.objects.get(id=user.pk)
                        inf = user.userinformation_set.all()
                        if len(inf) != 0:
                            inf = inf[0]
                            data["avatar"] = DOMAIN + inf.user_avatar
                            data["height"] = inf.user_height
                            data["weight"] = inf.user_weight
                            data["sex"] = inf.user_sex
                            data["birth"] = str(inf.user_birth)
                        return JsonResponse(data)
                    else:

                        return JsonError("用户被关进小黑屋")
                else:
                    return JsonError("用户已经存在")
            else:
示例#17
0
        user_str = "userpk"+"-"+str(userpk_origin)
        value = user_str+":"+token
        try:
            time_signer.unsign(value,max_age=max_age)
        except Exception,e:
            # print e.message
            delete_token(token)
            return None,JsonError("expired please login in again")
        else:
            if userpk ==userpk_origin:
                user = User.objects.get(pk=userpk_origin)
                return user,JsonResponse({})
            else:
                return None,JsonError("Login in Fail PK ")
    else:
        return None,JsonError("token is not valid ")


#根据token和userpk判断是否出现和篡改
def check_token_in_cache_encode(data):
    token = data['token']
    userpk= data['userpk']

    # time_signer.unsign(token)
    userpk_origin = get_userpk(token)
    # print userpk_origin
    if userpk_origin:
        user_str = "userpk"+"-"+str(userpk_origin)
        value = user_str+":"+token
        try:
            time_signer.unsign(value,max_age=max_age)
示例#18
0
def upload_one_result(running_result):
    running_result_id = 0
    r_r = running_result

    try:
        userpk = r_r["id"]
        user = AuthUser.objects.get(id=userpk)

        run = r_r["run"]

        locations = run["locations"]
        # print locations

        locations_sorted = sorted(locations,
                                  lambda x, y: int(x["time"]) - int(y["time"]))

        starttime = change_time_from_str_to_datatime(
            locations_sorted[0]["time"])
        endtime = change_time_from_str_to_datatime(
            locations_sorted[-1]["time"])
        #跑步结果对象
        run_res_value = {
            "running_result_distance":
            run["distance"],
            "running_result_duration":
            time.strftime('%H:%M:%S', time.gmtime(float(run["duration"]))),
            "running_result_starttime":
            starttime,
            "running_result_endtime":
            endtime,
        }

    except Exception:
        return JsonError("user is not valid")
    #创建事务
    try:

        with transaction.atomic():
            re = RunningResult(**run_res_value)
            re.user = user
            re.save()
            # print "re success"
            running_result_id = re.running_result_id
            # re = RunningResult.objects.get(running_result_id=4)
            #根据run对象创建其所有locations
            for ls in locations_sorted:
                # print ls
                #每个location对象
                loc_value = {
                    "latitude": ls["latitude"],
                    "longitude": ls["longitude"],
                    "time": change_time_from_str_to_datatime(ls["time"]),
                    # "time":213
                }

                loc_obj = Locations(**loc_value)
                loc_obj.running_result = re
                loc_obj.save()
            # print "loc success"
    except Exception, e:
        # print e.message
        return JsonError("upload fail")
示例#19
0
            locations_sorted[-1]["time"])
        #跑步结果对象
        run_res_value = {
            "running_result_distance":
            run["distance"],
            "running_result_duration":
            time.strftime('%H:%M:%S', time.gmtime(float(run["duration"]))),
            "running_result_starttime":
            starttime,
            "running_result_endtime":
            endtime,
        }

    except Exception, e:
        # print e.message
        return JsonError("json parameter is not valid")

    #创建事务
    try:

        with transaction.atomic():
            re = RunningResult(**run_res_value)
            re.user = user
            re.save()
            # print "re success"

            # re = RunningResult.objects.get(running_result_id=4)
            #根据run对象创建其所有locations
            for ls in locations_sorted:
                # print ls
                #每个location对象
示例#20
0
def login_from_pwd(request):
    try:
        username = None
        password = None
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
            # username="******"fhttp://127.0.0.1/
            # password="******"
            if not (username and password):
                # print request.body
                request_data = json.loads(request.body)
                username = request_data["username"]
                password = request_data["password"]
                # print username,password
            if username and password:
                user = authenticate(username=username, password=password)

                if user and user.is_active:
                    login(request, user)
                    token = make_token_in_cache(user).split(":", 1)[1]

                    #将{token:id}放在redis内
                    redis_data = {
                        'token': token,
                        'userpk': user.pk,
                    }
                    insert_token(redis_data)
                    #将pk加密

                    # userpk_encode = user_signer.sign(user.pk).split(":",1)[1]
                    # data = {
                    #     'token':token,
                    #     'userpk':userpk_encode,
                    # }
                    #不加密
                    username = user.username
                    realname = user.first_name + user.last_name

                    data = {
                        'token': token,
                        'id': str(user.pk),
                        'username': username,
                        'realname': realname,
                        'avatar': DOMAIN + defalut_avatar,
                        'height': "165",
                        'weight': "55",
                        'sex': "男",
                        'birth': "1990-01-01",
                    }
                    user = AuthUser.objects.get(id=user.pk)
                    inf = user.userinformation_set.all()
                    if len(inf) != 0:
                        inf = inf[0]
                        if inf.user_avatar != None:
                            data["avatar"] = DOMAIN + inf.user_avatar
                        if inf.user_weight != None:
                            data["weight"] = inf.user_weight
                        if inf.user_sex != None:
                            data["sex"] = inf.user_sex
                        if inf.user_birth != None:
                            data["birth"] = str(inf.user_birth)
                        if inf.user_height != None:
                            data["height"] = inf.user_height

                    # print data
                    return JsonResponse(data)
                else:
                    return JsonError("Fail")
            else:
                return JsonError("username and password is required")
        else:
            return JsonError("POST is required")
    except Exception, e:
        return JsonError(e.message)