Vscode 中调试Django程序

 调试介绍:

​​​​​​​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 HttpResponsedef 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_nowreturn 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.hqwc.cn/news/600835.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode-热题100:138. 随机链表的复制

题目描述 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值。…

Golang——方法

一. 方法定义 Golang方法总是绑定对象的实例&#xff0c;并隐式将实例作为第一实参。 只能为当前包内命名类型定义方法参数receiver可以任意命名。如方法中未曾使用&#xff0c;可省略参数名参数receiver类型可以是T或*T。基类型T不能是接口或指针类型(即多级指针)不支持方法重…

【随笔】Git 高级篇 -- 相对引用2 HEAD~n(十三)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

【算法详解】二分查找

1. 二分查找算法介绍 「二分查找算法&#xff08;Binary Search Algorithm&#xff09;」&#xff1a;也叫做 「折半查找算法」、「对数查找算法」。是一种在有序数组中查找某一特定元素的搜索算法。 基本算法思想&#xff1a;先确定待查找元素所在的区间范围&#xff0c;在逐步…

ROS通信机制---服务通信

2.2服务通信 2.2.1服务通信理论模型 2.2.2服务通信自定义srv 后续调用相关msg时&#xff0c;是从这些中间文件调用的 2.2.3服务通信自定义srv调用A&#xff08;c&#xff09; 1.服务端 2.客户端 实现参数的动态提交 问题&#xff1a;如果先启动客户端&#xff0c;那么会请求异…

避雷!网络安全学习五大误区,你还不知道?

尽管安全问题老生常谈&#xff0c;但一些普遍存在的误区仍然可能让企业随时陷入危险境地。 为了有效应对当前层出不穷且不断变换的网络威胁&#xff0c;最大程度规避潜在风险&#xff0c;深入了解网络安全的发展趋势必不可少。即使部署了最新且最先进的硬件和解决方案并严格遵守…

技能鉴定试题及答案,分享几个实用搜题和学习工具 #其他#职场发展

市面上搜题软件不少&#xff0c;大部分都挺好用的&#xff0c;今天小编在这里给大家分享几个好用的搜题工具&#xff0c;都拥有丰富的题库资源&#xff1b;而且搜题功能也都很完善&#xff0c;手机端、网页端均有&#xff0c;有需要的小伙伴赶紧码住&#xff01; 1.千鸟搜题 …

配置VM开机自启动

1. 在此电脑-右键选择“管理”-服务和应用程序-服务中找到VMware Workstation Server服务&#xff08;新版名称也可能是VMware自启动服务&#xff0c;自己找一下&#xff0c;服务属性里有描述信息的&#xff09;&#xff0c;将其启用并选择开机自动启动 新版参考官方文档&…

Redis Cluster集群模式

目录 一、理论 1.1 概念 1.2 集群的作用 1.3 redis集群的数据分片 1.4 Redis集群的主从复制模型 二、实践 2.1 Redis集群模式的搭建 2.1.1 cluster集群前期工作 2.1.2 开启群集功能 2.1.3 启动redis节点 2.1.4 启动集群 2.2 测试集群 总结 一、理论 1.1 概念 集群&a…

SpringBoot及其特性

0.前言 Spring 框架提供了很多现成的功能。那么什么是 Spring Boot&#xff1f;使用 Spring 框架&#xff0c;我们可以避免编写基础框架并快速开发应用程序。为了让 Spring 框架提供基础框架&#xff0c;我们需要向 Spring 框架描述有关我们的应用程序及其组件的信息。 不只是…

混合云构建-如何通过Site to Site VPN 连接 AWS 和GCP云并建立一个高可用的VPN通信

如果我们的业务环境既有AWS云又有GCP云,那么就需要将他们打通,最经济便捷的方式就是通过Site-to-Site VPN连接AWS和GCP云,你需要在两个云平台上分别配置VPN网关,并建立一个VPN隧道来安全地连接这两个环境,稍微有些复杂繁琐,以下是详细步骤的动手实践: 一、在GCP 云中创…

深入了解iOS内存(WWDC 2018)笔记-内存诊断

主要记录下用于分析iOS/macOS 内存问题的笔记。 主要分析命令&#xff1a; vmmap, leaks, malloc_history 一&#xff1a;前言 有 3 种思考方式 你想看到对象的创建吗&#xff1f;你想要查看内存中引用对象或地址的内容吗&#xff1f;或者你只是想看看 一个实例有多大&#…