# 一、`Django`基础 ## 1.1 基础 `Django`是一个开源的、重量级的`WEB`开发框架。 `Django`的官网: https://www.djangoproject.com ## 1.2 安装与卸载 `Django` > `Django`目前最新的版本为`4.2`,教学环境使用`3.2` ### 1.2.1 在线安装 ```shell sudo pip3 install django==版本号 ``` 说明:上述命令中`版本号`可以省略,如果省略的话,则安装最新的版本。 ### 1.2.2 离线安装 ```shell tar -zxvf Django-3.2.20.tar.gz cd Django-3.2.20 sudo python3 setup.py install ``` ### 1.2.3 查看`Django`版本 ```shell python3 -m django --version ``` ### 1.2.4 卸载`Django` ```shell sudo pip3 uninstall django ``` # 二、创建项目 ## 2.1 创建项目 在`Django`中创建项目分为以下三步: 第一步:创建项目,其命令如下: ```shell django-admin startproject helloDjango ``` 其中: - `django-admin`是`Django`的命令行管理工具,用于对`Django`项目执行某些命令操作。 - `helloDjango`是项目的名称,只要为合法的名称即可。 第二步:启动项目,命令如下: ```shell # 切换到项目目录内 cd helloDjango #运行项目 python3 manage.py runserver ``` 第三步:访问项目 启动浏览器,然后在地址栏输入`http://127.0.0.1:8000` ## 2.2 `Django`项目的目录结构 创建`Django`项目后,其目录结构如下: ```shell helloDjango/ ├── db.sqlite3 ├── helloDjango │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py ``` 这些目录和文件的作用是: - 最外层的`helloDjango`目录是项目的根目录,也是项目的容器 - `manage.py`是一个管理`Django`项目的命令行工具,其基本用法是: ```shell python3 manage.py subcommand ``` `subcommand`包括: `runserver [addport]`,启动用于开发的轻量级的`WEB`服务器 > 常用的端口号: > > `http`协议 80 > > `MySQL`的端口号 3306 > > `FTP`协议 21 `startapp` ,在当前目录或指定目录中创建应用 - 内层的`helloDjango`目录包含项目文件,它是一个纯`Python`包。 - `helloDjango/settings.py`是`Django`项目的配置文件 - `helloDjango/urls.py`,`URL`调度器(也称为路由配置文件) - `helloDjango/wsgi.py`,运行在`WSGI`兼容的`WEB`服务器上的入口 ## 2.3 `Django`配置 `Django`的配置信息存储在`settings.py`文件中。 ```python # 当前项目的绝对路径 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 密钥 SECRET_KEY = 'd!9((sy&ge3!=u0zc$u_#ba@ok1=%2pg+xnws2=t+c@s_7-(6c' # 是否开启调试模式,建议:在开发环境开启调试模式,生产环境关闭 DEBUG = True # 已安装并启用的应用程序(Application)列表 INSTALLED_APPS = [ ] # 已安装的中间件(Middleware)列表 MIDDLEWARE = [] # 根 URL 调度器的完整路径 ROOT_URLCONF = `helloDjango.urls` # 模板的配置 TEMPLATES = [] # 数据库配置 DATABASES = [] # 语言代码 LANGUAGE_CODE = 'zh-Hans' # 时区 TIME_ZONE = 'Asia/Shanghai' ``` # 三、 `URL`调度器/`URL`路由 为了给一个应用程序设计`URL`,需要创建一个`Python`模块,通常被称为`URLConf( URL configuration,URL配置)`。其作用是包含 `URL` 模式到`Python`函数(称为视图函数)的映射关系。 > `URL`路由三部曲: > > 第一步:先在`urls.py`中定义路由,并且指定视图函数 > > 第二步:定义路由需要访问的`Python`函数(视图函数) > > 第三步:通过浏览器进行访问 > >![1689824109849.png][1] > > `HttpResponse`对象位于`django.http`模块内 ```python from django.http import HttpResponse ``` `urls.py`的代码如下: ```python from django.contrib import admin from django.urls import path from django.http import HttpResponse def hello(request): return HttpResponse('Hello呀') urlpatterns = [ path('admin/', admin.site.urls), path('hello/',hello), ] ``` 此时即可以通过`http://127.0.0.1:8000/hello`进行访问 ## 3.1 `path() `函数 `path() `函数的作用是返回一个元素,以便包含在`urlpatterns`中,该函数位于`django.urls`模块内,其语法结构是: ```python path(route,view,kwargs=None,name=None) ``` - `route` 参数是一个匹配`URL`规则的字符串,当`Django`在处理请求时,它会从`urlpatterns`的第一项开始,按顺序依次匹配列表中的项,直到找到为止。匹配的原则是:**匹配即停止** - `view`参数是一个视图函数的名称,视图函数用于处理用户的请求,并且返回响应。该视图函数必须将`HttpRequest`对象作为第一个参数,参数建议以`request`命名,其语法结构是: ```python def view_function_name(request[,argument[,...]]): ... ... ``` 说明: - `request`代表`HTTP`请求对象 - `argument`代表可选参数,表示的的是从`URL`中传递的参数 - `kwargs`代表向模板传递的参数,必须在字典(`dict`) - `name`代表为`url`命名,以便`Django`在任意地方可以唯一引用它 ## 3.2 路径转换器 `Django`中的路径转换器用于捕获`URL`模式中特定部分的值,并将其作为参数传递给视图函数。路径转换器包括以下几种: ![1689837257436.png][2] ![1689840343443.png][3] + 整数,匹配`0`及其他正整数,返回`int` ``,如: ```python # urls.py中的代码 def article(request,id): return HttpResponse('文章详情') urlpatterns = [ path('article/',article) ] ``` + 字符串,匹配除了`/`之外的任何非空字符串,直到遇到下一个斜线为止 ``,如: ```python def user(request,username): return HttpResponse(f"username is: {username}") urlpatterns = [ path('admin/', admin.site.urls), path('user/',user), ] ``` + 路径,匹配非空字符串,包括路径分隔符(`/`) ``,如: ```python def detail(request,path): return HttpResponse(f"path is: {path}") urlpatterns = [ path('admin/', admin.site.urls), path('detail/',detail), ] ``` + `uuid`,匹配`UUID`格式的字符串,其格式为`8-4-4-4-12` ``,如: ```python def uuid(request,id): return HttpResponse(f"uuid is: {id}") urlpatterns = [ path('admin/', admin.site.urls), path('book/',uuid) ] ``` + `slug`,匹配任何的`ASCII`字母,数字、短横线及下划线, `` ## 3.3 `URL`调度器/`URL`路由的工作流程 ![1689843073633.png][4] > 强烈建议:所有的视图函数存储在`views.py`文件内。 # 四、考一考 1.什么`Django`的路由系统? `Django`中的路由系统是一个将 `URL` 模式到`Python`函数(称为视图函数)的映射关系的机制。 2.路由系统中有哪些路径转换器? `` `` `` `` `` 3.路由系统中如何传递参数? 路由系统中通过路径转换器传递参数,需要强调的是:在视图函数中也必须存在同名的参数,以接收路径转换器传递来的参数。 ```python urlpatterns = [ path('user//name/',userinfo) ] ``` 对应的视图函数则需要书写成: ```python from django.http import HttpResponse def userinfo(request,id,name): ... ... ``` > 所有的视图函数必须将`HttpRequest`对象作为第一个参数传递; > > 所有的视图函数都必须返回`HttpResponse`(`HTTP响应`),该对象的构造函数结构是: > > ```python > > HttpResponse(content=b'',content_type=None,status=200) > > ``` [1]: https://www.63zi.com/usr/uploads/2024/11/2302012269.png [2]: https://www.63zi.com/usr/uploads/2024/11/4234999456.png [3]: https://www.63zi.com/usr/uploads/2024/11/555325283.png [4]: https://www.63zi.com/usr/uploads/2024/11/2275792018.png Loading... # 一、`Django`基础 ## 1.1 基础 `Django`是一个开源的、重量级的`WEB`开发框架。 `Django`的官网: https://www.djangoproject.com ## 1.2 安装与卸载 `Django` > `Django`目前最新的版本为`4.2`,教学环境使用`3.2` ### 1.2.1 在线安装 ```shell sudo pip3 install django==版本号 ``` 说明:上述命令中`版本号`可以省略,如果省略的话,则安装最新的版本。 ### 1.2.2 离线安装 ```shell tar -zxvf Django-3.2.20.tar.gz cd Django-3.2.20 sudo python3 setup.py install ``` ### 1.2.3 查看`Django`版本 ```shell python3 -m django --version ``` ### 1.2.4 卸载`Django` ```shell sudo pip3 uninstall django ``` # 二、创建项目 ## 2.1 创建项目 在`Django`中创建项目分为以下三步: 第一步:创建项目,其命令如下: ```shell django-admin startproject helloDjango ``` 其中: - `django-admin`是`Django`的命令行管理工具,用于对`Django`项目执行某些命令操作。 - `helloDjango`是项目的名称,只要为合法的名称即可。 第二步:启动项目,命令如下: ```shell # 切换到项目目录内 cd helloDjango #运行项目 python3 manage.py runserver ``` 第三步:访问项目 启动浏览器,然后在地址栏输入`http://127.0.0.1:8000` ## 2.2 `Django`项目的目录结构 创建`Django`项目后,其目录结构如下: ```shell helloDjango/ ├── db.sqlite3 ├── helloDjango │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py ``` 这些目录和文件的作用是: - 最外层的`helloDjango`目录是项目的根目录,也是项目的容器 - `manage.py`是一个管理`Django`项目的命令行工具,其基本用法是: ```shell python3 manage.py subcommand ``` `subcommand`包括: `runserver [addport]`,启动用于开发的轻量级的`WEB`服务器 > 常用的端口号: > > `http`协议 80 > > `MySQL`的端口号 3306 > > `FTP`协议 21 `startapp` ,在当前目录或指定目录中创建应用 - 内层的`helloDjango`目录包含项目文件,它是一个纯`Python`包。 - `helloDjango/settings.py`是`Django`项目的配置文件 - `helloDjango/urls.py`,`URL`调度器(也称为路由配置文件) - `helloDjango/wsgi.py`,运行在`WSGI`兼容的`WEB`服务器上的入口 ## 2.3 `Django`配置 `Django`的配置信息存储在`settings.py`文件中。 ```python # 当前项目的绝对路径 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 密钥 SECRET_KEY = 'd!9((sy&ge3!=u0zc$u_#ba@ok1=%2pg+xnws2=t+c@s_7-(6c' # 是否开启调试模式,建议:在开发环境开启调试模式,生产环境关闭 DEBUG = True # 已安装并启用的应用程序(Application)列表 INSTALLED_APPS = [ ] # 已安装的中间件(Middleware)列表 MIDDLEWARE = [] # 根 URL 调度器的完整路径 ROOT_URLCONF = `helloDjango.urls` # 模板的配置 TEMPLATES = [] # 数据库配置 DATABASES = [] # 语言代码 LANGUAGE_CODE = 'zh-Hans' # 时区 TIME_ZONE = 'Asia/Shanghai' ``` # 三、 `URL`调度器/`URL`路由 为了给一个应用程序设计`URL`,需要创建一个`Python`模块,通常被称为`URLConf( URL configuration,URL配置)`。其作用是包含 `URL` 模式到`Python`函数(称为视图函数)的映射关系。 > `URL`路由三部曲: > > 第一步:先在`urls.py`中定义路由,并且指定视图函数 > > 第二步:定义路由需要访问的`Python`函数(视图函数) > > 第三步:通过浏览器进行访问 > >![1689824109849.png][1] > > `HttpResponse`对象位于`django.http`模块内 ```python from django.http import HttpResponse ``` `urls.py`的代码如下: ```python from django.contrib import admin from django.urls import path from django.http import HttpResponse def hello(request): return HttpResponse('<h1>Hello呀</h1>') urlpatterns = [ path('admin/', admin.site.urls), path('hello/',hello), ] ``` 此时即可以通过`http://127.0.0.1:8000/hello`进行访问 ## 3.1 `path() `函数 `path() `函数的作用是返回一个元素,以便包含在`urlpatterns`中,该函数位于`django.urls`模块内,其语法结构是: ```python path(route,view,kwargs=None,name=None) ``` - `route` 参数是一个匹配`URL`规则的字符串,当`Django`在处理请求时,它会从`urlpatterns`的第一项开始,按顺序依次匹配列表中的项,直到找到为止。匹配的原则是:**匹配即停止** - `view`参数是一个视图函数的名称,视图函数用于处理用户的请求,并且返回响应。该视图函数必须将`HttpRequest`对象作为第一个参数,参数建议以`request`命名,其语法结构是: ```python def view_function_name(request[,argument[,...]]): ... ... ``` 说明: - `request`代表`HTTP`请求对象 - `argument`代表可选参数,表示的的是从`URL`中传递的参数 - `kwargs`代表向模板传递的参数,必须在字典(`dict`) - `name`代表为`url`命名,以便`Django`在任意地方可以唯一引用它 ## 3.2 路径转换器 `Django`中的路径转换器用于捕获`URL`模式中特定部分的值,并将其作为参数传递给视图函数。路径转换器包括以下几种: ![1689837257436.png][2] ![1689840343443.png][3] + 整数,匹配`0`及其他正整数,返回`int` `<int:parameter_name>`,如: ```python # urls.py中的代码 def article(request,id): return HttpResponse('文章详情') urlpatterns = [ path('article/<int:id>',article) ] ``` + 字符串,匹配除了`/`之外的任何非空字符串,直到遇到下一个斜线为止 `<str:parameter_name>`,如: ```python def user(request,username): return HttpResponse(f"username is: {username}") urlpatterns = [ path('admin/', admin.site.urls), path('user/<str:username>',user), ] ``` + 路径,匹配非空字符串,包括路径分隔符(`/`) `<path:parameter_name>`,如: ```python def detail(request,path): return HttpResponse(f"path is: {path}") urlpatterns = [ path('admin/', admin.site.urls), path('detail/<path:path>',detail), ] ``` + `uuid`,匹配`UUID`格式的字符串,其格式为`8-4-4-4-12` `<uuid:parameter_name>`,如: ```python def uuid(request,id): return HttpResponse(f"uuid is: {id}") urlpatterns = [ path('admin/', admin.site.urls), path('book/<uuid:id>',uuid) ] ``` + `slug`,匹配任何的`ASCII`字母,数字、短横线及下划线, `<slug:parameter_name>` ## 3.3 `URL`调度器/`URL`路由的工作流程 ![1689843073633.png][4] > 强烈建议:所有的视图函数存储在`views.py`文件内。 # 四、考一考 1.什么`Django`的路由系统? `Django`中的路由系统是一个将 `URL` 模式到`Python`函数(称为视图函数)的映射关系的机制。 2.路由系统中有哪些路径转换器? `<int:pararameter_name>` `<str:paramenter_name>` `<uuid:parameter_name>` `<path:parameter_name>` `<slug:parameter_name>` 3.路由系统中如何传递参数? 路由系统中通过路径转换器传递参数,需要强调的是:在视图函数中也必须存在同名的参数,以接收路径转换器传递来的参数。 ```python urlpatterns = [ path('user/<int:id>/name/<str:name>',userinfo) ] ``` 对应的视图函数则需要书写成: ```python from django.http import HttpResponse def userinfo(request,id,name): ... ... ``` > 所有的视图函数必须将`HttpRequest`对象作为第一个参数传递; > > 所有的视图函数都必须返回`HttpResponse`(`HTTP响应`),该对象的构造函数结构是: > > ```python > > HttpResponse(content=b'',content_type=None,status=200) > > ``` [1]: https://www.63zi.com/usr/uploads/2024/11/2302012269.png [2]: https://www.63zi.com/usr/uploads/2024/11/4234999456.png [3]: https://www.63zi.com/usr/uploads/2024/11/555325283.png [4]: https://www.63zi.com/usr/uploads/2024/11/2275792018.png 最后修改:2024 年 11 月 09 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