做网站可以用php,聚牛网站建设公司,网站开发 前台代码,淘宝运营#x1f34a;作者#xff1a;计算机编程-吉哥 #x1f34a;简介#xff1a;专业从事JavaWeb程序开发#xff0c;微信小程序开发#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事#xff0c;生活就是快乐的。 #x1f34a;心愿#xff1a;点… 作者计算机编程-吉哥 简介专业从事JavaWeb程序开发微信小程序开发定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事生活就是快乐的。 心愿点赞 收藏 ⭐评论 文末获取源码联系 精彩专栏推荐订阅 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 Python毕业设计精品项目《1000套》 微信小程序毕业设计精品项目《1000套》 大数据/机器学习毕业设计精品项目《1000套》 目录
1.技术选型
2.开发工具
3.功能
3.1【角色】
3.2【前台功能模块】
3.3【后台功能模块】
4.项目演示截图
4.1 旅游景点
4.2 酒店信息
4.3 旅游路线
4.4 旅游路线详情
4.5 旅游景点推荐
4.6 旅游景点管理
4.7 酒店信息管理
4.8 旅游路线管理
5.核心代码
5.1 Settings.py
5.2 Urls.py
5.3 Users_v.py
5.4 Auth.py
6.LW文档大纲参考 背景意义介绍 基于Python的个性化旅游线路推荐系统是针对当前旅游业发展和游客需求多样化趋势而设计的智能系统。随着互联网技术的发展和旅游市场的扩大游客对于旅游体验的个性化和质量要求越来越高。该系统通过分析用户的历史行为、偏好和实时反馈利用机器学习算法为用户提供个性化的旅游线路推荐旨在提升用户体验满足游客的个性化需求。 系统的开发不仅能够提高旅游服务的效率和质量还能为旅游企业和景区管理者提供决策支持帮助他们更好地理解游客需求优化旅游资源配置提升旅游产品的竞争力。此外系统的实施有助于推动旅游业的数字化转型促进旅游产业的可持续发展。 1.技术选型
Python、Django、vue、elementui、html、css、js、mysql
2.开发工具
pycharm、navicat
3.功能
3.1【角色】
管理员、用户
3.2【前台功能模块】
登录注册首页旅游景点酒店信息旅游路线旅游新闻个人资料在线客服个人中心个人中心、修改密码、酒店预订、预订路线、我的收藏
3.3【后台功能模块】
登录系统首页用户景点类型旅游景点酒店类型酒店信息酒店预订路线类型旅游路线预订路线系统管理旅游新闻、旅游新闻分类、在线客服、关于我们、系统简介、轮播图管理用户信息
4.项目演示截图
4.1 旅游景点 4.2 酒店信息 4.3 旅游路线 4.4 旅游路线详情 4.5 旅游景点推荐 4.6 旅游景点管理 4.7 酒店信息管理 4.8 旅游路线管理 5.核心代码
5.1 Settings.py Django settings for dj2 project.Generated by django-admin startproject using Django 2.0.For more information on this file, see
https://docs.djangoproject.com/en/2.0/topics/settings/For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.0/ref/settings/
import os
from concurrent.futures.thread import ThreadPoolExecutor
executor ThreadPoolExecutor(20)
from util.configread import config_read# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR os.path.dirname(os.path.dirname(os.path.abspath(__file__)))# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY w5yn#0gn2tt7pvu%hvwt0!lt!$6eqp4%m8)u3u#gknmjm)k# SECURITY WARNING: dont run with debug turned on in production!
DEBUG TrueALLOWED_HOSTS [*]# Application definitionINSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.staticfiles,main,corsheaders,
]MIDDLEWARE [django.middleware.security.SecurityMiddleware,django.contrib.sessions.middleware.SessionMiddleware,django.middleware.common.CommonMiddleware,# django.middleware.csrf.CsrfViewMiddleware,django.contrib.auth.middleware.AuthenticationMiddleware,django.contrib.messages.middleware.MessageMiddleware,django.middleware.clickjacking.XFrameOptionsMiddleware,threadlocals.middleware.ThreadLocalMiddleware,xmiddleware.xparam.Xparam,xmiddleware.xauth.Xauth,corsheaders.middleware.CorsMiddleware,django.middleware.common.CommonMiddleware,]
CORS_ALLOW_CREDENTIALS True
CORS_ORIGIN_ALLOW_ALL True
CORS_ALLOW_HEADERS (*)SESSION_ENGINE django.contrib.sessions.backends.cache
SESSION_COOKIE_NAME sessionid
SESSION_COOKIE_PATH /
SESSION_COOKIE_DOMAIN None
SESSION_COOKIE_SECURE False
SESSION_COOKIE_HTTPONLY True
SESSION_COOKIE_AGE 1209600
SESSION_EXPIRE_AT_BROWSER_CLOSE False
SESSION_SAVE_EVERY_REQUEST FalseROOT_URLCONF dj2.urls
TEMPLATES_DIR os.path.join(BASE_DIR, templates)
TEMPLATES [{BACKEND: django.template.backends.django.DjangoTemplates,DIRS: [TEMPLATES_DIR],APP_DIRS: True,OPTIONS: {context_processors: [django.template.context_processors.debug,django.template.context_processors.request,django.contrib.auth.context_processors.auth,django.contrib.messages.context_processors.messages,],},},
]WSGI_APPLICATION dj2.wsgi.applicationEMAIL_BACKEND django.core.mail.backends.smtp.EmailBackend
EMAIL_USE_TLS False
EMAIL_USE_SSL True
EMAIL_HOST smtp.qq.com
EMAIL_PORT 465
EMAIL_HOST_USER yclw9qq.com
EMAIL_HOST_PASSWORD mhbrkuayvkkgbijd# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases# DATABASES {
# default: {
# ENGINE: django.db.backends.sqlite3,
# NAME: os.path.join(BASE_DIR, db.sqlite3),
# }
# }dbtype, host, port, user, passwd, dbName, charset,hasHadoop config_read(config.ini)
dbNamedbName.replace( ,).strip()
print(dbtype, host, port, user, passwd, dbName, charset)if dbtype mysql:DATABASES {default: {# ENGINE: django.db.backends.sqlite3,# NAME: os.path.join(BASE_DIR, db.sqlite3),ENGINE: django.db.backends.mysql,OPTIONS: {sql_mode: traditional,init_command: SET sql_modetraditional, # STRICT_TRANS_TABLES},NAME: dbName,USER: user,PASSWORD: passwd,HOST: host,PORT: port,charset: charset,TEST: {CHARSET: charset,COLLATION: utf8_general_ci,},CONN_MAX_AGE:60},}
else:print(请使用mysql5.5数据库)os._exit(1)# Password validation
# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validatorsAUTH_PASSWORD_VALIDATORS [{NAME: django.contrib.auth.password_validation.UserAttributeSimilarityValidator,},{NAME: django.contrib.auth.password_validation.MinimumLengthValidator,},{NAME: django.contrib.auth.password_validation.CommonPasswordValidator,},{NAME: django.contrib.auth.password_validation.NumericPasswordValidator,},
]# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/LANGUAGE_CODE zh-Hans# TIME_ZONE UTC
TIME_ZONE Asia/ShanghaiUSE_I18N TrueUSE_L10N True# USE_TZ True
USE_TZ False# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/STATIC_URL /assets/
STATICFILES_DIRS [
os.path.join(BASE_DIR, templates/front/assets),
]# media
MEDIA_URL /media/ # 自定义
MEDIA_ROOT os.path.join(BASE_DIR, media) # 自定义
if os.path.isdir(MEDIA_ROOT) False:os.mkdir(MEDIA_ROOT)ALIPAY_APP_ID 9021000132629452
APP_PRIVATE_KEY_STRING open({}/util/alipay_key/app_private_2048.txt.format(BASE_DIR)).read()
ALIPAY_PUBLIC_KEY_STRING open({}/util/alipay_key/alipay_public_2048.txt.format(BASE_DIR)).read()
ALIPAY_SIGN_TYPE RSA25.2 Urls.py
dj2 URL ConfigurationThe urlpatterns list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/2.0/topics/http/urls/
Examples:
Function views1. Add an import: from my_app import views2. Add a URL to urlpatterns: path(, views.home, namehome)
Class-based views1. Add an import: from other_app.views import Home2. Add a URL to urlpatterns: path(, Home.as_view(), namehome)
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns: path(blog/, include(blog.urls))import os
from django.contrib import admin
from django.urls import path,include,re_path
from django.conf.urls import url
from django.views.static import serve
from django.views.generic import TemplateViewfrom . import views
from dj2.settings import dbName as schemaNameurlpatterns [path(xadmin/, admin.site.urls),path(rindex/,views.index),path({}/.format(schemaName),include(main.urls)),#导入schemaNamere_path(radmin/lib/(?Pp1.*)/(?Pp2.*)$, views.admin_lib2),re_path(radmin/lib/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)$, views.admin_lib3),re_path(radmin/lib/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)/(?Pp4.*)$, views.admin_lib4),re_path(radmin/page/(?Pp1.*)$, views.admin_page),re_path(radmin/page/(?Pp1.*)/(?Pp2.*)$, views.admin_page2),re_path(radmin/pages/(?Pp1.*)$, views.admin_pages),re_path(radmin/pages/(?Pp1.*)/(?Pp2.*)$, views.admin_pages2),re_path(rfront/(?Pp1.*)$, views.schema_front1),re_path(rfront/(?Pp1.*)/(?Pp2.*)$, views.schema_front2),re_path(rfront/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)$, views.schema_front3),re_path(rfront/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)/(?Pp4.*)$, views.schema_front4),re_path(r{}/front/(?Pp1.*)$.format(schemaName), views.schema_front1),re_path(r{}/front/(?Pp1.*)/(?Pp2.*)$.format(schemaName), views.schema_front2),re_path(r{}/front/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)$.format(schemaName), views.schema_front3),re_path(r{}/front/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)/(?Pp4.*)$.format(schemaName), views.schema_front4),# re_path(rassets/(?Pp1.*)$, views.assets1),# re_path(rassets/(?Pp1.*)/(?Pp2.*)$, views.assets2),# re_path(rassets/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)$, views.assets3),# re_path(rassets/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)/(?Pp4.*)$, views.assets4),#re_path(radmin/(?Pp1.*)$, views.admin_file1),re_path(radmin/(?Pp1.*)/(?Pp2.*)$, views.admin_file2),re_path(radmin/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)$, views.admin_file3),re_path(radmin/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)/(?Pp4.*)$, views.admin_file4),re_path(rlayui/(?Pp1.*)$, views.layui1),re_path(rlayui/(?Pp1.*)/(?Pp2.*)$, views.layui2),re_path(rlayui/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)$, views.layui3),re_path(rlayui/(?Pp1.*)/(?Pp2.*)/(?Pp3.*)/(?Pp4.*)$, views.layui4),re_path(rpages/(?Pp1.*)$, views.front_pages),re_path(rpages/(?Pp1.*)/(?Pp2.*)$, views.front_pages2),# re_path(rpages/(?Pp1.*)$, views.front_file1),# re_path(r(?Pp1css|jss|img|image|iamges|font|fonts)/(?Pp2.*)$, views.front_file2),re_path(rmodules/(?Pp1.*)$, views.front_modules),re_path(rcss/(?Pp1.*)$, views.css1),re_path(rjs/(?Pp1.*)$, views.js1),re_path(rimg/(?Pp1.*)$, views.img1),path(rtest/str:p1/,views.test),path(rnull,views.null),
]#判断admin使用vue还是jquery
if os.path.isdir(os.path.join(os.getcwd(),templates/front/admin/dist/)):urlpatterns.extend([path(r{}/admin/dist/index.html.format(schemaName),TemplateView.as_view(template_namefront/admin/dist/index.html)),path(r{}/admin/.format(schemaName), TemplateView.as_view(template_namefront/admin/dist/index.html)),# 以下是后台admin的url匹配规则path(radmin/dist/index.html.format(schemaName),TemplateView.as_view(template_namefront/admin/dist/index.html)),path(radmin/, TemplateView.as_view(template_namefront/admin/dist/index.html)),])
else:urlpatterns.extend([path(r{}/admin/index.html.format(schemaName),TemplateView.as_view(template_namefront/admin/index.html)),path(r{}/admin/.format(schemaName), TemplateView.as_view(template_namefront/admin/index.html)),# 以下是后台admin的url匹配规则path(radmin/index.html.format(schemaName),TemplateView.as_view(template_namefront/admin/index.html)),path(radmin/, TemplateView.as_view(template_namefront/admin/index.html)),])if os.path.isfile(os.path.join(os.getcwd(),templates/front/index.html)):urlpatterns.extend([path(rindex.html, TemplateView.as_view(template_namefront/index.html)),path(r{}/index.html.format(schemaName), TemplateView.as_view(template_namefront/index.html)),path(r{}/front/index.html.format(schemaName), TemplateView.as_view(template_namefront/index.html)),path(r, TemplateView.as_view(template_namefront/index.html)),])5.3 Users_v.py
# coding:utf-8
__author__ ilafrom django.http import JsonResponsefrom .users_model import users
from util.codes import *
from util.auth import Auth
import util.message as mes
from dj2.settings import host,port,user,passwd,dbName,hasHadoopdef users_login(request):if request.method in [POST, GET]:msg {code: normal_code, msg: mes.normal_code}req_dict request.session.get(req_dict)if req_dict.get(role)!None:del req_dict[role]datas users.getbyparams(users, users, req_dict)if not datas:msg[code] password_error_codemsg[msg] mes.password_error_codereturn JsonResponse(msg)req_dict[id] datas[0].get(id)return Auth.authenticate(Auth, users, req_dict)def users_register(request):if request.method in [POST, GET]:msg {code: normal_code, msg: mes.normal_code}req_dict request.session.get(req_dict)error users.createbyreq(users, users, req_dict)if error ! None:msg[code] crud_error_codemsg[msg] errorreturn JsonResponse(msg)def users_session(request):if request.method in [POST, GET]:msg {code: normal_code,msg:mes.normal_code, data: {}}req_dict {id: request.session.get(params).get(id)}msg[data] users.getbyparams(users, users, req_dict)[0]return JsonResponse(msg)def users_logout(request):if request.method in [POST, GET]:msg {msg: 退出成功,code: 0}return JsonResponse(msg)def users_page(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)tablename request.session.get(tablename)try:__hasMessage__ users.__hasMessage__except:__hasMessage__ Noneif __hasMessage__ and __hasMessage__ ! 否:if tablename ! users:req_dict[userid] request.session.get(params).get(id)if tablename users:msg[data][list], msg[data][currPage], msg[data][totalPage], msg[data][total], \msg[data][pageSize] users.page(users, users, req_dict)else:msg[data][list], msg[data][currPage], msg[data][totalPage], msg[data][total], \msg[data][pageSize] [],1,0,0,10return JsonResponse(msg)def users_info(request, id_):if request.method in [POST, GET]:msg {code: normal_code, msg: mes.normal_code, data: {}}data users.getbyid(users, users, int(id_))if len(data) 0:msg[data] data[0]# 浏览点击次数try:__browseClick__ users.__browseClick__except:__browseClick__ Noneif __browseClick__ and clicknum in users.getallcolumn(users, users):click_dict {id: int(id_), clicknum: str(int(data[0].get(clicknum, 0)) 1)}ret users.updatebyparams(users, users, click_dict)if ret ! None:msg[code] crud_error_codemsg[msg] retreturn JsonResponse(msg)def users_save(request):if request.method in [POST, GET]:msg {code: normal_code, msg: mes.normal_code, data: {}}req_dict request.session.get(req_dict)req_dict[role] 管理员error users.createbyreq(users, users, req_dict)if error ! None:msg[code] crud_error_codemsg[msg] errorreturn JsonResponse(msg)def users_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 users.getallcolumn(users,users):del req_dict[mima]if password not in users.getallcolumn(users,users):del req_dict[password]try:del req_dict[clicknum]except:passerror users.updatebyparams(users, users, req_dict)if error ! None:msg[code] crud_error_codemsg[msg] errorreturn JsonResponse(msg)def users_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 users.deletes(users,users,req_dict.get(ids))if error ! None:msg[code] crud_error_codemsg[msg] errorreturn JsonResponse(msg)5.4 Auth.py
# coding:utf-8
# author:ila
import base64, copy
from django.http import JsonResponse
from django.apps import appsfrom util.codes import *
from util import message as mesclass Auth(object):def authenticate(self, model, req_dict):用户登录登录成功返回token登录失败返回失败原因:param username:账号:param password:密码:return: jsonmsg {code: normal_code, msg: mes.normal_code, data: {}}tablename model.__tablename__encode_dict {tablename: tablename, params: req_dict}encode_str base64.b64encode(str(encode_dict).encode(utf-8))msg[data][id] req_dict.get(id)msg[id] req_dict.get(id)msg[token] encode_str.decode(utf-8)return JsonResponse(msg)def identify(self, request):用户鉴权:param request:本次请求对象:return: listmsg {code: normal_code, msg: mes.normal_code, data: {}}# django的header被处理过了token request.META.get(HTTP_TOKEN)if token and token !null:auth_token copy.deepcopy(token)decode_str base64.b64decode(auth_token).decode(utf8)decode_strdecode_str.replace(null,).replace(null,)decode_dict eval(decode_str)tablename2 decode_dict.get(tablename)params2 decode_dict.get(params,{})datasNoneallModels apps.get_app_config(main).get_models()for model in allModels:if model.__tablename__ tablename2:datas model.getbyparams(model, model, params2)if not datas:msg[code] username_error_codemsg[msg] 找不到该用户信息result msgelse:request.session[tablename] tablename2request.session[params] params2msg[msg] 身份验证通过。result msgelse:msg[code] 401msg[msg] headers未包含认证信息。result msgreturn result6.LW文档大纲参考 具体LW如何写法可以咨询博主耐心分享 你可能还有感兴趣的项目 更多项目推荐:计算机毕业设计项目 Python毕业设计精品项目《1000套》 微信小程序毕业设计精品项目《1000套》 大数据/机器学习毕业设计精品项目《1000套》 如果大家有任何疑虑请在下方咨询或评论