当前位置:   article > 正文

大数据毕业设计:租房数据分析可视化大屏+58同城 Django框架(附源码)✅_在线租房系统毕业设计

在线租房系统毕业设计

博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌感兴趣的可以先收藏起来,点赞、关注不迷路✌

毕业设计:2023-2024年计算机毕业设计1000套(建议收藏)

毕业设计:2023-2024年最新最全计算机专业毕业设计选题汇总

1、项目介绍

技术栈:

python租房数据分析可视化系统 毕业设计 58同城

python语言、MySQL数据库、Django框架、Echarts可视化

2、项目界面

(1)租房数据可视化大屏
在这里插入图片描述

(2)租房数据管理
在这里插入图片描述

(3)系统首页

在这里插入图片描述

(4)租房数据条件查询
在这里插入图片描述
(5)评论功能
在这里插入图片描述

(6)租房数据
在这里插入图片描述

3、项目说明

租房数据分析可视化系统是一个基于python语言、MySQL数据库、Django框架和Echarts可视化技术开发的系统。该系统旨在帮助用户通过对租房数据进行分析和可视化展示,提供更直观、全面的租房市场信息,以便用户做出更明智的租房决策。

系统主要包括以下功能:

  1. 数据采集与存储:系统通过爬虫技术从58同城等租房网站上采集租房相关数据,并将其存储到MySQL数据库中,包括房源信息、租金、房屋面积、地理位置等各项数据。

  2. 数据清洗与处理:对采集到的数据进行清洗和处理,包括去除重复数据、处理缺失值、格式化数据等,以确保数据的准确性和一致性。

  3. 数据分析与统计:通过对租房数据进行统计和分析,提取出各种有价值的信息,包括不同城市的租金分布、租房面积分布、租房热门区域等,为用户提供全面的租房市场概况。

  4. 可视化展示:利用Echarts可视化技术,将分析结果以图表的形式展示给用户,包括柱状图、饼图、地图等,使用户更直观地了解租房市场的情况。

  5. 用户管理与权限控制:系统提供用户管理功能,包括用户注册、登录、密码找回等,同时还可以根据用户的身份和权限,控制其对系统功能的访问和使用。

通过租房数据分析可视化系统,用户可以快速了解租房市场的情况,包括租金水平、热门区域、房屋面积分布等,从而更好地选择合适的租房房源。同时,系统还可以为租房从业人员、房产中介等提供市场调研和决策支持。

4、核心代码

# -*- coding: utf-8 -*-
import random
import time
from urllib import parse
from datetime import date, datetime
from django.shortcuts import redirect
from ..common.helper import *
from ..common.vercode import *
from simple_mysql import db as mysql
import base64


# 处理时间对象序列化问题
class DateEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.strftime("%Y-%m-%d %H:%I:%S")
        elif isinstance(obj, date):
            return obj.strftime("%Y-%m-%d")
        else:
            return json.JSONEncoder.default(self, obj)


def index(request):
    '''
    重定向到前端主页
    :param request:
    :return:
    '''
    return redirect('/dist/index.html')

#从前端获取传递的参数后,在数据库中查询相关信息并给出结果。
#和数据库进行交互
# 登录
def login(request):
    name = request.POST.get("username")
    password = request.POST.get("pwd")
    role = request.POST.get("role", 1)

    if request.session.get('verify') != request.POST.get("code"):
        return jsonResponse(1, '验证码错误')

    db = mysql().connection(DATABASE)
    user = db.table('user').where({"name": name, "pass": password, "role": role}).find()
    print(user)
    if user is None:
        return jsonResponse(1, '账号或者密码错误')
    else:
        timestamp = time.time()
        token = md5(str(user["id"]) + user["pass"] + str(timestamp))
        db.table('user').where({"id": user["id"]}).save({"token": token})
        data = {
            "token": token,
            "user": user
        }
        return jsonResponse(0, '登录成功', data)


# 注册
def register(request):
    name = request.POST.get("username")
    password = request.POST.get("pwd")

    if len(password) > 10 or len(password) < 6:
        return jsonResponse(1, '密码位数应大于6小于10')
    db = mysql().connection(DATABASE)
    result = db.table('user').where({"name": name}).find()

    if result:
        return jsonResponse(1, '用户名已经注册')

    user = db.table('user').add({
        "name": name,
        "pass": password,
        "role": 1
    })

    if user:
        return jsonResponse(0, '注册成功')

    return jsonResponse(1, '注册失败')


