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

第1节 入门

文章目录

  • 1. URL 组成部分详解
  • 2. 第一个 Django 项目
    • 2.1 项目结构
    • 2.2 project 和 app 的关系
  • 3. URL 与视图函数的映射
  • 4. URL 的两种传参方式
    • 4.1 通过字符串查询
    • 4.2 在 path 中携带
  • 5. path 函数详解
  • 6. 路由模块化
  • 7. 路由反转

1. URL 组成部分详解

URL 的基本组成格式

scheme://[username:password@]hostname[:port][/path][;parameters][?query][#fragment]
  • scheme(protocol):协议

    • 常用协议:hrrp、https、ftp等
  • username、password:用户名、密码

    • 某些情况下 URL 需要提供用户名和密码才能访问
  • hostname:主机地址

    • 可以是域名或 IP 地址
  • port:端口

    • http://localhost:8080
      
    • 服务器设定的端口

  • path:路径

    • 网络资源在服务器中的指定地址
  • parameters:参数

    • 用来指定访问某个资源时的附加信息
  • query:查询

    • 用来查询某类资源
    • 如有多个查询,则用 & 隔开
  • fragment:片段

    • 对资源描述的部分补充
    • 两个主要应用
      • 单页面路由:Vue、React 都可以借助它来做路由管理
      • HTML 锚点:控制一个页面打开时自动下滑滚动到某个特定的位置

2. 第一个 Django 项目

  • 通过 Pycharm 选择 Django 项目自动创建

2.1 项目结构

  • 项目名称
    • asgi.py:项目的入口,用于异步服务器网关接口 (ASGI) 配置
      • ASGI 是一种新的协议,支持异步编程,适用于 WebSocket 等异步任务
    • settings.py:项目的全局配置文件
      • 数据库配置
      • 静态文件路径
      • 安装的应用程序列表
      • 中间件配置
      • 安全设置
    • urls.py:管理 URL 路由,定义用户请求的路径和对应视图函数之间的映射关系
    • wsgi.py: 项目的入口,用于同步服务器网关接口 (WSGI) 配置
      • WSGI 是一种规范,用于同步 Web 请求处理
      • Django 默认使用它来部署
  • manage.py:管理和执行 Django 命令(python manage.py [子命令]
    • 运行服务器
    • 迁移数据库
    • 创建应用

2.2 project 和 app 的关系

  • app:Django 项目的组成部分

    • 一个 app 代表项目中的一个模块,所有 URL 请求的响应都是由 app 来处理
    python manage.py startapp 模块名称
    
  • project:由许多 app 组成

    • 一个 app 可以被用到其他项目

3. URL 与视图函数的映射

  • 修改初始界面

  • urls.py

    from django.http import HttpResponsedef index(request):return HttpResponse("Welcome")urlpatterns = [path("", index),
    ]
    
    • 定义的跳转函数中第一个参数必须为 request

4. URL 的两种传参方式

4.1 通过字符串查询

  • book/views.py

    from django.http import HttpResponsedef book_detail_query_string(request):  # 通过字段查询 http://localhost:8000/book?id=3book_id = request.GET.get("id")  # 等同于 request.GET["id"] 但是 get 方法更加安全,当属性不存在时会返回 None 而不是抛出异常return HttpResponse(f"book id: {book_id}")
    
  • urls.py

    from book import viewsurlpatterns = [path("book", views.book_detail_query_string),
    ]
    

4.2 在 path 中携带

  • book/views.py

    from django.http import HttpResponsedef book_detail_path_variable(request, book_id):  # 在 path 中携带参数 http://localhost:8000/book/3return HttpResponse(f"book id: {book_id}")
    
  • urls.py

    from book import viewsurlpatterns = [path("book/<int:book_id>", views.book_detail_path_variable),  # 添加数据类型限制输入,并限定views.py接收到的book_id为整形
    ]
    

5. path 函数详解

path(route, view, kwargs=None, name=None)
  • route: 字符串,定义 URL 的路径部分
    • 可以包含变量,例如 <int:my_variable>,以从 URL 中捕获参数并将其传递给视图函数
    • 常用数据类型
      • str:不包含斜杠(/)的非空字符串(默认
      • int:非负整数
      • slug:横杠(-)或下划线(_)与字符或数字组成的字符串
      • uuiduuid 字符串
      • path:非空字符串
  • view: 视图函数,处理与给定路由匹配的请求
    • 可以是一个函数或一个基于类的视图
  • kwargs(可选): 一个字典,包含传递给视图函数的额外关键字参数
  • name(可选): 为 URL 路由指定一个唯一的名称,以便在代码的其他地方引用它
    • 这对于在模板中生成 URL 或在代码中进行重定向等操作非常有用

6. 路由模块化

  • book/urls.py

    from django.urls import path
    from . import viewsapp_name = "book"  # 指定应用名称(命名空间)urlpatterns = [path("list", views.book_list, name="book_list"),path("detail/<int:book_id>", views.book_detail, name="book_detail"),
    ]
    
  • book/views.py

    from django.http import HttpResponsedef book_list(request):return HttpResponse(f"Book list")def book_detail(request, book_id):return HttpResponse(f"Book detail: {book_id}")
    
  • urls.py

    from django.urls import includeurlpatterns = [path("book/", include("book.urls"))
    ]
    

7. 路由反转

  • urls.py

    from django.http import HttpResponse
    from book import views
    from django.urls import reversedef index(request):print(reverse("index"))# /print(reverse("book:book_list")) # 获取 app 中的反转需要使用分号,即 app 名称 : url 名称# /book/listprint(reverse("book:book_detail", kwargs={"book_id": 3}))# /book/detail/3return HttpResponse("Welcome")urlpatterns = [path("", index, name='index'),path("book/", include("book.urls")),
    ]
    
  • reverse() 函数不区分 GETPOST,因此无法处理请求的参数

