软件系统开发定制基于Python的美食推荐系统Django景点美食管理系统(源码调试+讲解+文档)

💕💕作者:软件系统开发定制计算机源码社
💕💕个人简介:软件系统开发定制本人七年开发经验,擅长Java、软件系统开发定制微信小程序、Python、Android等,软件系统开发定制大家有这一块的问题可软件系统开发定制以一起交流!
💕💕学习资料、程序开发、技术解答、代码讲解、文档报告

💕💕
💕💕
💕💕
💕💕

文章目录

1、项目介绍

  软件系统开发定制随着中国社会经济的快速发展,软件系统开发定制民众的生活质量不断提高,网络一直在改变这人们的生活,包括衣食住行方便都在被网络所渗透。现代生活中,人们为了缓解生活中的精神疲惫,常常选择通过美食来放松身心。随着各地美食的普及程度的提高,意味着人们的生活水平质量不断的在提高。美食不仅会带给我们视觉的享受,同时还会带来身心的一个满足。以往得知好吃的美食大多都是通过周围朋友的口述评价等,这样得知的形式过于狭义,不能代表大多数人的一个评价与口味。另外,由于每一个人的口味差异的不同,大家无法得知其他人对美食的评价。此时就需要通过一个媒介收集大家不同感受并公开于众,有了更多的声音,才能更好的去对美食做一个系统的评论与推荐。

2、核心功能模块

  基于Python的美食推荐系统,选用B/S模式,应用django技术, MySQL为后台数据库。系统主要包括首页,个人中心,美景、美食推荐、地图、评论、收藏、搜索、查看美食视频、查看美景美食资讯新闻、发帖组团同游、美食分类管理、用户管理,分享管理等功能模块。

  基于Python的美食推荐系统的设计与实现的设计思想如下:
  1、操作简单方便、系统界面安全良好:简单明了的页面布局,方便查询景点中的美食相关信息。
  2、即时可见:对美食、景点信息的处理将立马在搜索中可以查询到,从而实现“即时搜素、即时推荐”的系统功能。

  基于Python的美食推荐系统的业务流程图如下所示。
  1.登录流程图

  2.添加信息流程图

  3.注册信息流程图

3、项目展示

3.1 评论美景视频

3.2 查看美食视频

3.3 地图查看美景地点

3.4 搜索美景

3.5 美食推荐

3.6 美食资讯文章

3.7 发帖组团旅游

3.8 后台美食信息管理

4、 核心代码

