一, Django 基础
掌握 Django 的 MVT 架构的使用
掌握 Git 管理源代码
主要内容
了解 Django 的 MVT 架构的使用流程
使用 Django 完成案例 : 书籍信息管理
MVC 介绍
MVC: 全拼为 Model-View-Controller.
Model: 简称为 M, 主要封装对数据库层的访问, 内嵌 ORM 框架, 实现面向对象编程来操作数据库.
View: 简称 V, 用于封装结果, 内嵌了模板引擎, 实现动态展示数据.
Controller: 简称 C, 用于接收 GET 或 POST 请求, 处理业务逻辑, 与 Model 和 View 交互, 返回结果.
备注: 当前主流的开发语言如 Java,PHP,Python.... 中都有 MVC 设计模式.
MTV 介绍
MTV: 全拼为 Model-View-Template
Model: 简称 M, 与 MVC 中的 M 功能相同, 负责与数据库交互, 处理数据, 内嵌了 ORM 框架.
View: 简称 V, 与 MVC 中的 C 功能相同, 接收 HttpRequest, 业务处理逻辑, 返回 HttpResponse.
Template: 简称 T, 与 MVC 中的 V 功能相同, 负责封装构造返回的 html, 内嵌了模板引擎.
备注: MTV 和 MVC 的差异在于 MTV 中的 View 是处理业务逻辑的, 然而 MVC 中的 V 是处理内置模板引擎的. MTV 中的 T 处理的是网页 HTML 模板的. MVC 中的 C 才是处理业务逻辑的.
总结: 出来 Django 重点就是研究 Model-View-Template 三个模块间如何协同工作以及各自模块的代码的编写.
设计模式 (MVC): 是一套反复使用, 多数人知晓, 分类代码设计经验的总结.
目的: 为了代码可重复用, 让代码更容易被别人理解, 保障代码可靠性.
设计模式使代码工程化
设计模式是软件工程的基石脉络.
模型:
1, 当前的项目开发, 都是以数据驱动视图的.
2, 书籍信息管理的数据关系: 书籍和人物是: 一对多关系
3, 要先分析出项目中所需要的数据, 然后设计数据库表.
1, 创建 Django 项目 (进入到 pycharm 目录下):
django-admin startproject DjangoName(项目名称)
2, 命令行进入 DjangoName 项目名称下创建应用:
python manage.py startapp web(应用名称)
使用 Django 进行数据库开发的提示:
1,MTV 设计模式的 Model, 专门负责和数据库交互, 对应 (models.py)
2, 由于 Model 中内嵌了 ORM 框架, 所以不需要直接面向数据库编程.
3, 定义模型类, 通过模型类和对象完成数据库表的增删改查
4,ORM 框架就是把数据库表的行与对应的对象建立关联, 互相转换, 使得数据库的操作面向对象.
使用 Django 进行数据库的开发步骤:
1, 定义模型类
1) 根据书籍结构设计模型类
模型类: Book
书籍名称字段: name
2) 根据人物表结构设计模型类
模型类: Author
人物姓名字段: name
人物性别字段: gender
外键约束: book_id
外键要指定所属的模型类 book = models.ForeignKey(Book)
说明: 书籍与人物的关系: 一对多, 一本书可以有多个作者
不需要定义主键字段, 在生成表会自动添加, 并且值为自动增长.
根据数据库表的设计:
在 models.py 中定义模型类, 继承来自 models.Model
- from django.db import models
- # Create your models here.
- # 创建人物列表信息的模型类
- class Author(models.Model):
- # 添加名字, 性别
- name = models.CharField(max_length=10)
- gender = models.BooleanField()
- # 开始创建书籍列表信息的模型类 继承 models.Model
- class Book(models.Model):
- # 创建字段, 字段类型, 以及字段长度设置
- name = models.CharField(max_length=10)
- # 添加外键约束, 这个本书属于哪个作者写的
- auth_id = models.ForeignKey(Author,on_delete=models.CASCADE)
- # 模型类准备好后, 创建和执行迁移 == 建表
2, 模型迁移
1, 迁移由两步完成:
1) 生成迁移文件: 根据模型类生成创建表的语句
python manage.py makemigrations
2) 执行迁移: 根据第一步生成的语句在数据库中创建表
python manage.py migrate
- """
- Django settings for BOOK project.
- Generated by 'django-admin startproject' using Django 2.0.2.
- For more information on this file, see
- https://docs.djangoproject.com/en/2.0/topics/settings/
- For the full list of settings and their values, see
- https://docs.djangoproject.com/en/2.0/ref/settings/
- """
- import os
- # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
- BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
- # Quick-start development settings - unsuitable for production
- # See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/
- # SECURITY WARNING: keep the secret key used in production secret!
- SECRET_KEY = 'kxme+2djdv7fv!uss90xo@^g9^6fc)7%y^ck)v7dx(53kno=b5'
- # SECURITY WARNING: don't run with debug turned on in production!
- DEBUG = True
- ALLOWED_HOSTS = []
- # Application definition
- INSTALLED_APPS = [
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- 'web'
- ]
- MIDDLEWARE = [
- 'django.middleware.security.SecurityMiddleware',
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.middleware.common.CommonMiddleware',
- 'django.middleware.csrf.CsrfViewMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.messages.middleware.MessageMiddleware',
- 'django.middleware.clickjacking.XFrameOptionsMiddleware',
- ]
- ROOT_URLCONF = 'BOOK.urls'
- TEMPLATES = [
- {
- 'BACKEND': 'django.template.backends.django.DjangoTemplates',
- 'DIRS': [],
- 'APP_DIRS': True,
- 'OPTIONS': {
- 'context_processors': [
- 'django.template.context_processors.debug',
- 'django.template.context_processors.request',
- 'django.contrib.auth.context_processors.auth',
- 'django.contrib.messages.context_processors.messages',
- ],
- },
- },
- ]
- WSGI_APPLICATION = 'BOOK.wsgi.application'
- # Database
- # https://docs.djangoproject.com/en/2.0/ref/settings/#databases
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.sqlite3',
- 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
- }
- }
- # Password validation
- # https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators
- AUTH_PASSWORD_VALIDATORS = [
- {
- 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
- },
- {
- 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
- },
- {
- 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
- },
- {
- 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
- },
- ]
- # Internationalization
- # https://docs.djangoproject.com/en/2.0/topics/i18n/
- LANGUAGE_CODE = 'en-us'
- TIME_ZONE = 'UTC'
- USE_I18N = True
- USE_L10N = True
- USE_TZ = True
- # Static files (CSS, JavaScript, Images)
- # https://docs.djangoproject.com/en/2.0/howto/static-files/
- STATIC_URL = '/static/'
settings.py 配置
会出现报错, 需要去配置检查是否添加 App 应用名字在 INSTALLED_APPS 中
报错信息如下:
- (venv) D:\PycharmProjects\practice\BOOK>python manage.py makemigrations Web
- App 'web' could not be found. Is it in INSTALLED_APPS?
注意截图中的 sqlite3 数据库来储存数据
3, 操作数据库
通过模型类和对象完成数据库表的增删改查
进入项目的 shell, 进行简单的增删改查 API 操作
输入 quit() 可以退出 shell
python manage.py shell
测试增删改查 API 操作 (在 shell 中)
- # 引入应用中的模型类
- from Web.models import *
- # 创建人物模型对象
- author = Author()
- author.name = 'sunwukong'
- author.gender = True
- # 外键查询 : 查询书的作者人物信息 (author_set 是隐式生成的)
- author.book_set.all()
- author .save()
- # 创建书籍模型对象
- book = Book()
- # 新增记录
- book.name = '与时间做朋友'
- # 保存记录
- book.save()
- # 查询记录
- Book.objects.all()# 返回的是一个 Queryset 对象
- # 删除记录 : 再查询时, 表里数据为空
- book.delete()
- author.delete()
- # 退出 shell
- quit()
站点管理
站点: 分为内容发布和公共访问两个部分
内容发布的部分由网站的管理员负责查看, 添加, 修改, 删除数据
Django 能够根据定义的模型类自动地生成管理模块
使用 Django 的管理模块, 需要按照以下步骤造作:
1, 管理界面本地化
1) 本地化就是将显示的语言, 时间等使用本地的习惯 (中国化)
2) 我们使用的是简体中文, 时区使用亚洲 / 上海时区, 注意这里不能使用北京时区
本地化前:
本地化后:
2, 创建管理员
创建管理员命令:
python manage.py createsuperuser
按照提示输入用户名, 邮箱, 密码
启动服务:
python manage.py runserver
登录站点: http://127.0.0.1:8000/admin
登录站点成功:(站点界面中没有书籍和作者管理入口, 是因为没有注册模型类)
3, 注册模型类
在应用的 admin.py 文件中注册模型类
需要导入模型模块:
from models import *
注册模型后:
注册模型成功后, 就可以在站点管理界面方便快速的管理数据
4, 发布内容到数据库
出现这个错误:
是一个 bug, 所以就升级一下 Django 吧, 2.1.7 之后就没问题了.
发布内容后, 优化模型展示:
- from django.db import models
- # Create your models here.
- # 创建人物列表信息的模型类
- class Author(models.Model):
- # 添加名字, 性别
- name = models.CharField(max_length=10)
- gender = models.BooleanField()
- def __str__(self):
- return self.name
- # 开始创建书籍列表信息的模型类 继承 models.Model
- class Book(models.Model):
- # 创建字段, 字段类型, 以及字段长度设置
- name = models.CharField(max_length=10)
- # 添加外键约束, 这个本书属于哪个作者写的
- auth_id = models.ForeignKey(Author,on_delete=models.CASCADE)
- # 模型类准备好后, 创建和执行迁移 == 建表
- def __str__(self):
- return self.name
可以选择刚添加的信息做修改
5, 自定义站点管理页面
自定义站点管理界面前
如果想在站点界面中展示详细的字段信息, 需要自定义管理页面
即在应用的 admin.py 文件中需要重新注册模型类
1, 新建类继承自 admin.ModelAdmin
2, 重写 list_display, 指定需要展示的字段
3, 将 BookAdmin 注册到站点
- from django.contrib import admin
- # Register your models here.
- # 导入模型
- from Web.models import *
- # 注册作者模型
- admin.site.register(Author)
- # 为了在管理站点中显示书籍字段信息, 需要重新注册模型类
- class BookAdmin(admin.ModelAdmin):
- list_display = ["id","name","auth_id"]
- # 注册书籍信息模型
- admin.site.register(Book,BookAdmin)
- # 注册书籍模型
- # admin.site.register(Book)
视图和 URL:
站点管理页面做好了, 接下来就要做公共访问的页面了.
对于 Django 的设计框架 MVT.
用户在 URL 中请求的是视图.
视图接收请求后进行处理.
并将处理的结果返回给请求者.
使用视图时需要进行两步操作
1. 定义视图
2. 配置 URLconf
1, 定义视图:
视图就是一个 Python 函数, 被定义在应用的 views.py 中.
视图的第一个参数是 HttpRequest 类型的对象 reqeust, 包含了所有请求信息.
视图必须返回 HttpResponse 对象, 包含返回给请求者的响应信息.
需要导入 HttpResponse 模块 : from django.http import HttpResponse
定义视图函数 : 响应字符串 OK! 给客户端
2, 配置 URLconf
查找视图的过程:
1, 请求者在浏览器地址栏输入 url, 请求到网站
2, 网站获取 url 信息
3, 然后与编写好的 URLconf 逐条配对
4, 如果匹配成功则调用对应的视图
5, 如果所有的 URLconf 都没有匹配成功, 则返回 404 错误
URLconf 入口:
需要完成 URLconf 配置
1) 在应用中定义 URLconf
URL 规则使用正则表达式定义
视图就是在 views.py 中定义视图函数
3. 测试: 请求访问 http://127.0.0.1:8000/
来源: https://www.cnblogs.com/lishuntao/p/11650807.html