视频演示
基于Flask的Python旅游网站 计算机毕业设计 Python+Flask+MySQL
前言
基于Flask的Python旅游网站是一站式目的地,为游客提供了全面的旅行指南和定制化服务。通过简洁而直观的界面,用户可以轻松浏览各种旅游目的地的详细信息,,帮助他们计划完美的旅程。网站还提供了用户个性化的行程规划功能,根据用户的偏好和时间安排,智能生成最佳路线和行程安排,让旅行更加轻松愉快。而网站的社区功能也让旅行者可以分享经验、交流想法,为其他用户提供宝贵的旅行建议和经验,共同探索未知的旅游目的地。基于Flask的Python旅游网站不仅是一个旅行规划工具,更是一个连接世界各地旅行者的平台,为用户带来全新的旅行体验。
网站首页
景点查询页面
景点管理页面
日志管理页面
用户登录代码
@home.route("/login/", methods=["GET", "POST"])
def login():
"""
登录
"""
form = LoginForm() # 实例化LoginForm类
if form.validate_on_submit(): # 如果提交
data = form.data # 接收表单数据
# 判断用户名和密码是否匹配
user = User.query.filter_by(email=data["email"]).first() # 获取用户信息
if not user :
flash("邮箱不存在!", "err") # 输出错误信息
return redirect(url_for("home.login")) # 调回登录页
if not user.check_pwd(data["pwd"]): # 调用check_pwd()方法,检测用户名密码是否匹配
flash("密码错误!", "err") # 输出错误信息
return redirect(url_for("home.login")) # 调回登录页
session["user_id"] = user.id # 将user_id写入session, 后面用户判断用户是否登录
# 将用户登录信息写入Userlog表
userlog = Userlog(
user_id=user.id,
ip=request.remote_addr
)
db.session.add(userlog) # 存入数据
db.session.commit() # 提交数据
return redirect(url_for("home.index")) # 登录成功,跳转到首页
return render_template("home/login.html", form=form) # 渲染登录页面模板
收藏景点代码
@home.route("/collect_add/")
@user_login
def collect_add():
"""
收藏景区
"""
scenic_id = request.args.get("scenic_id", "") # 接收传递的参数scenic_id
user_id = session['user_id'] # 获取当前用户的ID
collect = Collect.query.filter_by( # 根据用户ID和景区ID判断是否该收藏
user_id =int(user_id),
scenic_id=int(scenic_id)
).count()
# 已收藏
if collect == 1:
data = dict(ok=0) # 写入字典
# 未收藏进行收藏
if collect == 0:
collect = Collect(
user_id =int(user_id),
scenic_id=int(scenic_id)
)
db.session.add(collect) # 添加数据
db.session.commit() # 提交数据
data = dict(ok=1) # 写入字典
import json # 导入模块
return json.dumps(data) # 返回json数据
添加景点代码
@admin.route("/scenic/add/", methods=["GET", "POST"])
@admin_login
def scenic_add():
"""
添加景区页面
"""
form = ScenicForm() # 实例化form表单
form.area_id.choices = [(v.id, v.name) for v in Area.query.all()] # 为area_id添加属性
if form.validate_on_submit():
data = form.data
# 判断景区是否存在
scenic_count = Scenic.query.filter_by(title=data["title"]).count()
# 判断是否有重复数据。
if scenic_count == 1 :
flash("景点已经存在!", "err")
return redirect(url_for('admin.scenic_add'))
file_logo = secure_filename(form.logo.data.filename) # 确保文件名
if not os.path.exists(current_app.config["UP_DIR"]):
# 创建一个多级目录
os.makedirs(current_app.config["UP_DIR"]) # 创建文件夹
os.chmod(current_app.config["UP_DIR"], "rw") # 设置权限
logo = change_filename(file_logo) # 更改名称
form.logo.data.save(current_app.config["UP_DIR"] + logo) # 保存文件
# 为Scenic类属性赋值
scenic = Scenic(
title=data["title"],
logo=logo,
star=int(data["star"]),
address = data["address"],
is_hot = int(data["is_hot"]),
is_recommended = int(data["is_recommended"]),
area_id = data["area_id"],
introduction=data["introduction"],
content=data["content"],
)
db.session.add(scenic) # 添加数据
db.session.commit() # 提交数据
addOplog("添加景区"+data["title"]) # 添加日志
flash("添加景区成功!", "ok") # 使用flash保存添加成功信息
return redirect(url_for('admin.scenic_add')) # 页面跳转
return render_template("admin/scenic_add.html", form=form) # 渲染模板