第1个Django应用及Django的请求处理

Python学习之路系列文章目录



  1. python面向对象之警察与匪徒火拼场景模拟
  2. python面向对像之第二次笔记
  3. Django环境搭建及测试
  4. 第1个Django应用及Django的请求处理

---

第1个Django应用及Django的请求处理

  • Python学习之路系列文章目录
  • 一、PyCharm创建django项目
  • 二、创建app
    • 什么是app
    • 怎么创建app
    • 补充:
  • 三、django如何处理请求?<br><br>
  • 四、基本的路由配置
    • 1. 这是最简单的一级路由:
    • 2. 这是二级路由:
    • 3. 使用参数的路由
  • 五、path转化器
  • 六、path方法
  • 总结

---

一、PyCharm创建django项目

  1. 打开软件并选择新建项目

注意:更多设置里面那个模板文件夹清空,标准的项目不包含那个文件夹

在这里插入图片描述

点击创建就成功了

在这里插入图片描述

manage文件主要是用于项目管理,启动项目,创建app,数据管理(不要乱动这个文件)
settings.py 是项目配置文件
urls.py 是配置路由的地方
wsgi.py 同步接受网络请求(不要乱动这个文件)
asgi.py 异步接受网络请求(不要乱动这个文件)

二、创建app

什么是app


在 Django 项目中,一个 “app”(应用)是指一个具有特定功能的独立模块。每个 Django 项目都由一个或多个应用组成,每个应用都负责处理特定的功能或业务逻辑。

一个 Django 应用通常包含以下内容:

  1. 模型(Models):定义数据结构和数据库表格的方式。
  2. 视图(Views):处理用户请求,与模型交互并返回响应。
  3. 模板(Templates):定义呈现给用户的页面内容。
  4. URL 配置(URLs):指定处理不同 URL 请求的视图函数。
  5. 静态文件(Static files):如图片、CSS 文件、JavaScript 文件等。
  6. 管理命令(Management commands):自定义的 Django 命令,可用于执行各种任务。

通过将功能划分为多个应用,可以使 Django 项目更加模块化、易于维护和扩展。每个应用都可以独立开发、测试和部署,同时还可以在不同的项目中重复使用。

怎么创建app

  1. 点击create app (也可以直接点下面的终端输入 startapp <app名称>

如图所示:

在这里插入图片描述

  1. 然后去setting.py文件下看是否注册好了,如果没加上就手动添上。

在这里插入图片描述

  1. 接下来在 urls.py 中配置路由规则(也就是确定请求的URL应该由哪个视图函数来处理)

在这里插入图片描述

  1. 配置好路由后就得去写对应的 view 视图(页面)了

    打开之前创建的app 找到 views.py 文件

    这个 index 就是之前配置路由指定运行的函数

在这里插入图片描述

  1. 最后点击运行即可在浏览器看效果了

在这里插入图片描述

------

补充:

命令行启动:


PS E:\02code\PycharmProjects\djangoTest> python manage.py runserver

三、django如何处理请求?

Django的请求处理流程通常如下:

  1. URL 配置:首先,Django会根据项目中的URL配置确定哪个视图函数或类应该处理请求。URL配置通常在项目的 urls.py 文件中定义。
    决定好要使用的根 URLconf 模块。通常,这是 ROOT_URLCONF 设置的值,但是如果传入的 HttpRequest 对象具有 urlconf 属性(由中间件设置) ,则其值将被用于代替 ROOT_URLCONF 设置。也就是说你可以自定义项目入口url是哪个文件!
    接着加载该模块并寻找可用的 urlpatterns ,它是 django.urls.path() 或者 django.urls.re_path() 实例的一个列表,依次匹配每个URL模式,在与请求的URL相匹配的第一个模式停下来。也就是说, url 匹配是从上往下的短路操作,所以 url 在列表中的位置非常关键。
  2. 视图函数或类:一旦Django确定了应该处理请求的视图函数或类,它会调用该视图来处理请求。视图函数或类接收请求对象作为参数,并返回一个HTTP响应对象。
    • 函数视图:如果使用函数视图,那么这个视图就是一个简单的Python函数,它接收请求对象作为参数,并返回一个HTTP响应对象。
    • 类视图:如果使用类视图,那么这个视图就是一个继承自Django提供的视图类的Python类,通常至少包含一个dispatch()方法来处理不同类型的请求(GET、POST等),并且每个HTTP请求方法通常都有对应的方法(例如get()、post())来处理相应的请求类型。
  3. 处理请求:在视图函数或类中,你可以编写逻辑来处理请求。这可能包括从数据库中检索数据、处理表单数据、渲染模板等操作。
  4. 返回响应:最后,视图函数或类应该返回一个HTTP响应对象。这个响应对象可以是HTML内容、JSON数据、重定向等,具体取决于应用程序的需求和视图的目的。

    如果匹配的表达式返回了未命名的组,那么匹配的内容将作为位置参数提供给视图。
    关键字参数由表达式匹配的命名组组成,但是可以被 django.urls.pathO 的可选参数 kwargs 覆盖。
    如果没有匹配到任何表达式,或者过程中抛出异常,将调用一个适当的错误处理视图。(比如403,比如无任何反应)

举个例子:

假设我们有一个简单的博客应用,用户可以访问博客首页查看所有的文章列表。当用户访问网站的首页时,Django将处理该请求并返回包含所有文章的页面。

首先,我们需要定义一个URL配置,告诉Django当用户访问首页时应该调用哪个视图来处理请求。

# 项目的urls.py文件from django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'),
]

