Ejemplo n.º 1
0
def change_user_tel(request):
    """修改密码"""
    username = request.data.get('username')
    tel = request.data.get('tel')
    # 从请求头取得用户口令
    token = request.META.get('HTTP_TOKEN')
    # 取得该用户
    user = User.objects.filter(userid=caches['default'].get(token)).first()
    # 判断用户名是否存在
    user1 = User.objects.filter(username=username).only('username').first()
    user2 = User.objects.filter(tel=tel).only('tel').first()
    print(user)
    print(user1)
    print(user2)
    if (user1 and user1 != user) or (user2 and user2 != user):
        return DefaultResponse(*INFO_EXISTS)
    tel_code = request.data.get('tel_code')
    if tel_code == caches['default'].get(f'{tel}_time'):
        # 验证码失效
        caches['default'].delete_pattern(f'{tel}_time')
        with atomic():
            user.username = username
            user.tel = tel
            user.save()
        return DefaultResponse(*INFO_SUCCESS)
    return DefaultResponse(*CACHE_ERROR)
Ejemplo n.º 2
0
def user_login(request):
    """用户登录"""
    # 取得数据
    username = request.data.get('username')
    password = request.data.get('password')
    # 序列化
    if check_username(
            username) or check_tel(username) and check_password(password):
        password = to_md5_hex(password)
        q = Q(username=username, password=password) | \
            Q(tel=username, password=password)
        user = User.objects.filter(q).first()
        if user:
            user_token = uuid.uuid4()
            caches['default'].set(user_token, user.userid, 3600 * 24)
            loginlog = LoginLog()
            loginlog.user = user.userid
            loginlog.logdate = current_time
            # 获取设备的IP地址
            loginlog.ipaddr = get_ip_address(request)
            # 获取登录设备硬件信息
            loginlog.devcode = get_dev_info(request)
            loginlog.save()
            image_path = BeforPath + user.user_image
            return DefaultResponse(*LOGIN_SUCCESS, {
                'results': {
                    'token': user_token,
                    'user_image_path': image_path
                }
            })
        else:
            return DefaultResponse(*PASSWORD_ERROR)
    else:
        return DefaultResponse(*LOGIN_ERROR)
Ejemplo n.º 3
0
def new_image(request):
    """用户更新当前头像"""
    token = request.META.get('HTTP_TOKEN')
    # 取得图片数据流
    file = request.FILES.get('image_files')
    if file and len(file) <= MAX_PHOTO_SIZE:
        user = User.objects.filter(
            userid=caches['default'].get(token)).only('user_image').first()
        # 自定义的图片处理函数
        file_path = upload_image_to_local(user, file)
        # 拼接地址
        image_path = BeforPath + file_path
        return DefaultResponse(*UPLOAD_IMAGE_SUCCESS, {'results': image_path})
    return DefaultResponse(*UPLOAD_IMAGE_FAIL)
Ejemplo n.º 4
0
def change_password(request):
    """修改密码"""
    password = request.data.get('password')
    password1 = request.data.get('password1')
    # 从请求头取得用户口令
    token = request.META.get('HTTP_TOKEN')
    if check_password(password) and check_password(password1):
        user = User.objects.filter(userid=caches['default'].get(token)).first()
        if user.password == to_md5_hex(password):
            user.password = to_md5_hex(password1)
            user.save()
            return DefaultResponse(*PASSWORD_SUCCESS)
        return DefaultResponse(*OLD_PASSWORD_ERROR)
    return DefaultResponse(*PASSWORD_ILLEGAL)
Ejemplo n.º 5
0
def map_info(request):
    """给定市区,返回地图数据"""
    county = request.query_params.get('county')
    if county == '全部':
        houses = HouseInfo.objects.only('comm_name', 'longitude',
                                        'latitude').all()
    else:
        houses = HouseInfo.objects.filter(county=county).only(
            'comm_name', 'longitude', 'latitude').all()
    data1 = []
    data2 = {}
    # 小区名字列表
    comm_list = []
    for item in houses:
        # 找出每个小区对应的房源个数
        comm_list.append(item.comm_name)
        data2[item.comm_name] = [item.longitude, item.latitude]
    if data2:
        local = data2[random.choice(list(data2))]
    else:
        local = [104.043035, 30.653754]
    # 去掉重复房源
    only_comm = set(comm_list)
    for comm_n in only_comm:
        # 组装房屋个数数据
        data1.append({'name': comm_n, 'value': comm_list.count(comm_n)})
    return DefaultResponse(
        *(200, '请求成功'),
        {'results': {
            'data1': data1,
            'data2': data2,
            'local': local
        }})
