一、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/

总结View和URL匹配流程:

模板

  提示:漂亮的页面需要html、css、js,可以把这一堆字符串全都写到视图中,作为HttpResponse()的参数,响应给客户端

  由于这样写,重复度高,有错误也不容易查看,检查。因此有一个专门定义前端的地方,效果可以即使展示,错误也更容易发现。于是模板就出现了。

  Template:MTV设计模式的T,在Django中,将前端的内容定义在模板中,然后再把模板交给视图函数,视图函数渲染好,传给浏览器,于是酷炫效果出现了。

 模板的使用步骤 

    1、创建模板

在应用同级目录下创建模板文件夹templates,文件夹名称固定写法。如果使用Pycharm创建的Django项目,那么Pycharm已经自动帮你建好。在Templates文件下,

1、创建应用同名文件夹,例app01

2、在应用同名文件下,创建网页模板文件例:index.html

    2、设置模板查找路径(settings.py)

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
#设置模板查找路径
'DIRS': [os.path.join(BASE_DIR,"templates")],
'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',
],
},
},
]

    3、模板接受视图传入的数据

    4、模板处理数据

5、查看数据处理成果(http://127.0.0.1:8000/)

看见传入的键值对的值说明渲染成功。

 总结View-Templates流程:

 案例实现(展示书籍信息)

  1、确定访问图书列表信息的网址为:http://127.0.0.1:8000/booklist/

  2、项目路由分发urls.py

urlpatterns = [
path('admin/', admin.site.urls),
path('booklist/', views.booklist),
#应用中定义URLconf,包含到项目URLconf中
#正则:只要不是'admin/'就算匹配成功
re_path('^$', views.index),
]

  3、创建应用视图函数

    *查询数据库数据

    *构造上下文

    *将上下文传入模板

def booklist(request):
#查询数据库书籍列表数据
bookslist = Book.objects.all()
#构造上下文
content = {"bookslist":bookslist}
#将数据交给模板处理,处理完成后通过视图响应给客户端
return render(request,"app01/booklist.html",content)

views.py

  4、创建模板

    *读取上下文

    *构造网页html文档:书籍以列表形式展示

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>书籍展示</title>
</head>
<body>
{#遍历列表用以下方式,模板处理数据#}
<ul>
{% for book in bookslist %}
<li>{{ book.name }}</li>
<li>{{ book.auth_id }}</li>
{% endfor %}
</ul>
</body>
</html>

Templates/app01/booklist.html

 案例实现(展示作者信息)

  查询作者信息的路由为http://127.0.0.1:8000/authors/

  1、配置路由

urlpatterns = [
path('admin/', admin.site.urls),
path('booklist/', views.booklist),
path('authors/', views.authors),
#应用中定义URLconf,包含到项目URLconf中
#正则:只要不是'admin/'就算匹配成功
re_path('^$', views.index),
]

  2、创建视图

def authors(request):
author = Author.objects.all()
#构造上下文
content = {"author":author}
#数据交给模板处理,处理完成通过视图函数响应给客户端
return render(request,"app01/authors.html",content)

  3、创建模板

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>作者信息展示</title>
</head>
<body>
<ul>
{% for auth in author %}
<li>{{ auth.name }}----{{ auth.gender }}</li> {% endfor %} </ul>
</body>
</html>

总结MTV流程:

03-Django基础概念和MVT架构的更多相关文章

  1. Spark集群基础概念 与 spark架构原理

    一.Spark集群基础概念 将DAG划分为多个stage阶段,遵循以下原则: 1.将尽可能多的窄依赖关系的RDD划为同一个stage阶段. 2.当遇到shuffle操作,就意味着上一个stage阶段结 ...

  2. Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析

    关于Exynos4412 IIC 裸机开发请看 :Exynos4412 裸机开发 —— IIC总线 ,下面回顾下 IIC 基础概念 一.IIC 基础概念 IIC(Inter-Integrated Ci ...

  3. 03.Django基础三之视图函数

    一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...

  4. zabbix监控的基础概念、工作原理及架构(一)

    zabbix监控的基础概念.工作原理及架构 转载于网络 一.什么是zabbix及优缺点 Zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的 ...

  5. nginx架构与基础概念

    1       Nginx架构 Nginx 高性能,与其架构有关. Nginx架构: nginx运行时,在unix系统中以daemon形式在后台运行,后台进程包含一个master进程和多个worker ...

  6. 1-2、kubernetes架构概述和kubernetes基础概念

    kubernetes https://draveness.me/understanding-kubernetes http://kubernetes.kansea.com/docs/ master/n ...

  7. Django基础(一)

    Django基础(一) 知识预览 Django基本命令 二 路由配置系统(URLconf) 三 编写视图 四 Template 五 数据库与ORM admin的配置 一 什么是web框架? 框架,即f ...

  8. Django基础之MTV模型

    一.Django基础 一.Django简介 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型(Model).视图(View)和控制器(Control ...

  9. 01: Django基础篇

    目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...

随机推荐

  1. JOBDU 1109 连通图

    题目1109:连通图 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4192 解决:2224 题目描述: 给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的. 输入: 每组数据 ...

  2. CF1005D Polycarp and Div 3 思维

    Polycarp and Div 3 time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  3. hdu 3374 String Problem(最小表示法+最大表示法+kmp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题意:给出一个字符串问这个字符串最小表示的最小位置在哪,还有有几个最小表示的串.最大表示的位置在 ...

  4. There is No Alternative CSU - 2097 最小生成树

    Description ICPC (Isles of Coral Park City) consist of several beautiful islands. The citizens reque ...

  5. 【Redis】缓存穿透与缓存雪崩

    一.缓存雪崩 1.1 缓存雪崩产生的原因 1.2 解决方案 1.3 锁的方式 1.4 消息中间件 1.5 一级和二级缓存 1.6 均摊分配redis key 失效时间 二.缓存穿透 一.缓存雪崩 1. ...

  6. 相同类中方法间调用时日志Aop失效处理

    本篇分享的内容是在相同类中方法间调用时Aop失效处理方案,该问题我看有很多文章描述了,不过大多是从事务角度分享的,本篇打算从日志aop方面分享(当然都是aop,失效和处理方案都是一样),以下都是基于s ...

  7. 数据库常用SQL语句(二):多表连接查询

    前面主要介绍了单表操作时的相关查询语句,接下来介绍一下多表之间的关系,这里主要是多表数据记录的查询,也就是如何在一个查询语句中显示多张表的数据,这也叫多表数据记录的连接查询. 在实现连接查询时,首先是 ...

  8. Python编译器及Sublime Text3安装及开发环境配置

    1.初学Python,你需要一个好的开发编辑器 在选择Python编辑器时,可能纠结于那个Python的版本更好一些,在Python2.x和Python3.x版本中, Python3.x版本更好一些, ...

  9. Go语言标准库之strconv

    Go语言中strconv包实现了基本数据类型和其字符串表示的相互转换. strconv包 strconv包实现了基本数据类型与其字符串表示的转换,主要有以下常用函数: Atoi().Itia().pa ...

  10. SpringCloud超简单的入门(1)--一些简单的介绍

    简介 简单来说,springcloud的就是由一组springboot应用(服务)组成,相互之间通过REST等方式进行通信. 两个springboot应用,其中一个作为服务提供者,一个作为服务消费者, ...