然后,我们需要编写一个视图函数来处理首页的请求。我们可以在应用程序的views.py文件中定义这个视图函数。

# 应用程序的views.py文件from django.shortcuts import render
from .models import Postdef index(request):# 从数据库中获取所有文章posts = Post.objects.all()# 渲染模板并将文章传递给模板return render(request, 'blog/index.html', {'posts': posts})

在这个例子中,index视图函数接收一个 request 参数,代表用户发出的请求。该函数从数据库中获取所有文章,并将它们传递给名为 index.html 的模板进行渲染。最后,它返回一个HTTP响应对象,其中包含渲染后的页面内容。

最后,我们需要创建一个模板来显示所有的文章。我们可以在应用程序的templates/blog目录下创建一个名为index.html的模板文件。

<!-- 应用程序的templates/blog/index.html文件 --><!DOCTYPE html>
<html>
<head><title>博客首页</title>
</head>
<body><h1>欢迎来到我的博客</h1><ul>{% for post in posts %}<li>{{ post.title }}</li>{% endfor %}</ul>
</body>
</html>

现在,当用户访问网站的首页时,Django将按照上述流程处理请求,从数据库中获取所有文章,并将它们渲染到名为index.html的模板中,最终返回给用户一个包含所有文章列表的页面。

四、基本的路由配置

假设我们有一个名为myapp的应用程序,并且我们想要定义一些简单的路由来处理用户的请求。

首先,我们需要在项目的主URL配置文件中(通常是urls.py)定义主路由。然后,我们可以在应用程序的URL配置文件中定义应用程序特定的子路由。

1. 这是最简单的一级路由:

urlpatterns 是个列表,每个元素都是 path() 或 re_path() 的实例

from django.contrib import admin
from django.urls import path
from app01 import viewsurlpatterns = [path('admin/', admin.site.urls),path('index/', views.index)
]

2. 这是二级路由:

myapp应用程序的URL配置包含到主URL配置中,并指定了一个前缀myapp/,这意味着当用户访问以/myapp/开头的URL时,Django将会交给myapp应用程序处理。

# 项目的urls.py文件from django.contrib import admin
from django.urls import path, include  # 导入include函数用于包含应用程序的URL配置urlpatterns = [path('admin/', admin.site.urls),path('myapp/', include('myapp.urls')),  # 包含myapp应用程序的URL配置
]

也就是说访问这个路由时,不会直接调用指定的函数,而是使用include()把第二级路由交给myapp的urls去配置。

# myapp应用程序的urls.py文件from django.urls import path
from . import views  # 导入应用程序的视图模块urlpatterns = [path('', views.index, name='index'),  # 定义一个空路由,指向index视图函数path('about/', views.about, name='about'),  # 定义一个路由,指向about视图函数
]

3. 使用参数的路由

参数部分使用尖括号,可以指定参数类型,很像键值对的形式(类型:参数)

from django.urls import path
from . import viewsurlpatterns = [path('articles/2003/', views.special_case_2003),path('articles/<int:year>/', views.year_archive),path('articles/<int:year>/<int:month>/', views.month_archive),path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]