Ejemplo n.º 6
0
def my_test2(request):
    """计算各区的平均价格"""
    data1 = [
        '锦江', '青羊', '武侯', '高新', '成华', '金牛', '天府新区', '双流', '温江', '郫都', '龙泉驿',
        '新都', '彭州', '简阳', '青白江', '都江堰'
    ]
    return DefaultResponse()
Ejemplo n.º 7
0
def get_image(request):
    """用户获取当前头像"""
    token = request.META.get('HTTP_TOKEN')
    user = User.objects.filter(
        userid=caches['default'].get(token)).only('user_image').first()
    # 拼接路径
    image_path = BeforPath + user.user_image
    return DefaultResponse(*GET_IMAGE_SUCCESS, {'results': image_path})
Ejemplo n.º 8
0
def find_password(request):
    """找回密码"""
    data = request.data
    serialzer = FindPasswordSerializer(data=data)
    serialzer.is_valid(raise_exception=True)
    # 获取验证码
    tel_code = data.get('tel_code')
    tel = serialzer.validated_data['tel']
    if tel_code == caches['default'].get(f'{tel}_time'):
        # 验证码失效
        caches['default'].delete_pattern(f'{tel}_time')
        # 找到对应用户
        user = User.objects.filter(tel=serialzer.validated_data['tel']).first()
        user.password = to_md5_hex(serialzer.validated_data['password'])
        user.save()
        return DefaultResponse(*FIND_PASSWORD_SUCCESS)
    return DefaultResponse(*CACHE_ERROR)
Ejemplo n.º 9
0
def get_county(request):
    """动态获取地区"""
    city = request.query_params.get('city', '成都市')
    print(city)
    city = CITY_DICT[city]
    url = 'https://%s.lianjia.com/zufang/rs/' % city
    content = get_county_helper(url)
    # return JsonResponse(content, safe=False)
    return DefaultResponse(*(10002, '请求成功'), {'results': content})
Ejemplo n.º 10
0
def get_street(request):
    """动态获取街道"""
    city = request.query_params.get('city', '成都市')
    city = CITY_DICT[city]
    county = request.query_params.get('county', '十陵')
    # 将区域转为拼音
    county = 'gaoxin7' if county == '高新' else pinyin(county)
    url = 'https://%s.lianjia.com/zufang/%s' % (city, county)
    content = get_street_helper(url)
    # return JsonResponse(content, safe=False)
    return DefaultResponse(*(10002, '请求成功'), {'results': content})
Ejemplo n.º 11
0
def user_register(request):
    """用户注册"""
    data = request.data
    print(data)
    serializer = RegisterSerializer(data=data)
    serializer.is_valid(raise_exception=True)
    # 获取验证码
    tel = serializer.validated_data['tel']
    tel_code = request.data.get('tel_code')
    if tel_code == caches['default'].get(f'{tel}_time'):
        # 验证码失效
        caches['default'].delete_pattern(f'{tel}_time')
        with atomic():
            user = User()
            user.password = to_md5_hex(serializer.validated_data['password'])
            user.tel = serializer.validated_data['tel']
            user.username = serializer.validated_data['username']
            user.user_image = DefaultImagePath
            user.save()
        return DefaultResponse(*REGISTER_SUCCESS)
    return DefaultResponse(*CACHE_ERROR)
Ejemplo n.º 12
0
def get_tel_code(request):
    tel = request.query_params.get('tel')
    if not check_tel(tel):
        res = {'code': 40002, 'message': '手机号不合法', 'results': {}}
        raise ParamsException(res)
    # 检查120s内是否发送
    if not caches['default'].get(f'{tel}_limit'):
        # 随机6位数字验证码
        nums = ''.join([str(random.randint(0, 9)) for i in range(6)])
        # 提前缓存,防止双击频繁请求
        caches['default'].set(f'{tel}_limit', nums, timeout=120)
        # 异步发送短信
        aliyu_message.apply_async(
            (nums, tel),
            queue='tel_code_queue',
            countdown=10,
            # retry_policy={},
            # expires=60,
            # compression='zlib',
        )
        return DefaultResponse(*(200, '发送短信成功'))
    return DefaultResponse(*(50002, '发送短信失败,操作过于频繁'))