def handanmeishi_list(request):    '''    前台分页    '''    if request.method in ["POST", "GET"]:        msg = {"code": normal_code, "msg": mes.normal_code,  "data":{"currPage":1,"totalPage":1,"total":1,"pageSize":10,"list":[]}}        req_dict = request.session.get("req_dict")        #获取全部列名        columns=  handanmeishi.getallcolumn( handanmeishi, handanmeishi)        #表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看        try:            __foreEndList__=handanmeishi.__foreEndList__        except:            __foreEndList__=None        if __foreEndList__=="前要登":            tablename=request.session.get("tablename")            if tablename!="users" and 'userid' in columns:                try:                    req_dict['userid']=request.session.get("params").get("id")                except:                    pass        #forrEndListAuth        try:            __foreEndListAuth__=handanmeishi.__foreEndListAuth__        except:            __foreEndListAuth__=None        #authSeparate        try:            __authSeparate__=handanmeishi.__authSeparate__        except:            __authSeparate__=None        if __foreEndListAuth__ =="是" and __authSeparate__=="是":            tablename=request.session.get("tablename")            if tablename!="users":                req_dict['userid']=request.session.get("params",{"id":0}).get("id")        tablename = request.session.get("tablename")        if tablename == "users" and req_dict.get("userid") != None:#判断是否存在userid列名            del req_dict["userid"]        else:            __isAdmin__ = None            allModels = apps.get_app_config('main').get_models()            for m in allModels:                if m.__tablename__==tablename:                    try:                        __isAdmin__ = m.__isAdmin__                    except:                        __isAdmin__ = None                    break            if __isAdmin__ == "是":                if req_dict.get("userid"):                    del req_dict["userid"]            else:                #非管理员权限的表,判断当前表字段名是否有userid                if "userid" in columns:                    try:                        # 本接口可以匿名访问,所以try判断是否为匿名                        req_dict['userid']=request.session.get("params").get("id")                    except:                            pass        #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的        try:            __authTables__=handanmeishi.__authTables__        except:            __authTables__=None        if __authTables__!=None and  __authTables__!={} and __foreEndListAuth__=="是":            try:                del req_dict['userid']            except:                pass            for authColumn,authTable in __authTables__.items():                if authTable==tablename:                    params = request.session.get("params")                    req_dict[authColumn]=params.get(authColumn)                    break                if handanmeishi.__tablename__[:7]=="discuss":            try:                del req_dict['userid']            except:                pass        msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \        msg['data']['pageSize']  = handanmeishi.page(handanmeishi, handanmeishi, req_dict)        return JsonResponse(msg)def handanmeishi_save(request):    '''    后台新增    '''    if request.method in ["POST", "GET"]:        msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}        req_dict = request.session.get("req_dict")        tablename=request.session.get("tablename")        __isAdmin__ = None        allModels = apps.get_app_config('main').get_models()        for m in allModels:            if m.__tablename__==tablename:                try:                    __isAdmin__ = m.__isAdmin__                except:                    __isAdmin__ = None                break        #获取全部列名        columns=  handanmeishi.getallcolumn( handanmeishi, handanmeishi)        if tablename!='users' and req_dict.get("userid")!=None and 'userid' in columns  and __isAdmin__!='是':            params=request.session.get("params")            req_dict['userid']=params.get('id')        error= handanmeishi.createbyreq(handanmeishi,handanmeishi, req_dict)        if error!=None:            msg['code'] = crud_error_code            msg['msg'] = error        return JsonResponse(msg)def handanmeishi_add(request):    '''    前台新增    '''    if request.method in ["POST", "GET"]:        msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}        req_dict = request.session.get("req_dict")        #获取全部列名        columns=  handanmeishi.getallcolumn( handanmeishi, handanmeishi)        try:            __authSeparate__=handanmeishi.__authSeparate__        except:            __authSeparate__=None        if __authSeparate__=="是":            tablename=request.session.get("tablename")            if tablename!="users" and 'userid' in columns:                try:                    req_dict['userid']=request.session.get("params").get("id")                except:                    pass        try:            __foreEndListAuth__=handanmeishi.__foreEndListAuth__        except:            __foreEndListAuth__=None        if __foreEndListAuth__ and __foreEndListAuth__!="否":            tablename=request.session.get("tablename")            if tablename!="users":                req_dict['userid']=request.session.get("params").get("id")        error= handanmeishi.createbyreq(handanmeishi,handanmeishi, req_dict)        if error!=None:            msg['code'] = crud_error_code            msg['msg'] = error        return JsonResponse(msg)def handanmeishi_thumbsup(request,id_):    '''     点赞:表属性thumbsUp[是/否],刷表新增thumbsupnum赞和crazilynum踩字段,    '''    if request.method in ["POST", "GET"]:        msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}        req_dict = request.session.get("req_dict")        id_=int(id_)        type_=int(req_dict.get("type",0))        rets=handanmeishi.getbyid(handanmeishi,handanmeishi,id_)        update_dict={        "id":id_,        }        if type_==1:#赞            update_dict["thumbsupnum"]=int(rets[0].get('thumbsupnum'))+1        elif type_==2:#踩            update_dict["crazilynum"]=int(rets[0].get('crazilynum'))+1        error = handanmeishi.updatebyparams(handanmeishi,handanmeishi, update_dict)        if error!=None:            msg['code'] = crud_error_code            msg['msg'] = error        return JsonResponse(msg)def handanmeishi_info(request,id_):    '''    '''    if request.method in ["POST", "GET"]:        msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}        data = handanmeishi.getbyid(handanmeishi,handanmeishi, int(id_))        if len(data)>0:            msg['data']=data[0]        #浏览点击次数        try:            __browseClick__= handanmeishi.__browseClick__        except:            __browseClick__=None        if __browseClick__=="是"  and  "clicknum"  in handanmeishi.getallcolumn(handanmeishi,handanmeishi):            try:                clicknum=int(data[0].get("clicknum",0))+1            except:                clicknum=0+1            click_dict={"id":int(id_),"clicknum":clicknum}            ret=handanmeishi.updatebyparams(handanmeishi,handanmeishi,click_dict)            if ret!=None:                msg['code'] = crud_error_code                msg['msg'] = ret        return JsonResponse(msg)def handanmeishi_detail(request,id_):    '''    '''    if request.method in ["POST", "GET"]:        msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}        data =handanmeishi.getbyid(handanmeishi,handanmeishi, int(id_))        if len(data)>0:            msg['data']=data[0]        #浏览点击次数        try:            __browseClick__= handanmeishi.__browseClick__        except:            __browseClick__=None        if __browseClick__=="是"   and  "clicknum"  in handanmeishi.getallcolumn(handanmeishi,handanmeishi):            try:                clicknum=int(data[0].get("clicknum",0))+1            except:                clicknum=0+1            click_dict={"id":int(id_),"clicknum":clicknum}            ret=handanmeishi.updatebyparams(handanmeishi,handanmeishi,click_dict)            if ret!=None:                msg['code'] = crud_error_code                msg['msg'] = retfo        return JsonResponse(msg)def handanmeishi_update(request):    '''    '''    if request.method in ["POST", "GET"]:        msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}        req_dict = request.session.get("req_dict")        if req_dict.get("mima") and req_dict.get("password"):            if "mima" not  in handanmeishi.getallcolumn(handanmeishi,handanmeishi) :                del req_dict["mima"]            if  "password" not  in handanmeishi.getallcolumn(handanmeishi,handanmeishi) :                del req_dict["password"]        try:            del req_dict["clicknum"]        except:            pass        error = handanmeishi.updatebyparams(handanmeishi, handanmeishi, req_dict)        if error!=None:            msg['code'] = crud_error_code            msg['msg'] = error        return JsonResponse(msg)def handanmeishi_delete(request):    '''    批量删除    '''    if request.method in ["POST", "GET"]:        msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}        req_dict = request.session.get("req_dict")        error=handanmeishi.deletes(handanmeishi,            handanmeishi,             req_dict.get("ids")        )        if error!=None:            msg['code'] = crud_error_code            msg['msg'] = error        return JsonResponse(msg)def handanmeishi_vote(request,id_):    '''    浏览点击次数(表属性[browseClick:是/否],点击字段(clicknum),调用info/detail接口的时候后端自动+1)、投票功能(表属性[vote:是/否],投票字段(votenum),调用vote接口后端votenum+1)统计商品或新闻的点击次数;提供新闻的投票功能    '''    if request.method in ["POST", "GET"]:        msg = {"code": normal_code, "msg": mes.normal_code}        data= handanmeishi.getbyid(handanmeishi, handanmeishi, int(id_))        for i in data:            votenum=i.get('votenum')            if votenum!=None:                params={"id":int(id_),"votenum":votenum+1}                error=handanmeishi.updatebyparams(handanmeishi,handanmeishi,params)                if error!=None:                    msg['code'] = crud_error_code                    msg['msg'] = error        return JsonResponse(msg)def handanmeishi_importExcel(request):    if request.method in ["POST", "GET"]:        msg = {"code": normal_code, "msg": "成功", "data": {}}        excel_file = request.FILES.get("file", "")        file_type = excel_file.name.split('.')[1]                if file_type in ['xlsx', 'xls']:            data = xlrd.open_workbook(filename=None, file_contents=excel_file.read())            table = data.sheets()[0]            rows = table.nrows                        try:                for row in range(1, rows):                    row_values = table.row_values(row)                    req_dict = {}                    handanmeishi.createbyreq(handanmeishi, handanmeishi, req_dict)                                except:                pass                        else:            msg.code = 500            msg.msg = "文件类型错误"                        return JsonResponse(msg)def handanmeishi_sendemail(request):    if request.method in ["POST", "GET"]:        req_dict = request.session.get("req_dict")        code = random.sample(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], 4)        to = []        to.append(req_dict['email'])        send_mail('用户注册', '您的注册验证码是【'+''.join(code)+'】,请不要把验证码泄漏给其他人,如非本人请勿操作。', 'yclw9@qq.com', to, fail_silently = False)        cursor = connection.cursor()        cursor.execute("insert into emailregistercode(email,role,code) values('"+req_dict['email']+"','用户','"+''.join(code)+"')")        msg = {            "msg": "发送成功",            "code": 0        }        return JsonResponse(msg)def handanmeishi_autoSort2(request):        if request.method in ["POST", "GET"]:        req_dict = request.session.get("req_dict")        cursor = connection.cursor()        leixing = set()        try:            cursor.execute("select goodtype from orders where userid = %d"%(request.session.get("params").get("id"))+" and tablename = 'handanmeishi' order by addtime desc")            rows = cursor.fetchall()            for row in rows:                for item in row:                    leixing.add(item)        except:            leixing = set()                L = []        cursor.execute("select * from handanmeishi where meishifenlei in ('%s"%("','").join(leixing)+"') union all select * from handanmeishi where meishifenlei not in('%s"%("','").join(leixing)+"')")        desc = cursor.description        data_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()]         for online_dict in data_dict:            for key in online_dict:                if 'datetime.datetime' in str(type(online_dict[key])):                    online_dict[key] = online_dict[key].strftime(                        "%Y-%m-%d %H:%M:%S")                else:                    pass            L.append(online_dict)        return JsonResponse({"code": 0, "msg": '',  "data":{"currPage":1,"totalPage":1,"total":1,"pageSize":5,"list": L[0:6]}})def handanmeishi_value(request, xColumnName, yColumnName, timeStatType):    if request.method in ["POST", "GET"]:        msg = {"code": normal_code, "msg": "成功", "data": {}}                where = ' where 1 = 1 '        sql = ''        if timeStatType == '日':            sql = "SELECT DATE_FORMAT({0}, '%Y-%m-%d') {0}, sum({1}) total FROM handanmeishi {2} GROUP BY DATE_FORMAT({0}, '%Y-%m-%d')".format(xColumnName, yColumnName, where, '%Y-%m-%d')        if timeStatType == '月':            sql = "SELECT DATE_FORMAT({0}, '%Y-%m') {0}, sum({1}) total FROM handanmeishi {2} GROUP BY DATE_FORMAT({0}, '%Y-%m')".format(xColumnName, yColumnName, where, '%Y-%m')        if timeStatType == '年':            sql = "SELECT DATE_FORMAT({0}, '%Y') {0}, sum({1}) total FROM handanmeishi {2} GROUP BY DATE_FORMAT({0}, '%Y')".format(xColumnName, yColumnName, where, '%Y')        L = []        cursor = connection.cursor()        cursor.execute(sql)        desc = cursor.description        data_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()]         for online_dict in data_dict:            for key in online_dict:                if 'datetime.datetime' in str(type(online_dict[key])):                    online_dict[key] = online_dict[key].strftime(                        "%Y-%m-%d %H:%M:%S")                else:                    pass            L.append(online_dict)        msg['data'] = L        return JsonResponse(msg)def handanmeishi_o_value(request, xColumnName, yColumnName):    if request.method in ["POST", "GET"]:        msg = {"code": normal_code, "msg": "成功", "data": {}}                where = ' where 1 = 1 '                sql = "SELECT {0}, sum({1}) AS total FROM handanmeishi {2} GROUP BY {0}".format(xColumnName, yColumnName, where)        L = []        cursor = connection.cursor()        cursor.execute(sql)        desc = cursor.description        data_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()]         for online_dict in data_dict:            for key in online_dict:                if 'datetime.datetime' in str(type(online_dict[key])):                    online_dict[key] = online_dict[key].strftime(                        "%Y-%m-%d %H:%M:%S")                else:                    pass            L.append(online_dict)        msg['data'] = L        return JsonResponse(msg)def handanmeishi_alipay(request):    if request.method in ["POST", "GET"]:        alipay = AliPay(            appid=settings.ALIPAY_APP_ID,            app_notify_url=None,            app_private_key_string=settings.APP_PRIVATE_KEY_STRING,            alipay_public_key_string=settings.ALIPAY_PUBLIC_KEY_STRING,            sign_type=settings.ALIPAY_SIGN_TYPE,            debug=True,            config=AliPayConfig(timeout=15)        )                req_dict = request.session.get("req_dict")        order_string = alipay.api_alipay_trade_page_pay(            out_trade_no=req_dict['tradeno'],            total_amount=req_dict['totalamount'],            subject=req_dict['subject'],            return_url='http://localhost:8080/django59v1e/handanmeishi/notify',            #notify_url=''        )        pay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string        pay_url = '<form name="punchout_form" method="post" action="{0}"><input type="hidden" name="biz_content" ><input type="submit" value="立即支付" style="display: none"></form>'.format(pay_url)                return JsonResponse({'code': 0, "data": pay_url})def handanmeishi_notify(request):    if request.method in ["POST", "GET"]:        req_dict = request.session.get("req_dict")        out_trade_no = req_dict['out_trade_no']        cursor = connection.cursor()                return redirect('http://localhost:8080/django59v1e/admin/dist/index.html#/handanmeishi')
  • 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
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • 350
  • 351
  • 352
  • 353
  • 354
  • 355
  • 356
  • 357
  • 358
  • 359
  • 360
  • 361
  • 362
  • 363
  • 364
  • 365
  • 366
  • 367
  • 368
  • 369
  • 370
  • 371
  • 372
  • 373
  • 374
  • 375
  • 376
  • 377
  • 378
  • 379
  • 380
  • 381
  • 382
  • 383
  • 384
  • 385
  • 386
  • 387
  • 388
  • 389
  • 390
  • 391
  • 392
  • 393
  • 394
  • 395
  • 396
  • 397
  • 398
  • 399
  • 400
  • 401
  • 402
  • 403
  • 404
  • 405
  • 406
  • 407
  • 408
  • 409
  • 410
  • 411
  • 412
  • 413
  • 414
  • 415
  • 416
  • 417
  • 418
  • 419
  • 420
  • 421
  • 422
  • 423
  • 424
  • 425
  • 426
  • 427
  • 428
  • 429
  • 430
  • 431
  • 432
  • 433
  • 434
  • 435
  • 436
  • 437
  • 438
  • 439
  • 440
  • 441
  • 442
  • 443
  • 444
  • 445
  • 446
  • 447
  • 448
  • 449
  • 450
  • 451
  • 452
  • 453
  • 454
  • 455
  • 456
  • 457
  • 458
  • 459
  • 460
  • 461
  • 462
  • 463
  • 464
  • 465
  • 466
  • 467
  • 468
  • 469
  • 470
  • 471
  • 472
  • 473
  • 474
  • 475
  • 476
  • 477
  • 478
  • 479
  • 480
  • 481
  • 482
  • 483
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发