Vscode 中调试Django程序

news2024/11/25 14:36:28

 调试介绍:

​​​​​​​Explore the debugger


Debug/调试 可以让我们在特定的代码行上暂停程序的运行。当程序暂停时,我们可以查看变量的数值,在“Debug控制台”中运行代码,或利用“Debug”工具提供的其他功能。启动Debugger/调试器会自动文件(未手工保存的代码行)。

开始调试前注意:需要停止之前运行的程序(CTRL+C)。在一个Terminal上保持程序运行,利用里一个Terminal来调试时也是不可以的。运行的程序使用着端口和请求,会忽略所有的debug调试请求.

调试步骤

  1. 在 hello/urls.py中, 为urlpatterns列表的增加路由:

    path("hello/<name>", views.hello_there, name="hello_there"),
    

    path语句在定义路由时有两个参数。第一个参数定义了一个路由"hello/",它接受一个名为name的字符串变量。该字符串被传递给在path的第二个参数中指定的views.hello_there函数。  URL 路由是区分大小写的。 路由 /hello/<name> 不同于 路由/Hello/<name>. 如果希望另种方式都有效,就需要定义不同的路由 

  2. 用下面的代码替换hello/views.py 中的源代码。使用下面的代码进行hello_there函数的Debug过程:

    import re
    from django.utils.timezone import datetime
    from django.http import HttpResponse
    
    def home(request):
        return HttpResponse("Hello, Django!")
    
    def hello_there(request, name):
        now = datetime.now()
        formatted_now = now.strftime("%A, %d %B, %Y at %X")
    
        # Filter the name argument to letters only using regular expressions. URL arguments
        # can contain arbitrary text, so we restrict to safe characters only.
        match_object = re.match("[a-zA-Z]+", name)
    
        if match_object:
            clean_name = match_object.group(0)
        else:
            clean_name = "Friend"
    
        content = "Hello there, " + clean_name + "! It's " + formatted_now
        return HttpResponse(content)
    

    代码解释:上一步提到的urls.py中定义的name变量作为hello_there函数的参数。if语句的作用如同代码注释中所描述的,过滤用户提供的信息,以避免对应用程序的攻击。在这种情况下,代码过滤name参数只可以包含字母,从而避免了控制字符、HTML等的导入。(当我们在下一节中使用模板时,Django会自动过滤,你不需要这些代码。)

  3. hello_there函数第一行 (now = datetime.now())标记断点。一下三种方式均可

    • 光标到指定行 F9,
    • 光标到指定行 主菜单选择 Run > Toggle Breakpoint ,
    • 直接在指定行的行号左侧空白处单击。(鼠标移动到该位置显示为未选中状态的红点)

    断点设置成功在对应行左侧空白处出现红色的点:

    Django tutorial: a breakpoint set on the first line of the hello_there function

  4. 通过下面方式启动debugger调试:菜单中选择 Run > Start Debugging , 或者选择绿色按钮 或F5:

    Django tutorial: start debugging/continue arrow on the debug toolbar

    VScode底部状态栏颜色发生改变,表示当前处于调试状态。

    同时VScode屏幕出现调试工具条如下图,各个按钮功能如下: 暂停 (or 继续, F5), 跳过 (F10), 步入 (F11), 步出 (Shift+F11), 重启 (Ctrl+Shift+F5), 和 停止 (Shift+F5). 具体说明参见链接 VS Code debugging .

    Django tutorial: the VS Code debug toolbar

  5. 程序开始执行.打开浏览器输入下面网址  http://127.0.0.1:8000/hello/VSCode. 在打开网页渲染之前,程序在指定语句暂停。黄色的小箭头表示下一步要运行的程序行。

    Django tutorial: VS Code paused at a breakpoint

  6. 点击 Step Over 运行程序行 now = datetime.now().

  7. VS Code 窗口左侧,我们可以看到 参数(Variables)子窗口。此窗口展示局部变量(如now)和参数(例如name) 。下面分别是监视watch窗口,堆栈stack和断点窗口。 (详见VS Code debugging ). 在Locals 项下, 可以尝试展开显示更多内容. 我们也可以通过双击F2的方式开修改参数的值。如果更改变量now的数值会导致程序中断。开发者一般在不能获自动获取正确数值,或者系统给出数值错误的情况下,使用此功能。 

    Django tutorial: local variables and arguments in VS Code during debugging

  8. 当程序暂停时, Debug Console 可以让我们输入一些命令程序 以获取基于当前程序状态的结果。 例如, 执行完成now = datetime.now()后, 我们可以测试各种不同的时间输出格式。在程序行中选择下面的内容now.strftime("%A, %d %B, %Y at %X"), 单击右键选择  Debug: Evaluate(Evaluate in Debug console) 相关内容会发送到Debug console命令行,执行结果如下:

    now.strftime("%A, %d %B, %Y at %X")
    'Friday, 07 September, 2018 at 07:46:32'
    

    提示: Debug Console 会显示程序调试过程中的异常信息。这些异常信息在Terminal窗口不会显示

  9. 将内容Copy 到debug console底部 > 提示符后,尝试更改格式并得到即时反馈。

    now.strftime("%A, %d %B, %Y at %X")
    'Tuesday, 13 June, 2023 at 18:03:19'
    now.strftime("%a, %d %b, %Y at %X")
    'Tue, 13 Jun, 2023 at 18:03:19'
    now.strftime("%a, %d %b, %y at %X")
    'Tue, 13 Jun, 23 at 18:03:19'
    
  10. 选择继续 F5,系统会恢复执行,结果如下:

    Django tutorial: result of the modified program

  11. 调试过程中可以更改代码,系统会自动运行重新载入。例如更改日期格式 now.strftime("%a, %d %b, %y at %X"), 保存文件. Django 服务器会自动重新载入,无需重新启动debugger。刷新浏览器可以立即显示变化。

  12. 完成后关闭浏览器和debugger. 停止调试器的方式, 单击停止按钮 (红方块) 或者执行如下菜单行命令 Run > Stop Debugging 快捷键 (Shift+F5).

