You need to enable JavaScript to run this app. Django实现点击按钮将is_tutorial设为True存库并跳转欢迎页
优惠活动
大模型
产品
解决方案
定价
更多

Django实现点击按钮将is_tutorial设为True存库并跳转欢迎页

教程完成标记与自动跳过的实现步骤

核心逻辑

点击continue时不直接跳转欢迎页,先经过专用视图更新当前用户的Tutorial完成状态,再重定向到欢迎页;访问教程页时提前判断完成状态,已完成的用户直接跳走,不再渲染教程内容。

具体操作

  • 新增专用的状态更新视图
    用login_required装饰器限制只有登录用户能访问,避免未登录触发报错。视图内通过ORM匹配当前用户的Tutorial记录,将is_tutorial字段更新为True,更新完成后直接重定向到欢迎页。
    参考视图代码:

    from django.contrib.auth.decorators import login_required
    from django.shortcuts import redirect
    from .models import Tutorial
    
    @login_required
    def mark_tutorial_completed(request):
        # 拦截非POST请求,避免GET触发的非法状态变更
        if request.method != "POST":
            return redirect("tutorial_page")
        # 兼容用户无对应Tutorial记录的场景,不存在记录则自动创建
        Tutorial.objects.update_or_create(
            user=request.user,
            defaults={"is_tutorial": True}
        )
        # 替换为项目内欢迎页的路由名称
        return redirect("welcome_page")
    
  • 配置对应路由
    在项目的urls.py中为上述视图注册路径,方便模板反向解析:

    from django.urls import path
    from . import views
    
    urlpatterns = [
        # 原有tutorial-page路由保持不变
        path("tutorial-page/", views.tutorial_page, name="tutorial_page"),
        # 新增教程完成的处理路由
        path("tutorial/complete/", views.mark_tutorial_completed, name="mark_tutorial_completed"),
    ]
    
  • 修改教程页的continue控件
    移除原来直接指向欢迎页的硬编码超链接,替换为指向新增的完成处理路由,用带CSRF校验的POST表单替代裸a标签,避免爬虫误触发:

    <form action="{% url 'mark_tutorial_completed' %}" method="post">
        {% csrf_token %}
        <button type="submit">Continue</button>
    </form>
    
  • 改造原有tutorial_page视图实现自动跳过
    进入教程页时先查询当前用户的Tutorial完成状态,若is_tutorial为True则直接重定向到欢迎页,不再渲染教程模板:

    def tutorial_page(request):
        # 登录用户直接查询完成状态,已完成的直接跳转
        if request.user.is_authenticated:
            tutorial_record = Tutorial.objects.filter(user=request.user).first()
            if tutorial_record and tutorial_record.is_tutorial:
                return redirect("welcome_page")
        # 未完成的正常渲染教程页
        return render(request, "tutorial.html")
    

注意事项

  • 不要将字段更新逻辑直接写在tutorial_page视图内,否则用户每次打开教程页都会自动把状态改成完成,失去点击continue才标记完成的触发逻辑
  • 优先使用ORM的update_or_create方法处理可能存在的用户无对应Tutorial记录的边界场景,避免查询时抛出空记录的异常
  • 优先用POST请求处理状态更新操作,避免被搜索引擎爬虫误访问GET链接触发状态变更,破坏用户的教程引导流程
  • 路由配置全部用路由名称做反向解析,不要写硬编码的路径,后续改路径时不用批量修改模板和视图代码

内容的提问来源于stack exchange,提问作者sugnez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 20:36:03