Django 创建第一个项目

一、创建项目

1
$ django-admin startproject mysite       ## 创建项目名为 mysite 的文件夹

二、启动服务(测试开发阶段)

1
2
3
$ cd mysite

$ python manage.py runserver ## 启动 django 服务【注:该启动方式,Django 在前台启动服务,默认监听 8000 端口】

浏览器访问 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.pyWeb 服务网关的配置文件;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 的默认端口为 80
  • path(路由地址):由零或多个“/”符号隔开的字符串,一般用来表示主机上一个目录或者文件地址。路由地址决定了服务器端如何处理这个请求
  • 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);匹配提取参数后用关键字传参方式传递给视图函数