匹配的时候从上到下依次匹配,成功了则终止继续匹配。
例如:

  • /articles/2005/03/ 将匹配第三条,并调用 views.month_archive(request, year=2005,month=3)
  • /articles/2003/ 匹配第一条,并调用 views.special_case_2003(request)
  • /articles/2003 一条都匹配不上,因为它最后少了一个斜杠,而列表中的所有模式中都以斜杠结尾;
  • /articles/2003/03/building-a-django-site/ 将匹配最后一个,并调用views.article_detail(request, year=2003, month=3, slug="building-a-django-site"

五、path转化器

Django 中,路径转换器(path converter)是一种机制,用于将URL中的特定部分提取为视图函数的参数。路径转换器允许你指定 URL 中的某个部分的格式或类型,并将其传递给相应的视图函数。

以下是一些常用的路径转换器及其作用:

  1. <int:name> : 将URL中的部分作为整数参数传递给视图函数。

    path('post/<int:post_id>/', views.post_detail, name='post_detail')
    

    这个路径转换器用于捕获整数类型的值,例如 post/123/ ,其中的 123 将作为整数参数 post_id 传递给视图函数。

  2. <str:name> : 将URL中的部分作为字符串参数传递给视图函数。

    path('category/<str:category_name>/', views.category_detail, name='category_detail')
    

    这个路径转换器用于捕获字符串类型的值,例如 category/technology/ ,其中的 technology 将作为字符串参数 category_name 传递给视图函数。

  3. <slug:name> : 将URL中的部分作为slug参数(通常是一个短标签,包含小写字母、数字、下划线和连字符)传递给视图函数。

    path('article/<slug:article_slug>/', views.article_detail, name='article_detail')
    

    这个路径转换器用于捕获slug类型的值,例如 article/my-first-post/ ,其中的 my-first-post 将作为 slug 参数 article_slug 传递给视图函数。

  4. <uuid:name> : 将URL中的部分作为UUID参数(通常是全局唯一标识符)传递给视图函数。

    path('user/<uuid:user_id>/', views.user_profile, name='user_profile')
    

    这个路径转换器用于捕获UUID类型的值,例如 user/123e4567-e89b-12d3-a456-426614174000/ ,其中的 123e4567-e89b-12d3-a456-426614174000 将作为UUID参数 user_id 传递给视图函数。

  5. <path:name> : 将URL中的部分作为路径参数传递给视图函数。这个转换器用于捕获包含斜杠(/)的路径,允许你捕获包括斜杠在内的任何字符。

    path('file/<path:file_path>/', views.file_detail, name='file_detail')
    

    这个路径转换器用于捕获路径类型的值,例如 file/documents/report.pdf ,其中的 documents/report.pdf 将作为路径参数file_path传递给视图函数。

  6. <date:name>: 将URL中的部分作为日期参数传递给视图函数。这个转换器用于捕获日期类型的值,可以指定日期的格式。

    path('event/<date:event_date>/', views.event_detail, name='event_detail')
    

    这个路径转换器用于捕获日期类型的值,例如event/2024-04-05/,其中的2024-04-05将作为日期参数event_date传递给视图函数。

  7. <path to converter:parameter>: 这个转换器允许你自定义路径转换器。你可以创建自己的转换器,并在URL模式中使用它们。

    path('custom/<custom_converter:custom_param>/', views.custom_view, name='custom_view')
    

    这个路径转换器用于捕获自定义转换器类型的值,例如custom/value/,其中的value将作为自定义参数custom_param传递给视图函数。

六、path方法


path 方法是 Django 中定义 URL 路由的一种常用方式。它通常用于在 Django 项目中的 urls.py 文件中定义 URL 模式。path 方法的基本语法如下:

path(route, view, kwargs=None, name=None)

其中:

  • route 是一个字符串,表示 URL 的模式匹配规则,可以包含路径转换器和常量部分,并且可以通过命名来标识和引用。

    当使用 route 作为 path 方法中的第一个参数时,有一些注意事项需要考虑:

    1. 斜杠结尾

    如果 route 以斜杠结尾(例如 'articles/'),则请求该 URL 时,末尾有无斜杠都会被匹配。例如,/articles//articles 都会匹配到 'articles/' 这个路由。因此,在设计 route 时需要根据实际情况确定是否以斜杠结尾。

    1. 常量部分和路径转换器的顺序
      route 中定义常量部分和路径转换器时,它们的顺序很重要。Django 会按照 route 中的顺序进行匹配,因此应该根据需要将常量部分和路径转换器按照正确的顺序放置,以确保正确的匹配。

    2. 路径转换器的选择
      使用正确的路径转换器非常重要。选择与实际需要相符合的转换器可以帮助 Django 捕获和处理 URL 中的动态部分。例如,如果需要匹配一个整数参数,应该使用 int 转换器;如果需要匹配一个包含任意字符的路径段,应该使用 path 转换器。

    3. 命名路由的唯一性
      如果为 route 分配了一个名称,确保该名称在整个 Django 项目中是唯一的。这样可以避免在进行 URL 反向解析时出现混淆或错误。

    4. 路由冲突
      当定义多个 URL 模式时,要注意避免路由冲突。如果有两个或多个 URL 模式具有相似的 route,可能会导致不确定的匹配行为或错误的路由解析。

    5. 使用命名路由进行 URL 反向解析
      如果需要在视图函数、模板或其他地方生成特定路由的 URL,最好使用命名路由进行 URL 反向解析,而不是硬编码 URL。这样可以提高代码的可维护性,并降低修改 URL 结构时的风险。

  • view 是一个视图函数或者视图类的引用,用于处理匹配到的 URL 请求。

  • kwargs 是一个字典,包含额外的关键字参数,传递给视图函数。

  • name 是一个可选的命名参数,用于为 URL 模式命名,使得在 Django 项目中的其他地方可以引用这个 URL 模式。

例如,下面是一个简单的 path 方法的示例:

from django.urls import path
from . import viewsurlpatterns = [path('hello/', views.say_hello, name='hello'),
]

在这个示例中,path 方法定义了一个 URL 模式 hello/,当用户访问这个 URL 时,将会调用名为 say_hello 的视图函数来处理请求。这个 URL 模式也被命名为 'hello',以便在其他地方引用它。

通过使用 path 方法,你可以方便地定义 Django 项目中的 URL 路由,并将请求映射到相应的视图函数或视图类进行处理。

------

总结

这个人很懒,不愿意写总结。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/795361.shtml

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

相关文章

JavaScript权威指南(第7版) 笔记 - 扩展操作符总结

扩展操作符 ... &#xff0c;不是真正意义上的JavaScript操作符。 let str "0123ABC" console.log(typeof ...str);// Uncaught SyntaxError: Unexpected token ... 上面的第2行代码会报错&#xff0c;扩展操作符 ... 只能在数组字面量、对象字面量、函数调用中使…

C语言中的字符与字符串:魔法般的函数探险

前言 在C语言的世界里&#xff0c;字符和字符串是两个不可或缺的元素&#xff0c;它们像是魔法般的存在&#xff0c;让文字与代码交织出无限可能。而在这个世界里&#xff0c;有一批特殊的函数&#xff0c;它们如同探险家&#xff0c;引领我们深入字符与字符串的秘境&#xff0…

Linux:进程等待究竟是什么?如何解决子进程僵尸所带来的内存泄漏问题?

Linux&#xff1a;进程等待究竟是什么&#xff1f;如何解决子进程僵尸所带来的内存泄漏问题&#xff1f; 一、进程等待的概念二、进程等待存在的意义三、如何进行进程等待3.1 wait()是实现进程等待1、wait()原型2. 验证wait()能回收僵尸子进程的空间 3.2 waitpid()实现进程等待…

560.和为K的子数组

560.和为K的子数组 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#xf…

Win10 下 git error unable to create file Invalid argument 踩坑实录

原始解决方案参看&#xff1a;https://stackoverflow.com/questions/26097568/git-pull-error-unable-to-create-file-invalid-argument 本问题解决于 2024-02-18&#xff0c;使用 git 版本 2.28.0.windows.1 解决方案 看 Git 抛出的出错的具体信息&#xff0c;比如如下都来自…

c51 单片机如何控制小灯闪烁?

目录 硬件电路设计 软件编程 烧录程序 测试 调整和优化 C51单片机是一种经典的8位微控制器&#xff0c;广泛应用于各种嵌入式系统和智能控制项目中。 C51单片机控制小灯闪烁主要涉及到硬件电路设计和软件编程两个方面。下面是一个基本的步骤说明&#xff1a; 硬件电路设计…

铸铁平台合理布局的重要性

铸铁平台合理布局的重要性是为了确保工作环境的安全和效率。以下是一些重要的原因&#xff1a; 安全性&#xff1a;合理布局可以最大限度地减少工作场所的事故和伤害。通过将设备和材料放置在正确的位置&#xff0c;可以降低工作人员被危险物体击中或跌倒的风险。此外&#xff…

【瑞萨RA6M3】1. 基于 vscode 搭建开发环境

基于 vscode 搭建开发环境 1. 准备2. 安装2.1. 安装瑞萨软件包2.2. 安装编译器2.3. 安装 cmake2.4. 安装 openocd2.5. 安装 ninja2.6. 安装 make 3. 生成初始代码4. 修改 cmake 脚本5. 调试准备6. 仿真 1. 准备 需要瑞萨仓库中的两个软件&#xff1a; MDK_Device_Packs.zipse…

Android 代码自定义drawble文件实现View圆角背景

简介 相信大多数Android开发都会遇到一个场景&#xff0c;给TextView或Button添加背景颜色&#xff0c;修改圆角&#xff0c;描边等需求。一看到这样的实现效果&#xff0c;自然就是创建drawble文件&#xff0c;设置相关属性shap&#xff0c;color&#xff0c;radius等。然后将…

基于单片机电流变送器系统仿真设计

**单片机设计介绍&#xff0c;基于单片机电流变送器系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机电流变送器系统的仿真设计&#xff0c;主要目标是利用仿真技术&#xff0c;模拟单片机与电流变送器之间…

二分答案 蓝桥杯 2022 省A 青蛙过河

有些地方需要解释&#xff1a; 1.从学校到家和从家到学校&#xff0c;跳跃都是一样的&#xff0c;直接看作2*x次过河就可以。 2.对于一个跳跃能力 y&#xff0c;青蛙能跳过河 2x 次&#xff0c;当且仅当对于每个长度为 y 的区间&#xff0c;这个区间内 h 的和都大于等于…

hololens 2 投屏 报错

使用Microsoft HoloLens投屏时&#xff0c;ip地址填对了&#xff0c;但是仍然报错&#xff0c;说hololens 2没有打开&#xff0c; 首先检查 开发人员选项 都打开&#xff0c;设备门户也打开 然后检查系统–体验共享&#xff0c;把共享都打开就可以了

计算机网络—HTTP协议:深入解析与应用实践

​ &#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;ヒステリックナイトガール 1:03━━━━━━️&#x1f49f;──────── 5:06 &#x1f504; ◀️ ⏸ ▶️ ☰…

java算法day45 | 动态规划part07 ● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数

70. 爬楼梯 &#xff08;进阶&#xff09; 题目描述&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬至多m (1 < m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a;给定 n 是一个正整数。 输入描述&#xff1a;输入…

java对象是怎么在jvm中new出来的

java对象是怎么在jvm中new出来的 查看java对象字段属性在内存中的值 java 对象 创建 流程 附上java源码 public class MiDept {private int innerFiled999;public MiDept() {System.out.println("new MiDept--------------");}public String show(int data) {Sy…

[Win10] VMware Workstation Pro 17.5.1 Build 23298084 Win64安装教程

VMware Workstation Pro 17.5.1 Build 23298084 Win64安装教程 下载 https://download.csdn.net/download/u012621175/89088925 安装 激活 备注 如果激活不成功可以私信获取私钥

android APP monkey 测试

monkey 测试 一、电脑ADB安装及使用详解1、什么是 Monkey 测试2、什么是ADB3、ADB的作用4、安装前提条件5、ADB下载6、ADB安装与配置 二、连接安卓手机检查是否连接上安卓手机windows端安装ADB驱动 三、 monkey测试操作指令演示指令APP包名查看方式测试效果 一、电脑ADB安装及使…

画图理解JVM相关内容

文章目录 1. JVM视角下&#xff0c;内存划分2. 类内存分布硬核详解1. 获取堆内存参数2. 扫描堆内存&#xff0c;定位实例3. 查看实例所在地址的数据4. 找到实例所指向的类信息的地址5. 查看class信息6. 结论 3. Java的对象创建流程4. 垃圾判别算法4.1 引用计数法4.2 可达性分析…

ubuntu16如何使用高版本cmake

1.引言 最近在尝试ubuntu16.04下编译开源项目vsome&#xff0c;发现使用apt命令默认安装cmake的的版本太低。如下 最终得知&#xff0c;ubuntu16默认安装确实只能到3.5.1。解决办法只能是源码安装更高版本。 2.源码下载3.20 //定位到opt目录 cd /opt 下载 wget https://cmak…

Spring Boot 接入 Redis

Spring Boot 接入 Redis 简介 Redis 是一种访问速度非常快的内存数据结构存储&#xff0c;用作数据库、缓存、消息代理和流引擎。提供 strings、hashes、lists、sets 等数据结构。可以解决会话缓存、消息队列、分布式锁、定期将数据集存储到硬盘等功能。 通过 Redis 设计实现…