http://www.lryc.cn/news/461677.html

相关文章:

  • 四数之和(medium)08
  • TypeScript中 interface接口 type关键字 enum枚举类型
  • vue3.2实现AES加密解密,秘钥通过API获取,并混淆秘钥,后端thinkphp
  • 简述微服务高可用之Sentinel、Seate
  • 将爱传递 将“服务好”延伸
  • 基于MinIO配置bucket,用于文件下载和浏览
  • Ubuntu 配置 ssh 免密连接、安装Docker、docker-compose
  • C++ -string -常见用法2
  • 为您的 WordPress 网站打造完美广告布局 A5广告单元格插件
  • 前端的AI工具:ChatGPT Canvas与Claude Artifacts对比 -仅仅是OpenAI一个迟来的追赶吗?- 贺星舰五飞试验成功
  • GNU链接器(LD):输出分区类型(NOLOAD、READONLY、DSECT、COPY、INFO、OVERLAY)介绍
  • 【MySQL】表的查询操作——SELECT
  • 天地伟业NVR管理工具EasyNVR平台多个NVR同时管理运行后日志一直在打印error
  • HAL+M4学习记录_7
  • mysql 慢查询日志slowlog
  • 基于AES的遥感图像加密算法matlab仿真
  • MySQL insert 记录后查询是乱码问题分析
  • 字符串算法之AC 自动机(Aho-Corasick Algorithm, 多模式匹配)详细解读
  • YoloV10改进:Block改进|使用ContextAggregation模块改善C2f模块|即插即用
  • 学习之高阶编程str方法
  • FreeRTOS:事件标志组
  • 【高分论文密码】AI赋能大尺度空间模拟与不确定性分析及数字制图
  • 智能摆件(墨水屏)
  • ansible————playbook
  • linux日志分割工具logorate快速验证配置是否有效
  • Unity3D URP画面品质的上限如何详解
  • 风管阻力计算
  • 【redis】redis的多线程和IO多路复用
  • webstorm 编辑器配置及配置迁移
  • Oracle19.25发布,如何打补丁到19.25