当前位置: 首页 > news >正文

Django笔记一:搭建Django环境与URL路径访问

        博主之前学从Java后端开发,后面获取到读研资格,想着未来转算法岗,初学Python,发现Python还挺有趣的,由于之前所学后端缘故,有点后端情节,想学习一下Django框架(python的web框架),技多不压身,开学!

一、下载Django环境

        使用Django进行开发基本就需要三件套,Python、Django和Pymysql。本人采用的开发环境如下:

环境版本号
Python3.12
Django5.0.3
Pymysql1.1.0

        上面这一套环境是本人学习Django的使用环境,基本使用上没有出现版本不适配的问题,基本可以放心学习使用。有的人使用pip,有的人使用anaconda,两种方式安装环境的方式不一样,大家可以自行选择。不过能说明的就是,无论哪种方式安装环境,都是能正常使用Django开发的。

二、构建Django项目

        我这里使用的是Pycharm专业版,记住一定是要专业版,社区版是不能用作web开发的,会有限制的,大家可以去学校认证或者破解。

        新建一个Project,选择Django,选择好环境,我这里使用的是anaconda虚拟环境,基本按照下面这张图的说明就能正常创建一个自己定义的Django文件。

         新建好的Django文件夹,基本只有这几个文件,由于初学,我对这几个文件暂时不是很熟悉,后续学习继续补充。

        最后在右上角启动Django,对了,Django有一个特性,也就是热部署,每一次完成代码的更新,不需要重启Django,只需要ctrl+s保存代码,就会自动更新

三、Django中接口与Url配对

        进入urls.py 文件,这个文件就是接口函数与url配对的设置文件。

        这里的接口函数就是类似与java中的每一个controller里面的接口函数,也可以解释为访问url之后进入到的函数。

         例如,我这里写了一个接口函数,名字为hello_index,在 urlpatterns 中配置好这个接口函数的访问路径,也就是path()的第一个参数,由于我这里是空路径,也就是访问默认路径就会触发这个接口函数,这个接口函数的内容是返回”主页“这个字符串。访问效果可以看下图。

         也许讲到这里,大家会有一些儿懵,我再解释一下我自己的理解。

接口函数:也就是一个def函数,它里面的参数默认带一个request对象,这个对象包括请求体的所有信息,包括请求头,参数等等;

urlpatterns:这个就是一个url与接口函数映射的变量,类型是一个列表,在这个变量里面使用path函数来定义映射;

path函数:path函数第一个参数是配对url,第二个是接口函数(也就是你想配对哪个接口函数),第三个就是name,也就是给这个配对起一个名字(后续我可以根据配对的名字,反向找到这个请求url与接口函数)

四、Django的多模块与Url配置

        在Django的项目中,基本都会遇到分模块开发的状态,例如一个模块只负责图书相关的业务,一个模块只负责电影相关的业务,等等。Django提供了新建模块的命令,命令如下:

python manage.py startapp xxx   (xxx为业务名称)例如:
python manage.py startapp test1

        敲完命令之后,目录下面就会多一个文件夹,我这里是test1,那么目录下面就会多一个test1文件夹。 

        那么,问题又来了,我们前面说,如果是写接口函数以及Url的配置,我们都是在最开始的默认主文件夹下的urls.py下编写和配置的,那么随着模型数目的增大,全部都写在一个文件里面,就会导致难以观看和管理,也不方便更改。当然,这个也是有解决方法的,那么就是book模块相关的url和接口函数只写在book模块里,movie模型相关的也只写在movie模块里,最后只需要在默认的urls.py文件里面配置一下就行,这样子达到了解耦的效果。       

         首先,在自身模块中,我们在views文件中,写接口函数。

         然后创建一个urls.py文件,大致写法可以参照默认的urls.py文件(其实基本就是自己手写写一个urlpattrens列表变量)。

        基本都可以参照默认的urls文件书写。 

        最后一步,就是在默认的urls文件中配置本模块的urls文件。使用path函数,然后标记这个模块的路径,例如这里是movie,也就是说以后访问movie模块所有接口函数,都需要前面加一个/movie/路径区分。

 

 五、一些细节的解释

        首先是两种请求路径的说明,可以参照下面的说明:

方式一:http://127.0.0.1:8000/movie/detail/123方式二:http://127.0.0.1:8000/movie/detail?movie_id=123

        之前有过后端经验的人也许会明白,不过我这里再次解释一下。第一种方式只用过路径url的方式传递参数,而第二种则是将参数保存在请求头里面,后续需要从request请求体里面获取。 相信看了下面的接口函数,大家就可以明白两种的区别。

        然后就是也许很多小伙伴,会发现,urls文件中会多定义了一个变量app_name,这个变量是命名空间,可以理解会区分不同模块的一个标志。

        因为在讲解path函数的时候,我们讲到过第三个参数,也就是name参数,这个参数是为这一次url与接口函数的匹配取的一个名字,但是在偌大的项目中,随着模块数的增多,后面经常会遇到name相重复的情况,所以这个时候引入模块命名空间,用于区分不同模块,即使后面配对名称相同,有不同的命名空间,所以就不会担心重名问题。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • mysql组合键唯一
  • Unreal游戏初始化流程
  • 将 Parallels Desktop(PD虚拟机)安装在移动硬盘上,有影响吗?
  • Fortran:program 和 subroutine 的区别
  • 综合型医院适合什么样的数据摆渡方式,才能服务与安全兼顾?
  • 如何通过深度学习实践来理解深度学习的核心概念
  • STM32 之 SDRAM 详解
  • 【编程基础知识】数据库表设计三范式
  • Open3D(C++) 点云中的植被信息提取
  • 【四范式】浅谈NLP发展的四个范式
  • Java 21的Logging的笔记
  • 79.Options Object 模式
  • Knife4j:打造优雅的SpringBoot API文档
  • NAS远程下载,Docker部署qBittorrent、Transmission、贝锐花生壳
  • matlab处理函数2
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 30天自制操作系统-2
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Java比较器对数组,集合排序
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • nodejs调试方法
  • Objective-C 中关联引用的概念
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Swift 中的尾递归和蹦床
  • windows下mongoDB的环境配置
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 反思总结然后整装待发
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 免费小说阅读小程序
  • 如何编写一个可升级的智能合约
  • 什么软件可以剪辑音乐?
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 新书推荐|Windows黑客编程技术详解
  • 智能合约Solidity教程-事件和日志(一)
  • postgresql行列转换函数
  • ​学习一下,什么是预包装食品?​
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • (13)Hive调优——动态分区导致的小文件问题
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (C)一些题4
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (二十三)Flask之高频面试点
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (回溯) LeetCode 78. 子集
  • (一)Java算法:二分查找
  • (一)插入排序
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)jdk与jre的区别
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation