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.rhkb.cn/news/301873.html

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

相关文章

迭代器模式

前言 迭代器模式就是分离了集合对象的遍历行为&#xff0c;抽象出一个迭代器类来负责&#xff0c;这样既可以做到不暴露集合的内部结构&#xff0c;又可让外部代码透明地访问集合内部的数据。 迭代器模式在访问数组、集合、列表等数据时&#xff0c;尤其是数据库数据操作时&am…

PSO-SVM,基于PSO粒子群算法优化SVM支持向量机回归预测(多输入单输出)-附代码

PSO-SVM是一种结合了粒子群优化&#xff08;Particle Swarm Optimization, PSO&#xff09;算法和支持向量机&#xff08;Support Vector Machine, SVM&#xff09;的方法&#xff0c;用于回归预测问题。下面我将解释PSO-SVM的原理&#xff1a; 1、支持向量机&#xff08;SVM&a…

系统架构评估_3.ATAM方法

架构权衡分析方法&#xff08;Architecture Tradeoff Analysis Method&#xff0c;ATAM&#xff09;是在SAAM的基础发展起来的&#xff0c;主要针对性能、实用性、安全性和可修改性&#xff0c;在系统开发之前&#xff0c;对这些质量属性进行评价和折中。 &#xff08;1&#x…

10倍提效!用ChatGPT编写系统功能文档。。。

系统功能文档是一种描述软件系统功能和操作方式的文档。它让开发团队、测试人员、项目管理者、客户和最终用户对系统行为有清晰、全面的了解。 通过ChatGPT&#xff0c;我们能让编写系统功能文档的效率提升10倍以上。 ​《Leetcode算法刷题宝典》一位阿里P8大佬总结的刷题笔记…

计算机网络-TCP连接建立阶段错误应对机制

错误现象 丢包 网络问题&#xff1a;网络不稳定可能导致丢包&#xff0c;例如信号弱或干扰强。带宽限制可能导致路由器或交换机丢弃包&#xff0c;尤其是在高流量时段。网络拥塞时&#xff0c;多个数据流竞争有限的资源&#xff0c;也可能导致丢包。缓冲区溢出&#xff1a;TC…

Astra深度相机在Ubuntu18.04系统下实现相机标定

问题&#xff1a; 当使用Astra相机的启动的指令启动相机后&#xff0c;使用rviz查看相机所发布的rgb数据时&#xff0c;在终端会出现如下的提示信息&#xff1a; Camera calibration file /home/car/.ros/camera_info/rgb_Astra_Orbbec.yaml not found. Camera calibration fil…

(学习日记)2024.04.11:UCOSIII第三十九节:软件定时器

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

nacos分布式程序开发实例

1.通过windows docker desktop 完成 nacos 的安装/启动/配置 &#xff08;1&#xff09;先安装docker desktop docker-toolbox-windows-docker-for-windows-stable安装包下载_开源镜像站-阿里云 &#xff08;2&#xff09;配置docker 国内镜像源 Docker 镜像加速 | 菜鸟教程…

携程旅行 abtest

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章…

Linux|从 STDIN 读取 Awk 输入

简介 在之前关于 Awk 工具的系列文章中&#xff0c;主要探讨了如何从文件中读取数据。但如果你希望从标准输入&#xff08;STDIN&#xff09;中读取数据&#xff0c;又该如何操作呢&#xff1f; 在本文中&#xff0c;将介绍几个示例&#xff0c;展示如何使用 Awk 来过滤其他命令…

WPF使用MVVM,将Image中的图片绑定到OpenCVSharp中的Mat类型

看了很多帖子&#xff0c;代码复制过去都是报错的&#xff0c;查看了OpenCVSharp.Extensions的底层&#xff0c;发现用法在WPF中已经进行了更改&#xff0c;原本需要从Mat->Bitmap->BitmapImage&#xff0c;简化成了Mat->BitmapSource这一个过程&#xff0c;所以这也是…

基于单片机水塔水位检测控制系统设计

**单片机设计介绍&#xff0c; 基于单片机水塔水位检测控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机水塔水位检测控制系统设计的主要目标是实现水塔水位的自动监测与控制&#xff0c;确保水塔内的水位始…

J基于微信小程序的电影订票、电影购票小程序

文章目录 1 **摘 要**2 技术简介**3 系统功能设计****第4章 系统设计****4.1系统结构设计** 第5章 系统实现**5.1管理员服务端功能模块**5.2用户客户端功能模块 结 论6 推荐阅读7 源码获取&#xff1a; 1 摘 要 本文从管理员、用户的功能要求出发&#xff0c;电影订票系统小程…

一文读懂RISC-V与ARM

RISC-V和ARM是近年来备受关注的两种处理器架构。RISC-V是一种基于精简指令集计算(RISC)原理的开源指令集架构(ISA)&#xff0c;而ARM是一种专有ISA&#xff0c;由于其长期存在于嵌入式系统和移动设备中&#xff0c;已成为嵌入式系统和移动设备的主导选择。市场以及多年积累的信…

ElasticSearch中的分片,副本分别表示什么

在大多数环境中&#xff0c;每个节点都在单独的盒子或虚拟机上运行。 索引 - 在Elasticsearch中&#xff0c;索引是文档的集合。分片 -因为Elasticsearch是一个分布式搜索引擎&#xff0c;所以索引通常被分割成分布在多个节点上的被称为分片的元素。 一个索引被分解成碎片以便…

论如何在小程序展示超链接在线网页

在工作中遇到一个需求&#xff0c;就是在小程序中展示超链接网页&#xff0c;起初我是直接使用web-view标签 <web-view src"https://www.baidu.com/"/>但是web-view只能在开发阶段手机上展示&#xff0c;一旦小程序发布线上&#xff0c;就会出现下面这种情况“…

烤羊肉串引来的思考--命令模式

1.1 吃羊肉串&#xff01; 烧烤摊旁边等着拿肉串的人七嘴八舌地叫开了。场面有些混乱&#xff0c;由于人实在太多&#xff0c;烤羊肉串的老板已经分不清谁是谁&#xff0c;造成分发错误&#xff0c;收钱错误&#xff0c;烤肉质量不过关等。 外面打游击烤羊肉串和这种开门店做烤…

React - 你知道在React组件的哪个阶段发送Ajax最合适吗

难度级别:中级及以上 提问概率:65% 如果求职者被问到了这个问题,那么只是单纯的回答在哪个阶段发送Ajax请求恐怕是不够全面的。最好是先详细描述React组件都有哪些生命周期,最后再回过头来点题作答,为什么应该在这个阶段发送Ajax请求。那…

7.1.4 Selenium 爬取京东商品信息实战

目录 1、实战内容 2、思路 3、分析 url 4、开始操作 1、得到 Cookies 2、访问页面&#xff0c;得到 response 3、解析页面 4、存入 MySQL 5、1-3步总代码 1、实战内容 爬取京东笔记本电脑商品的信息(如&#xff1a;价格、商品名、评论数量)&#xff0c;存入 MySQL 中…

JSBridge原理 - 前端H5与客户端Native交互

1. 概述&#xff1a; 在混合应用开发中&#xff0c;一种常见且成熟的技术方案是将原生应用与 WebView 结合&#xff0c;使得复杂的业务逻辑可以通过网页技术实现。实现这种类型的混合应用时&#xff0c;就需要解决H5与Native之间的双向通信。JSBridge 是一种在混合应用中实现 …