Ejemplo n.º 13
0
def every_county_count(request):
    """各区总套数"""
    data1 = [
        '锦江', '青羊', '武侯', '高新', '成华', '金牛', '天府新区', '双流', '温江', '郫都', '龙泉驿',
        '新都', '彭州', '简阳', '青白江', '都江堰'
    ]
    data2 = []
    for item in data1:
        data2.append(HouseInfo.objects.filter(county=item).count())
    return DefaultResponse(*(200, '请求成功'),
                           {'results': {
                               'data1': data1,
                               'data2': data2
                           }})
Ejemplo n.º 14
0
def my_test3(request):
    """计算各个面积段的租房数量"""
    data1 = [
        '0-20', '20-50', '50-80', '80-110', '110-140', '140-170', '170-200'
    ]
    data2 = []
    for i in data1:
        data2.append({
            'value':
            HouseInfo.objects.filter(
                Q(area__gt=int(i.split('-')[0]))
                & Q(area__lte=int(i.split('-')[1]))).count(),
            'name':
            i
        })
    return DefaultResponse(*(200, '成功'), {'data': data2})
Ejemplo n.º 15
0
def get_log(request):
    """用户获取登录记录"""
    token = request.META.get('HTTP_TOKEN')
    user = User.objects.filter(
        userid=caches['default'].get(token)).only('user_image').first()
    logs = LoginLog.objects.filter(user=user.userid).order_by('-logdate').all()
    # 以下注释内容为分页显示
    # # 创建一个分页对象,此对象为自己编写的分页类,或者也可以是默认的
    # paginator = CustomPagePagination()
    # # 传入已有的记录
    # logs = paginator.paginate_queryset(logs, request)
    serializer = LoginLogSerializer(data=logs, many=True)
    # 注意这儿不要写 raise_exception=True
    serializer.is_valid()
    datas = serializer.data
    # datas = paginator.get_paginated_response(serializer.data).data
    return DefaultResponse(*GET_LOG_SUCCESS, {'results': datas})
Ejemplo n.º 16
0
def get_user_info(request):
    """用户获取当前个人信息"""
    token = request.META.get('HTTP_TOKEN')
    user = User.objects.filter(
        userid=caches['default'].get(token)).only('user_image').first()
    # 拼接路径
    image_path = BeforPath + user.user_image
    # 用户名
    username = user.username
    # 手机号
    tel = user.tel
    return DefaultResponse(*GET_IMAGE_SUCCESS, {
        'results': {
            'image_path': image_path,
            'username': username,
            'tel': tel
        }
    })
Ejemplo n.º 17
0
def price_county_count(request):
    """各区各价格段总套数"""
    data1 = [
        '锦江', '青羊', '武侯', '高新', '成华', '金牛', '天府新区', '双流', '温江', '郫都', '龙泉驿',
        '新都', '彭州', '简阳', '青白江', '都江堰'
    ]
    price_list = [
        '0-1000', '1000-2000', '2000-3000', '3000-4000', '4000-5000',
        '5000-10000'
    ]
    price_dict = {}
    for pri in price_list:
        data2 = []
        for item in data1:
            data2.append(
                HouseInfo.objects.filter(
                    Q(county=item) & Q(price__lte=pri.split('-')[1])
                    & Q(price__gte=pri.split('-')[0])).count())
            price_dict[pri] = data2
    return DefaultResponse(*(200, '请求成功'), {'results': {'data2': price_dict}})
Ejemplo n.º 18
0
def check_login(request):
    """检查登录是否合法"""
    token = request.META.get('HTTP_TOKEN')
    results = 'success' if caches['default'].get(token) else 'false'
    return DefaultResponse(*(200, '请求成功'), {'results': results})
Ejemplo n.º 19
0
def login_img(request):
    results = [
        '/static/images/log1.jpg', '/static/images/log2.jpg',
        '/static/images/log3.jpg'
    ]
    return DefaultResponse(*(10002, '请求成功'), {'results': results})
Ejemplo n.º 20
0
def user_logout(request):
    """用户退出登录"""
    token = request.META.get('HTTP_TOKEN')
    caches['default'].delete_pattern(token)
    return DefaultResponse(*LOGOUT_SUCCESS)
Ejemplo n.º 21
0
def spider_info(request):
    results = [
        '/static/images/1.jpg', '/static/images/2.jpg', '/static/images/3.jpg',
        '/static/images/4.jpg'
    ]
    return DefaultResponse(*(10002, '请求成功'), {'results': results})
Ejemplo n.º 22
0
 def list(self, request, *args, **kwargs):
     result = super().list(request, *args, **kwargs)
     return DefaultResponse(*(10003, '请求成功'), result.data)