《Django 入门与实践》

沥川 bio photo By 沥川

Django 入门与实践

课程介绍

课程目标

  • 学习并掌握 Django 的基本用法
  • 了解 Django 的部分原理以及各组件的含义
  • 可以独立使用 Django 进行基本的网站开发

课程内容

  • 了解 Django
  • 搭建开发环境
  • 完成一个简单的个人博客网站

课程知识要求

  • 掌握 Python 语言
  • 了解 HTML 语言
  • 了解浏览器上网的基本原理

课前准备

Django 简介

  • Django 是一个基于 Python 的高级 Web 开发框架
  • 它能够让开发人员进行高效且快速的开发
  • 高度集成(不用自己造轮子),免费并且开源

创建项目目录下部分文件的作用

创建步骤

  • 打开命令行,进入想要安置项目的目录
  • 命令行输入:django-admin startproject myblog
  • 若没有报错,则创建项目成功

项目目录结构

  • manage.py
  • myblog
    • init.py
    • settings.py
    • urls.py
    • wsgi.py

manage.py

  • 与项目进行交互的命令行工具集的入口
  • 项目管理器
  • 执行 python manage.py 来查看所有命令

myblog目录

  • 项目的一个容器
  • 包含项目最基本的一些配置
  • 目录名称不建议修改

wsgi.py

  • WSGI (Python Web Server Gateway Interface)
  • 中文名:Python 服务器网关借口
  • Python 应用与 Web 服务器之间的接口

urls.py

  • url 配置文件
  • Django 项目中所有地址(页面)都需要我们自己去配置其URL

settings.py

  • 项目的总配置文件
  • 里面包含了数据库、Web 应用、时间等各种配置

init.py

  • Python 中声明模块的文件
  • 内容默认为空

创建应用

创建步骤

  • 打开命令行,进入项目中 manage.py 同级目录
  • 命令行输入:python manage.py startapp blog
  • 添加应用名到 settings.py 中的 INSTALLED_APPS 里

目录结构

  • migrations
    • init.py
  • init.py
  • admin.py
  • apps.py
  • models.py
  • tests.py
  • views.py

migrations

  • 数据移植(迁移)模块
  • 全部自动生成

admin.py

  • 该应用的后台管理系统配置

app.py

  • 该应用的一些配置

models.py

  • 数据模块
  • 使用 ORM 框架
  • 类似于 MVC 结构中的 Models(模型)

test.py

  • 自动化测试模块
  • Django 提供了自动化测试功能
  • 在这里编写测试脚本(语句)

views.py

  • 执行响应的代码所在模块
  • 代码逻辑处理的主要地点
  • 项目中大部分代码均在这里编写

创建第一个页面(响应)

  • 编辑 blog.views
    • 每个响应对应一个函数,函数必须返回一个响应
    • 函数必须存在一个参数,一般约定为request
    • 每一个响应(函数)对应一个 URL
  • 编辑 urls.py
    • 每个 URL 都以 url 的形式写出来
    • url 函数放在 urlpatterns 列表中
    • url 函数三个参数:URL(正则),对应方法,名称

第一个 Templates

第二种 URL 配置

  • 包含其他 URL
    • 在根 urls.py 中引入 include
    • 在 APP 目录下创建 urls.py 文件,格式与根 urls.py 相同
    • 根 urls.py 中 url 函数第二个参数改为 include(‘blog.urls’)
  • 注意事项
    • 根 urls.py 针对 APP 配置的 URL 名称,是该 APP 所有 URL 的总路径
    • 配置 URL 时注意正则表达式结尾符号 $ 和 /

Templates 介绍

  • 什么是 Templates
    • HTML 文件
    • 使用了 Django 模板语言(Django Template Language, DTL)
    • 可以使用第三方模板(如Jinja2)

开发第一个 Template

  • 步骤
    • 在 APP 的根目录下创建名叫 Templates 的目录
    • 在该目录下创建 HTML 文件
    • 在 views.py 中返回 render()
  • DTL 初步使用
    • render() 函数中支持一个 dict 类型参数
    • 该字典是后台传递到模板的参数,键为参数名
    • 在模板中使用 来直接使用
  • Django 查找 Template
    • Django 按照 INSTALLED_APPS 中添加顺序查找 Templates
    • 不同 APP 下 Templates 目录中的同名.html 文件会造成冲突 (重点问题)
  • 解决 Templates 冲突方案
    • 在 APP 的 Templates 目录下创建以 APP 名为名称的目录
    • 将 html 文件放入新创建的目录下
    • 注意修改 views.py 文件中的 render 参数

Models

Modesl 介绍

  • Django 中的 Models 是什么?
    • 通常,一个 Models 对应数据库的一张数据表
    • Django 中 Models 以类的形式表现
    • 它包含了一些基本字段以及数据的一些行为
  • ORM
    • 对象关系映射(Object Relation Mapping)
    • 实现了对象和数据之间的映射
    • 影藏了数据访问的细节,不需要编写 SQL 语句

编写 Models

  • 步骤
    • 在应用根目录下创建 models.py,并引入 models 模块
    • 创建类,继承 models.Model,该类即是一张数据表
    • 在类中创建字段
  • 字段创建
    • 字段即类里面的属性(变量)
    • attr = models.CharField(max_lenth=64)
    • 查看官方网站文档,字段的可选参数

