Django 创建第一个项目
一、创建项目
1 | $ django-admin startproject mysite ## 创建项目名为 mysite 的文件夹 |
二、启动服务(测试开发阶段)
1 | $ cd mysite |
浏览器访问 http://127.0.0.1:8000 可看到 Django
的启动页面 【注: 如果想要更换端口,可以使用
python3 manage.py runserver 端口号
】
三、关闭服务
- 方式 1 : 在
runserver
启动终端下,执行Ctrl + c
可关闭Django
服务 - 方式 2:执行
$ sudo lsof -i:8000
可查询出Django
的进程id
;接着执行kill -9
对应的Django
进程id
四、结构解析
manage.py
: 包含项目管理的子命令;执行 $ python3 manage.py 可列出所有的 Django 子命令- 项目同名文件夹:
mysite/mysite
mysite/__init__
:Python
包的初始化文件mysite/wsgi.py
:Web
服务网关的配置文件;Django
正式启动时,【项目正式上线需要用到的文件】mysite/usls.py
:项目的主路由配置;HTTP
请求进入Django
时,优先调用该文件mysite/settings.py
:项目的配置文件;包含项目启动时需要的配置【Django
主要的配置文件】
五、settings.py -- 项目结构解析
- `settings.py 包含了 Django 项目启动的所有配置项;配置项分为 公有配置 和 自定义配置
- 配置项格式例:
BASE_DIR = 'XXX'
;【这里的名字必须大写】 DEBUG = 'XXX'
:设置启动模式;True
- 调试模式【在开发过程中调试代码,检测代码改动后立刻重启服务,生成报错页面】;False
- 正式启动模式/上线模式ALLOWED_HOSTS = ['127.0.0.1']
## 请求头Host
头;上线后的站点/域名【如果要在局域网其他主机也能访问此主机的Django
服务,启动方式:$ python3 manage.py runserver 0.0.0.0:5000
## 指定网络设备如果内网环境下其他主机想正常访问该站点,需要加ALLOWED_HOSTS=['内网ip']
;Ubuntu
下查看内网地址命令$ ifconfig
## inet 内网ip;Win10 系统查询 IP 命令:ipconfig
】ROOT_URLCONF
: 路由;用于配置主 url 配置'mysite.urls'
LANGUAGE_CODE = 'zh-Hans'
## 切换语言为中文;英文为'en-us'
TIME_ZONE = 'UTC'
## 世界标准时间,设置时区;中国时间【中8】应设置为'Asia/Shanghai'
;中国时间比标准时间快 8 小时INSTALLED_APPS:
指定当前项目中安装的应用列表MIDDLEWARE:
用于注册中间件TEMPLATES:
用于指定模板的配置信息DATABASES:
用于指定数据库的配置信息settings.py
中的所有配置项,都可以按需的在代码中引入;引入方式:from django.conf import settings
- 自定义配置需要保证不与系统配置冲突,否则会出现覆盖现象
六、URL 和 视图函数
1、URL - 结构
- 定义:即统一资源定位符
Uniform Resource Locator
- 作用:用来表示互联网上某个资源的地址
- URL
的一半语法格式为:
protocol://hostname[:port]/path[?query][#fragment]
## [] 代表其中的内容可以省略 protocol
(协议):http
;https
;file
hostname
(主机名):是指存放资源的服务器的域名系统 (DNS
) 主机名、域名或IP
地址port
(端口号):整数,以“:”开始,可选,省略时使用方案的默认端口,各种传输协议都有默认的端口号;http
的默认端口为 80path
(路由地址):由零或多个“/”符号隔开的字符串,一般用来表示主机上一个目录或者文件地址。路由地址决定了服务器端如何处理这个请求query
(查询):可选,用于给动态网页传递参数,以“?
”开始,可有多个参数,用 “&
”符号隔开,每个参数的名和值用 "=
" 符号隔开fragment
(信息片段):字符串,用于指定网络资源中的片段,以“#
”开始,例如一个网页中有多个名词解释,可使用fragment
直接定位到某一名词解释 -- 【定位锚点】
2、Django 处理 URL 请求
Django
从配置文件中根据ROOT_URLCONF
找到主路由文件;默认情况下,该文件在项目同名目录下的urls
;例如:mysite/mysite/urls.py
Django
加载主路由文件中的urlpatterns
变量【包含很多的数组】- 依次匹配
urlpatterns
中的path
,匹配到第一个合适的终端后续匹配 - 匹配成功: 调用对应的视图函数处理请求,返回响应
- 匹配失败: 返回
404
响应
3、视图函数 -- views.py
- 视图函数:是用于接收一个了浏览器请求(
HttpRsquest 对象)并通过
HttpResponse` 对象返回响应的函数,此函数可以接受浏览器请求并根据业务逻辑返回相应的响应内容给浏览器 - 视图函数语法:
def xxx_view(reques[,…,…,其他参数])
:\n return HttpResponse()
对象
七、路由配置
Settings.py 中的
'Root_URLCONF'指定了主路由配置列表
urlpatterns` 的文件位置- 路由中的
path
是从上到下进行匹配的,
1、path() 函数:
导入:
from django.urls import path
语法:
path(route, views, name=None)
注释:
route
-字符串类型,匹配的请求路径;views
-指定路径所对应的视图处理函数的名称;name
-为地址起别名,在模板中地址反向解析时使用
2、path 转换器
Path
转换器:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递到视图函数;语法:<转换器类型: 自定义名>;例:path('page/<int:page>'
,views.xxx
)- 转换器类型:
str
【匹配除了'/'之外的非空字符串】 /int
【匹配 0 或任何正整数,返回一个 int】 /slug
【匹配任意由ASCII
字母或数字以及连字符和下划线组成的短标签】 /path
【匹配非空字段,包括路径分割符'/'】
3、re_path() 函数
- 在
url
的匹配过程中可以使用正则表达式进行精确匹配 - 语法:
re_path(reg, view, name=xxx)
;正则表达式为命名分组模式(?P<name>pattern
);匹配提取参数后用关键字传参方式传递给视图函数