Django
1.Django 介绍
1.1 组件
Django
包含的组件如下:
- 基本配置文件/路由系统
- 模型层(M)/模板层(T)/视图层(V)
Cookies
和Session
- 分页及分发邮件
Admin
管理后台
1.2 用途
Django
能够实现所有 HTTP
请求处理。
- 网站/微信公众号/小程序后端开发
- 人工智能平台融合
1.3 版本
Django
官网:The web framework for perfectionists with deadlines | Django (djangoproject.com)Django
中文文档参考网站:一译 (yiyibooks.cn)- 版本:
- 教程版本:2.2.12
1.4 安装
1.4.1 在线安装
pip install django==2.2.12
1.4.2 离线安装
# 将安装包下载到本地
# 解压缩并进入到解压缩后的目录
# 执行如下命令进行安装
python setup.py install
# 执行如下命令检查是否安装成功
pip freeze | grep -i 'Django'
2.Django 的项目结构
2.1 创建项目
-
成功安装
Django
后,虚拟机终端会有django-admin
命令 -
执行
django-admin startproject [项目名]
即可创建出对应项目的文件夹# 创建 mysite1 项目 django-admin startproject mysite1
2.2 启动服务
- 启动[测试开发阶段]
-
终端 cd 进入到项目文件夹
-
进入到项目文件夹后,执行
python manage.py runserver [端口]
启动django
服务,端口不指定即为8000
。 -
浏览器访问
http://127.0.0.1:8000
可看到django
的启动页面。
-
2.3 关闭服务
-
关闭服务[测试开发阶段]
-
方式一[在runserver启动终端下]:
执行
ctrl + c
可退出Django
服务。 -
方式二[在其他终端下]:
执行
sudo lsof -i:8000
查询出Django
的进程id
。执行
kill -9
Django
进程的id
。
-
2.4 项目结构解析
mysite
├── db.sqlite3 [Django默认的数据库,sqlite]
├── manage.py
└── mysite
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-310.pyc
│ ├── settings.cpython-310.pyc
│ ├── urls.cpython-310.pyc
│ └── wsgi.cpython-310.pyc
├── settings.py
├── urls.py
└── wsgi.py
manage.py
包含项目管理的子命令,如:
# 启动服务
python manage.py runserver
# 创建应用
python manage.py startapp
# 生成迁移文件
python manage.py makemigrations
# 数据迁移
python manage.py migrate
...
# 直接执行 python manage.py 会列出所有Django的子命令
项目同名文件夹 - mysite/mysite
__init__
:Python
包的初始化文件。wsgi.py
:web
服务网关配置文件,Django
正式启动时,需要用到。urls.py
: 项目的主路由配置,Http
请求进入Django
时,优先调用该文件。settings.py
: 项目的配置文件,包含项目启动时需要的配置。
项目配置文件 - settings.py
-
settings.py 包含了 Django 项目启动时所有的配置项。
-
配置项分为公有配置和自定义配置。
-
配置项格式:BASE_DIR = ‘xxxx’。
-
公有配置,Django官方提供的基础配置,可到如下网站查询。
https://docs.djangoproject.com/en/2.2/ref/settings/
ALLOWED_HOSTS
设置允许访问到本项目的
host
头值。-
示例:如果要在局域网其他主机也能访问此主机的Django服务,启动方式如下:
(1) python3 manage.py runserver 0.0.0.0:5000
(2) 指定网络设备如果内网环境下其他主机想正常访问该站点,需要添加 ALLOWED_HOSTS = [‘内网IP’]
在 windows 主机访问虚拟机启动的 Django 项目,显示主机ip应该添加到 ALLOWED_HOSTS,在 settings.py 添加后,再次访问,页面能够被正常文件。
LANGUAGE_CODE
设置项目的页面展示语言,简体中文设置为:
zh-Hans
。TIME_ZONE
用于指定当前服务端时区,默认为格林威治时间(UTC),中国地区设置为
Asia/Shanghai
。BASE_DIR
用于绑定当前项目的绝对路径(动态计算出来的),所有文件夹都可以依赖此路径。
DEBUG
用于配置
Django
项目的启动模式,取值:True,表示开发环境中使用;False,表示当前项目运行在生产环境中。INSTALLED_APPS
指定当前项目中安装的应用列表。
MIDDLEWARE
用于注册中间件。
TEMPLATES
用于指定模板的配置信息。
DATABASES
用于指定数据库的配置信息。
ROOT_URLCONF
用于配置主
url
配置,ROOT_URLCONF = 'mysite.urls'
。 -
3.URL 和 视图函数
3.1 URL
定义:即统一资源定位符 Uniform Resource Locator
作用:用来表示互联网上某个资源的地址
URL的一般语法为:
# portocol:协议(http、https、file)
# hostname:主机名
# port:端口
# path:路由地址
# query:查询的参数,可有多个参数,用 & 隔开,每个参数的名和值用 = 隔开。
# fragment:信息片段,字符串,用于指定网络资源中的片段。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。
protocol://hostname[:port]/path[?query][#fragment]
例如:
# 直接定位到页面指定信息片段的位置
https://docs.djangoproject.com/en/4.2/#how-the-documentation-is-organized
3.2 处理 URL 请求
以URL(http://127.0.0.1:8000/page/2003)为例。
Django
从配置文件中根据ROOT_URLCONF
找到主路由文件;默认情况下,该文件为项目同名目录下的urls.py
。Django
加载主路由文件中的urlpatterns
变量[包含很多路由的数组]。- 依次匹配
urlpatterns
中的path
,匹配到第一个合适的中断后续匹配。 - 匹配成功-调用对应的视图函数处理请求,返回响应。
- 匹配失败-返回
404
响应。
主路由 - urls.py
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('page/2023', views.page_2023),
path('page/2024', views.page_2024)
]
3.3 视图函数
定义:视图函数是用于接收一个浏览器请求(HttpRequest对象)并通过HttpResponse对象返回响应的函数,此函数可以接收浏览器请求并根据业务逻辑返回响应的响应内容给浏览器。
语法:
def xxx_view(request[,其他参数]):
return HttpResponse 对象
样例:
from django.http import HttpResponse
def page_2023(request):
html = "<h1>这是第一个页面</h1>"
return HttpResponse(html)
4.路由配置
settings.py
中的 ROOT_URLCONF
指定了主路由配置列表 urlpatterns
的文件位置。
urlpatterns = [
path('admin/', admin.site.urls),
path('page/2023/', views.page_2023),
path('page/2024/', views.page_2024),
... # 配置URL和视图函数
]
4.1 path 函数
path函数定义
# 导入
from django.urls import path
# 语法
path(route,views,[name=])
# 参数
route:字符串类型,匹配请求路径
views:指定路径所对应视图函数的名称
name:为路由地址起别名,在模板中地址反向解析时使用
4.2 path 转换器
# 语法
<转换器类型:自定义名>
# 作用
如果转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数
# 例如
path('page/\<int:page>',views.xxx)
转换器列表
转换器类型 | 作用 | 样例 |
---|---|---|
str | 匹配除了’/‘之外的非空字符串 | v1/users/<str:username> 匹配 /v1/users/guoxiaonao |
int | 匹配0或者任意正整数,返回一个int | page/<int:page> 匹配 /page/100 |
slug | 匹配任意由 ASCII字母或数字以及连字符和下划线组成的短标签 | detail/<slug:sl> 匹配 /detail/this-is-django |
path | 匹配非空字段,包括路径分隔符’/’ | v1/users/<path:ph> 匹配 /v1/goods/a/b/c |