生成数据表

  • 步骤
    • 命令行进入 manage.py 同级目录
    • 执行 python3 manage.py makemigrations app名(可选)
    • 再执行 python3 manage.py migrate
  • 查看
    • Django 会自动在 app/migrations/ 目录下生成移植文件
    • 执行 python3 manage.py sqlmigrate 应用名 文件id 查看 SQL 语句
    • 默认 sqlite3 的数据库在项目根目录下 db.sqlite3
  • 查看并编辑 db.sqlite3
    • 使用第三方软件
    • SQlite Expert Personal
    • 轻量级,完全免费

页面呈现数据

  • 后台步骤
    • views.py 中 import models
    • article = models.Article.objects.get(pk=1) # 这里的 pk 指的是「主键」
    • render(request,page,{‘article’:article})
  • 前端步骤
    • 模板可直接使用对象以及对象的”.”操作

Admin

Admin 简介

  • 什么是 Admin ?
    • Admin 是 Django 自带的一个功能强大的自动化数据管理界面
    • 被授权的用户可直接在 Admin 中管理数据库
    • Django 提供了许多针对 Admin 的定制功能

配置 Admin

  • 创建用户
    • python3 manage.py createsuperuser 创建超级用户
    • localhost:8000/admin/ Admin 入口
    • 修改 settings.py 中 LANGUAGE_CODE = ‘zh_Hans’
  • 配置应用
    • 在应用下 admin.py 中引入自身的 models 模块(或里面的模型类)
    • 编辑 admin.py : admin.site.register(models.Article)
  • 修改数据
    • 点击 Article 超链接进入 Article 列表页面
    • 点击任意一条数据,进入编辑页面修改
    • 编辑页面下方一排按钮可执行相应操作

修改数据默认显示名称

  • 步骤
    • 在 Article 类下添加一个方法
    • 根据 Python 版本 .3 选择__str__(self) 或 .2 选择 unicode(self)
    • return self.title

完善博客

博客页面设计

  • 页面概要
    • 博客主页面
    • 博客文章内容页面
    • 博客撰写页面
  • 主页面内容
    • 文章标题列表,超链接
    • 发表博客按钮(超链接)
  • 列表编写思路
    • 取出数据库中所有文章对象
    • 将文章对象们打包成列表,传递到前端
    • 前端页面把文章以标题超链接的形式逐个列出
  • 模板 for 循环
    • { for xx in xxs }
    • HTML 语句
    • { endfor }

博客文章页面

  • 页面内容
    • 标题
    • 文章内容
    • 修改文章按钮(超链接)
  • URL 的参数传递
    • 参数写在响应函数中 request 后,可以有默认值
    • URL 正则表达式:r’^article/(?P[0-9]+)/$
    • URL 正则中的组名必须和参数名一致

Django 中的超链接

  • 超链接目标地址
    • href 后面是目标地址
    • template 中可以用 “{ url ‘app_name:url_name’ param }”
    • 其中 app_name 和 url_name 都在 url 中配置

再配 URL

  • url 函数的名称参数
    • 根 urls,卸载 include() 的第二个参数位置, namespace=’blog’
    • 应用下则写在 url() 的第三个参数位置,name=’artcle’
    • 主要取决于是否使用 include 引用了另一个 url 配置文件

博客撰写页面

  • 页面内容
    • 标题编辑栏
    • 文章内容编辑区域
    • 提交按钮
  • 编辑响应函数
    • 使用 request.POST[‘参数名’]获取表单数据
    • models.Article.objects.create(title, content)创建对象

两个编辑页面

  • 思路
    • 新文章为空,修改文章有内容
    • 修改文章页面有文章对象
    • 文章的 ID
  • 修改数据
    • article.title = title
    • article.save()

补充内容

Templates 过滤器

  • 什么是过滤器?
    • 卸载模板中,属于 Django 模板语言
    • 可以修改模板中的变量,从而显示不同的内容
  • 怎么使用过滤器?
    • 例子:
    • 过滤器可叠加:
  • 更多 Django 过滤器内容看官网

Django Shell

  • 什么是 Django Shell?
    • 它是一个 Python 的交互式命令行程序
    • 它自动引入了我们的项目环境
    • 我们可以使用它与我们的项目进行交互
  • 如何使用 Django Shell?
    • python manage.py shell
    • from blog.models import Article
    • Article.objects.all()
  • 有什么用?
    • 我们可以使用 Django shell 来进行一些调试工作
    • 测试未知的方法

Admin

  • 创建 admin 配置类
    • class ArticleAdmin(admin.ModelAdmin)
    • 注册:admin.site.register(Article, ArticleAdmin)
  • 显示其他字段
    • list_display = (‘title’, ‘content’)
    • list_display 同时支持 tuple 和 list
  • 过滤器
    • list_filter = (‘pub_time’, )
  • 更多信息参考官方文档

课程回顾

  • 课程介绍
    • 学习目标及内容
    • 课程基础知识要求
  • 课前准备
    • 介绍 Django
    • 课程基础知识要求
    • 介绍 Django
    • 通过浏览器浏览网页的基本原理
  • 开发环境搭建
  • 创建项目及应用
    • 创建项目
    • 创建应用
    • 创建(响应)页面
  • 第一个 Template
    • 重新配置 URL
    • 介绍 Templates
    • 开发第一个 Template
  • Models
    • 介绍 Models
    • 编写博客的 Model
    • 将数据呈现在页面上
  • Admin
    • 创建超级用户
    • 配置 Admin
    • 使用 Admin 修改数据库
  • 完善博客
    • 博客主页面
    • 博客内容页面
    • 博客编写页面
  • 补充内容
    • Templates 过滤器
    • Django shell
    • Admin 增强