# 上传文件
def upload(request):
    content = request.FILES.get("file", None)
    file_dir = os.path.join(UPLOAD_DIR, time.strftime('%Y%m%d'))

    if not os.path.exists(file_dir):
        os.makedirs(file_dir)

    file = os.path.join(file_dir, content.name)
    storage = open(file, 'wb+')
    for chunk in content.chunks():
        storage.write(chunk)
    storage.close()
    dir = '/static/uploads/{}/{}'.format(time.strftime('%Y%m%d'), content.name)
    return jsonResponse(0, '上传成功', dir)


# 使用pillow生成验证码
def verify(request):
    code = imageCode()
    code.getVerifyCode()
    image, text = code.getVerifyCode()
    # 图片以二进制形式写入
    buf = BytesIO()
    image.save(buf, 'jpeg')
    buf_str = buf.getvalue()
    request.session['verify'] = text
    return jsonResponse(0, '验证码生成成功', {"code": str(base64.b64encode(buf_str), 'utf-8'), "value": text})


def house(request):
    if request.method == "GET":
        page = request.GET.get("page", 1)
        limit = request.GET.get("limit", 10)
        keyword = request.GET.get("keyword")
        area = request.GET.get("area")
        price = request.GET.get("price")
        room = request.GET.get("room")
        type = request.GET.get("type")

        id = request.GET.get("id")
        condition = {}
        db = mysql().connection(DATABASE)

        if keyword:
            # 解码url中文参数keyword
            condition["city"] = ["LIKE", "%{}%".format(parse.unquote_plus(keyword)), "", "e"]
        if area:
            if "以上" in area:
                condition["room_area"] = ["GT", area.replace("以上", ""), "", "e"]
            else:
                min_area = area.split("-")[0]
                max_area = area.split("-")[1].replace("㎡", "").replace("以上", "")
                condition["room_area"] = ["BETWEEN", [min_area, max_area], '', 'e']
        if price:
            if "以上" in price:
                condition["price"] = ["GT", price.replace("万", "").replace("以上", ""), "", "e"]
            else:
                min_price = price.split("-")[0]
                max_price = price.split("-")[1].replace("/月", "")
                condition["price"] = ["BETWEEN", [min_price, max_price], '', 'e']
        if room:
            condition["room"] = ["LIKE", "%{}%".format(room.replace("以上", "")), "", "e"]
        if type:
            condition["type"] = type

        if len(condition) > 0:
            count = db.table('house').where(condition).count()
            data = db.table('house').where(condition).page(page, limit).order("id desc").select()
        elif id:
            data = db.table('house').where({"id": id}).find()
            return jsonResponse(0, 'success', data)
        else:
            count = db.table('house').count()
            data = db.table('house').page(page, limit).order('id desc').select()
        return jsonResponse(0, 'success', data, count)
    elif request.method == "POST":
        pass
    elif request.method == "PUT":
        pass
    elif request.method == "DELETE":
        # 删除数据
        db = mysql().connection(DATABASE)
        id = request.GET.get("id")
        result = db.table('house').where({"id": id}).delete()
        if result:
            return jsonResponse(0, '删除成功')
        return jsonResponse(1, '删除失败')


