Python学习之路系列文章目录

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

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

Python学习之路系列文章目录一、PyCharm创建django项目二、创建app什么是app怎么创建app补充:

三、django如何处理请求?

四、基本的路由配置1. 这是最简单的一级路由:2. 这是二级路由:3. 使用参数的路由

五、path转化器六、path方法总结

一、PyCharm创建django项目

打开软件并选择新建项目

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

点击创建就成功了

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

二、创建app

什么是app

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

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

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

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

怎么创建app

点击create app (也可以直接点下面的终端输入 startapp

如图所示:

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

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

配置好路由后就得去写对应的 view 视图(页面)了 打开之前创建的app 找到 views.py 文件 这个 index 就是之前配置路由指定运行的函数

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

补充:

命令行启动:

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

三、django如何处理请求?

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

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 在列表中的位置非常关键。视图函数或类:一旦Django确定了应该处理请求的视图函数或类,它会调用该视图来处理请求。视图函数或类接收请求对象作为参数,并返回一个HTTP响应对象。

函数视图:如果使用函数视图,那么这个视图就是一个简单的Python函数,它接收请求对象作为参数,并返回一个HTTP响应对象。类视图:如果使用类视图,那么这个视图就是一个继承自Django提供的视图类的Python类,通常至少包含一个dispatch()方法来处理不同类型的请求(GET、POST等),并且每个HTTP请求方法通常都有对应的方法(例如get()、post())来处理相应的请求类型。 处理请求:在视图函数或类中,你可以编写逻辑来处理请求。这可能包括从数据库中检索数据、处理表单数据、渲染模板等操作。返回响应:最后,视图函数或类应该返回一个HTTP响应对象。这个响应对象可以是HTML内容、JSON数据、重定向等,具体取决于应用程序的需求和视图的目的。 如果匹配的表达式返回了未命名的组,那么匹配的内容将作为位置参数提供给视图。 关键字参数由表达式匹配的命名组组成,但是可以被 django.urls.pathO 的可选参数 kwargs 覆盖。 如果没有匹配到任何表达式,或者过程中抛出异常,将调用一个适当的错误处理视图。(比如403,比如无任何反应)

举个例子:

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

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

# 项目的urls.py文件

from django.urls import path

from . import views

urlpatterns = [

path('', views.index, name='index'),

]

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

# 应用程序的views.py文件

from django.shortcuts import render

from .models import Post

def index(request):

# 从数据库中获取所有文章

posts = Post.objects.all()

# 渲染模板并将文章传递给模板

return render(request, 'blog/index.html', {'posts': posts})

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

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

博客首页

欢迎来到我的博客

    {% for post in posts %}

  • {{ post.title }}
  • {% endfor %}

现在,当用户访问网站的首页时,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 views

urlpatterns = [

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 views

urlpatterns = [

path('articles/2003/', views.special_case_2003),

path('articles//', views.year_archive),

path('articles///', views.month_archive),

path('articles////', 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 中的某个部分的格式或类型,并将其传递给相应的视图函数。

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

: 将URL中的部分作为整数参数传递给视图函数。 path('post//', views.post_detail, name='post_detail')

这个路径转换器用于捕获整数类型的值,例如 post/123/ ,其中的 123 将作为整数参数 post_id 传递给视图函数。 : 将URL中的部分作为字符串参数传递给视图函数。 path('category//', views.category_detail, name='category_detail')

这个路径转换器用于捕获字符串类型的值,例如 category/technology/ ,其中的 technology 将作为字符串参数 category_name 传递给视图函数。 : 将URL中的部分作为slug参数(通常是一个短标签,包含小写字母、数字、下划线和连字符)传递给视图函数。 path('article//', views.article_detail, name='article_detail')

这个路径转换器用于捕获slug类型的值,例如 article/my-first-post/ ,其中的 my-first-post 将作为 slug 参数 article_slug 传递给视图函数。 : 将URL中的部分作为UUID参数(通常是全局唯一标识符)传递给视图函数。 path('user//', views.user_profile, name='user_profile')

这个路径转换器用于捕获UUID类型的值,例如 user/123e4567-e89b-12d3-a456-426614174000/ ,其中的 123e4567-e89b-12d3-a456-426614174000 将作为UUID参数 user_id 传递给视图函数。 : 将URL中的部分作为路径参数传递给视图函数。这个转换器用于捕获包含斜杠(/)的路径,允许你捕获包括斜杠在内的任何字符。 path('file//', views.file_detail, name='file_detail')

这个路径转换器用于捕获路径类型的值,例如 file/documents/report.pdf ,其中的 documents/report.pdf 将作为路径参数file_path传递给视图函数。 : 将URL中的部分作为日期参数传递给视图函数。这个转换器用于捕获日期类型的值,可以指定日期的格式。 path('event//', views.event_detail, name='event_detail')

这个路径转换器用于捕获日期类型的值,例如event/2024-04-05/,其中的2024-04-05将作为日期参数event_date传递给视图函数。 : 这个转换器允许你自定义路径转换器。你可以创建自己的转换器,并在URL模式中使用它们。 path('custom//', 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 方法中的第一个参数时,有一些注意事项需要考虑:

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

常量部分和路径转换器的顺序: 在 route 中定义常量部分和路径转换器时,它们的顺序很重要。Django 会按照 route 中的顺序进行匹配,因此应该根据需要将常量部分和路径转换器按照正确的顺序放置,以确保正确的匹配。 路径转换器的选择: 使用正确的路径转换器非常重要。选择与实际需要相符合的转换器可以帮助 Django 捕获和处理 URL 中的动态部分。例如,如果需要匹配一个整数参数,应该使用 int 转换器;如果需要匹配一个包含任意字符的路径段,应该使用 path 转换器。 命名路由的唯一性: 如果为 route 分配了一个名称,确保该名称在整个 Django 项目中是唯一的。这样可以避免在进行 URL 反向解析时出现混淆或错误。 路由冲突: 当定义多个 URL 模式时,要注意避免路由冲突。如果有两个或多个 URL 模式具有相似的 route,可能会导致不确定的匹配行为或错误的路由解析。 使用命名路由进行 URL 反向解析: 如果需要在视图函数、模板或其他地方生成特定路由的 URL,最好使用命名路由进行 URL 反向解析,而不是硬编码 URL。这样可以提高代码的可维护性,并降低修改 URL 结构时的风险。 view 是一个视图函数或者视图类的引用,用于处理匹配到的 URL 请求。 kwargs 是一个字典,包含额外的关键字参数,传递给视图函数。 name 是一个可选的命名参数,用于为 URL 模式命名,使得在 Django 项目中的其他地方可以引用这个 URL 模式。

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

from django.urls import path

from . import views

urlpatterns = [

path('hello/', views.say_hello, name='hello'),

]

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

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

总结

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

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: