基于Flask的Python旅游网站 计算机毕业设计 Python+Flask+MySQL

视频演示

基于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) # 渲染模板
  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值