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

第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 HttpResponse
    
    
    def index(request):
        return HttpResponse("Welcome")
    
    
    urlpatterns = [
        path("", index),
    ]
    
    • 定义的跳转函数中第一个参数必须为 request

4. URL 的两种传参方式

4.1 通过字符串查询

  • book/views.py

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

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

4.2 在 path 中携带

  • book/views.py

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

    from book import views
    
    urlpatterns = [
        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 views
    
    app_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 HttpResponse
    
    
    def 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 include
    
    urlpatterns = [
       path("book/", include("book.urls"))
    ]
    

7. 路由反转

  • urls.py

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


http://www.kler.cn/news/355017.html

相关文章:

  • WLAN技术
  • 【前端】Matter:基础概念与入门
  • 基于51单片机的PID直流电机调速系统(程序+Proteus仿真+报告+原理图)
  • Rider + xmake DX12 开发环境
  • 【AAOS】Android Automotive 15模拟器源码下载及编译
  • tensorRT安装详解(linux与windows)
  • Redis总结(官方文档解读)
  • 【工具篇】MLU运行XInference部署手册
  • 安全见闻笔记
  • 春日学习伴侣:Spring Boot答疑平台
  • 03.顺序表实现
  • JS_用发布订阅模式解耦
  • 云手机:社交平台运营的热门工具
  • 王爽汇编语言第三版实验1
  • 基于springboot的学习平台系统
  • 两种常见的磁盘分区样式及它们的区别总结
  • HttpUtils 详解
  • k8s jenkins 2.421动态创建slave
  • linux 内核如何读取你配置好的.config文件
  • 【CentOS】Shell脚本案例:归档文件