def news(request):
    db = mysql().connection(DATABASE)
    if request.method == "GET":
        page = request.GET.get("page", 1)
        limit = request.GET.get("limit", 10)
        keyword = request.GET.get("keyword")
        id = request.GET.get("id")
        category = request.GET.get("category")
        condition = {}
        db = mysql().connection(DATABASE)

        if id:
            uid = request.GET.get("uid")
            data = db.table("news").where({"id": id}).find()
            # 记录浏览量
            db.table("news").where({"id": id}).save({"view": data["view"] + 1})
            # db.table("news").where({"id": id}).setInc("view")

            word_list = get_words(data["title"])
            count = ",".join([i[0] for i in word_list])
        elif keyword:
            # 解码url中文参数keyword
            q = parse.unquote_plus(keyword)
            condition["title"] = ["LIKE", "%{}%".format(q), "", "e"]
            count = db.table('news').where(condition).count()
            data = db.table('news').where(condition).page(page, limit).order("view desc,reply desc").select()

        else:
            if category:
                condition["category"] = category
                count = db.table('news').where(condition).count()
                data = db.table('news').where(condition).page(page, limit).order('id desc').select()
            else:
                count = db.table('news').count()
                data = db.table('news').page(page, limit).order('id desc').order("view desc,reply desc").select()
        return jsonResponse(0, 'success', data, count)
    elif request.method == "POST":
        data = json.loads(request.body.decode('utf-8'))

        res = db.table('news').add(data)

        if res:
            result = {"code": 0, "msg": "添加成功"}
        else:
            result = {"code": 1, "msg": "添加失败"}

        return JsonResponse(result)
    elif request.method == 'PUT':
        data = json.loads(request.body.decode('utf-8'))
        id = data.get("id")

        res = db.table('news').where({"id": id}).save(data)

        if res:
            result = {"code": 0, "msg": "操作成功"}
        else:
            result = {"code": 1, "msg": "操作失败"}

        return JsonResponse(result)
    elif request.method == "DELETE":
        # 删除数据

        id = request.GET.get("id")
        result = db.table('news').where({"id": id}).delete()
        if result:
            return jsonResponse(0, '删除成功')
        return jsonResponse(1, '删除失败')

def data(request):
    '''
    分析数据
    '''
    db = mysql().connection(DATABASE)

    room = db.table("house").group("room").field("room as name,avg(price) as value").order("value desc").limit(
        10).group("room").select()

    address = db.table("house").field("name,price").select()

    address_list = [i["name"] for i in address]

    text = " ".join(address_list)

    keyword = get_words(text)

    room_area_line = db.table("house").field("room_area as name,count(*) as value").group("room_area").select()

    area = db.table("house").field("room as name,price as value").order("name asc").select()

    statis = db.table("house").field("name,statis as value").order("value desc").limit(10).select()

    room_type = db.table("house").field("room_type as name,count(*) as value").order("value desc").group(
        "room_type").limit(10).select()

    bj_area_price = db.table("house").where("city = '北京'").field("area as name,price as value").order(
        "value desc").select()

    bj_area_price = [[i["name"].split(",")[0], i["value"]] for i in bj_area_price]

    hot_city = db.table("house").group("city").field("city as name,count(*) as value").order("value desc").select()

    data = {
        "room": room,
        "keyword": keyword,
        "area": area,
        "statis": statis,
        "room_type": room_type,
        "bj_area_price": bj_area_price,
        "hot_city": hot_city,
        "room_area_line": room_area_line
    }

    return jsonResponse(0, '成功', data)


def user(request):
    db = mysql().connection(DATABASE)
    if request.method == "GET":
        page = request.GET.get("page")
        limit = request.GET.get("limit")
        key = request.GET.get("key")
        id = request.GET.get("id")
        keyword = request.GET.get("keyword")
        condition = {}
        if keyword:
            condition["name"] = ["LIKE", "%{}%".format(keyword), "", "e"]
            count = db.table('user').where(condition).count()
            data = db.table('user').where(condition).page(page, limit).order('id desc').select()
        elif id:
            count = db.table('user').where({"id": id}).count()
            data = db.table('user').where({"id": id}).order('id desc').find()
        else:
            count = db.table('user').count()
            data = db.table('user').page(page, limit).order('id desc').select()
        return jsonResponse(0, 'success', data, count)
    elif request.method == "PUT":
        data = json.loads(request.body)
        id = data.get("id")
        result = db.table('user').where({"id": id}).save(data)
        if result:
            return jsonResponse(0, '修改成功')
        return jsonResponse(1, '修改失败')
    elif request.method == "POST":
        data = json.loads(request.body)
        result = db.table('user').add(data)
        if result:
            return jsonResponse(0, '添加成功')
        return jsonResponse(1, '添加失败')
    elif request.method == "DELETE":

        id = request.GET.get("id")
        result = db.table('user').where({"id": id}).delete()
        if result:
            return jsonResponse(0, '删除成功')
        return jsonResponse(1, '删除失败')




  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/661529
推荐阅读
相关标签