Tip: 可以在view.py文件中增加打印语句将 http://127.0.0.1:8000/hello/VSCode输出到Terminal上。这样可以方便调试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1578876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MAC苹果电脑如何使用Homebrew安装iperf3

一、打开mac终端 找到这个终端打开 二、终端输入安装Homebrew命令 Homebrew官网地址&#xff1a;https://brew.sh/ 复制这个命令粘贴到mac的终端窗口&#xff0c;然后按回车键 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/in…

rsync实时同步(上行同步)

目录 一、实现实时同步 1. 定期同步的不足 2. 实时同步的优点 3. Linux内核的inotify机制 4. 发起端配置rsyncinotify 4.1 修改rsync源服务器配置文件 4.2 调整inotify内核参数 4.3 安装inotify-tools 4.4 在另一个终端编写触发式同步脚本 4.5 验证 二、使用rsync实现…

电脑与多台罗克韦尔AB PLC无线通讯的搭建方法分为几步?

在实际系统中&#xff0c;同一个车间里分布多台PLC&#xff0c;通过上位机集中控制。通常所有设备距离在几十米到上百米不等。在有通讯需求的时候&#xff0c;如果布线的话&#xff0c;工程量较大耽误工期&#xff0c;这种情况下比较适合采用无线通信方式。本方案以组态王和2台…

WinForm用微软打包工具打包

WinForm用微软打包工具打包 1. 安装扩展 下载扩展Microsoft Visual Studio Installer Projects 点击扩展 —> 管理扩展 安装完之后重启VS就好了。 2. 新建Set up项目 点击解决方案 —> 添加 —> 新建项目 选择这个Setup Project 创建打包项目 安装项目&…

nandgame中的asm编程PUSH_VALUE、ADD、SUB、NEG、AND、OR

参考&#xff1a;https://zhuanlan.zhihu.com/p/613188641 PUSH_VALUE题目说明及答案 将值推送到堆栈上。 提示&#xff1a;该值将作为宏的替换值提供&#xff0c;但在测试时&#xff0c;您可以在“测试工具”框中设置该值。现在&#xff0c;我们引入了一个使用占位符的宏。宏…

nginx This request has been blocked; the content must be served over HTTPS问题处理

This request has been blocked; the content must be served over HTTPS问题处理 1.问题现象2.解决问题3.解决后的现象4.proxy_set_header x-forwarded-proto 作用 1.问题现象 Mixed Content: The page at https://www.ssjxx.cn/ssjy/viy-edu/index.html?systemCodeTW0010#/…

iOS-获取Xcode工程中文件的路径

1、使用Create folder references的Add folders的方式把文件或者文件夹拖到Xcode工程中 拖入时的设置参考下图 注意拖入到工程之后文件夹是蓝色的&#xff08;Xcode10.1环境&#xff09; 2、代码具体实现&#xff1a; 使用NSBundle的API&#xff0c;然后拼接具体路径即可 NS…

区块链与数字身份:探索Facebook的新尝试

在数字化时代&#xff0c;随着区块链技术的崛起&#xff0c;数字身份成为了一个备受关注的话题。作为全球最大的社交媒体平台之一&#xff0c;Facebook一直在探索如何利用区块链技术来改善数字身份管理和用户数据安全。本文将深入探讨Facebook在这一领域的新尝试&#xff0c;探…

【ArcGIS微课1000例】0109:ArcGIS计算归一化水体指数(NDWI)

文章目录 一、加载数据二、归一化水体指数介绍三、归一化水体指数计算四、注意事项一、加载数据 加载配套数据0108.rar(本实验的数据与0108的一致)中的Landsat8的8个单波段数据,如下所示: Landsat8波段信息对照表如下表所示: 接下来学习在ArcGIS平台上,基于Landsat8数据…

GPT-4对多模态大模型在多模态预训练、 理解生成上的启发

传统人工智能 模型往往依赖大量有标签数据的监督训练,而且一个模型一般只能解决一个任务,仅适用于单一场景, 这使得人工智能的研发和应用成本高,场景适应能力弱,难以规模化应用。 常见的多模态任务大致可以分为两类: 多模态理解任务,如视频 分类、视觉问答、跨模态检索、指代…

5G如何助力物流智能化转型

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;你的老朋友&#xff0c;老K。行业群 新书《智能物流系统构成与技术实践》人俱乐部 整版PPT和更多学习资料&#xff0c;请球友到知识星球 【智能仓储物流技术研习社】自行下载 智能制造-话题精读 1、西门子…

Maven的scope详解

依赖范围介绍 maven 项目不同的阶段引入到classpath中的依赖是不同的&#xff0c;例如&#xff0c;编译时&#xff0c;maven 会将与编译相关的依赖引入classpath中&#xff0c;测试时&#xff0c;maven会将测试相关的的依赖引入到classpath中&#xff0c;运行时&#xff0c;mav…

菜狗学前端之JS高级笔记

老样子。复制上来的图片都没了&#xff0c;想看原版可以移步对应资源下载(资源刚上传&#xff0c;还在审核中) (免费) JS高级笔记https://download.csdn.net/download/m0_58355897/89102910 一些前提概念 一 什么是js高级 js高级是对js基础语法的一个补充说明&#xff0c;本质…

JetBrains IDE(IDEA/WebStorm)配置GitHub Copilot

关于 GitHub Copilot 和 JetBrains IDE GitHub Copilot 在编写代码时提供 AI 对程序员的自动完成样式的建议。 有关详细信息&#xff0c;请参阅“关于 GitHub Copilot Individual”。 如果使用 JetBrains IDE&#xff0c;可以直接在编辑器中查看并合并来自 GitHub Copilot 的…

asp.net网上水果销售平台 水果购物商城系统+sqlserver

网上水果销售平台 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库 功能模块&#xff1a; asp.net网上水果销售平台 水果购物商城系统 用户功能有 网站首页 全部水果 我的订单 购物车用户…

python-flask后端知识点

anki 简单介绍&#xff1a; 在当今信息爆炸的时代&#xff0c;学习已经不再仅仅是获取知识&#xff0c;更是一项关于有效性和持续性的挑战。幸运的是&#xff0c;我们有幸生活在一个科技日新月异的时代&#xff0c;而ANKI&#xff08;Anki&#xff09;正是一款旗舰级的学习工具…

探索算力(云计算、人工智能、边缘计算等):数字时代的引擎

引言 在数字时代&#xff0c;算力是一种至关重要的资源&#xff0c;它是推动科技创新、驱动经济发展的关键引擎之一。简而言之&#xff0c;算力即计算能力&#xff0c;是计算机系统在单位时间内完成的计算任务数量或计算复杂度的度量。随着科技的不断发展和应用范围的不断扩大…

在ubuntu系统上安装ffmpeg支持rrweb使用rrvideo对视频文件转mp4格式遇到的一些问题及解决办法

在ubuntu系统上安装ffmpeg支持rrweb使用rrvideo对视频文件转mp4格式遇到的一些问题及解决办法 1,ubuntu系统上安装ffmpeg4.4.1稳定版本1,ubuntu系统上安装ffmpeg4.4.1稳定版本 按照ChatGPT3.5来 sudo apt updatesudo apt install build-essential git sudo apt-get instal…

Qt 中的项目文件解析和命名规范

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、Qt项目文件解析 1、.pro 文件解析 2、widget.h 文件解析 3、main.cpp 文件解析 4、widget.cpp…

智慧公厕:提升城市管理效率,改善居民生活体验

智慧公厕作为城市基础设施的重要组成部分&#xff0c;正逐渐成为改善城市品质和提升居民生活体验的一项关键措施。通过智能化管理、数字化使用和信息化运行&#xff0c;智慧公厕不仅可以为城市居民带来更舒适便利的使用体验&#xff0c;而且对于城市的高质量发展、宜居性和包容…