Python Django框架笔记

Django

1 软件框架

一个公司是由公司中的各部部门来组成的,每一个部门拥有特定的职能,部门与部门之间通过相互的配合来完成让公司运转起来。

一个软件框架是由其中各个软件模块组成的,每一个模块都有特定的功能,模块与模块之间通过相互配合来完成软件的开发。

软件框架是针对某一类软件设计问题而产生的。

image-20191106230343203

2 MVC框架

2.1 MVC简介

MVC最初是由施乐公司旗下的帕罗奥多研究中心中的一位研究人员给 smalltalk语言发明的一中软件设计模式。

MVC的产生理念: 分工。让专门的人去做专门的事。

MVC的核心思想: 解耦

MVC的思想被应用在的web开发的方面,产生了web MVC框架

2.2 Web MVC框架模块功能

通过浏览器注册用户信息。

image-20191106230607584

M:Model,模型,和数据库进行交互。

V:View,视图, 产生html页面。

C:Controller,控制器, 接收请求,进行处理,与M和V进行交互,返回应答。

3 Django框架

3.1 简介

Django是劳伦斯出版集团的开发人员为开发新闻内容网站而设计出来的一个软件,它遵循MVC思想,但是有自己的一个名词,叫做MVT

Django遵循快速开发和DRY原则。Do not repeat yourself.不要自己去重复一些工作。

3.2 MVT各部分功能

image-20191106230822940

M:Model,模型, 和MVC中M功能相同,和数据库进行交互。

V:View,视图, 和MVC中C功能相同,接收请求,进行处理,与M和T进行交互,返回应答。

T:Template,模板, 和MVC中V功能相同,产生html页面。

4 项目创建

4.1 创建Django项目

命令:django-admin startproject 项目名

注意:创建应用必须先进入虚拟环境。

项目目录如下:

image-20191106231636800

init.py: 说明test1是一个python包。

settings.py: 项目的配置文件。

urls.py: 进行url路由的配置。

wsgi.py: web服务器和Django交互的入口。

manage.py: 项目的管理文件。

4.2 创建Django应用

image-20191106231733279

一个项目由很多个应用组成的,每一个应用完成一个功能模块。

创建应用的命令如下:

python manage.py startapp 应用名

注意:创建应用时需要先进入项目目录。

应用目录如下:

image-20191106231833699

init.py: 说明目录是一个Python模块。

models.py: 写和数据库项目的内容, 设计模型类。

views.py: ,接收请求,进行处理,与M和T进行交互,返回应答。

定义处理函数,视图函数。

tests.py: 写测试代码的文件。

admin.py: 网站后台管理相关的文件。

4.3 应用注册

建立应用和项目之间的联系,需要对应用进行注册。

修改settings.py中的INSTALLED_APPS配置项。

4.4 启动项目

运行开发web服务器命令:

python manage.py runserver

5.模型类

5.1 ORM框架

image-20191108215228665

django中内嵌了ORM框架,ORM框架可以将类和数据表进行对应起来,只需要通过类和对象就可以对数据表进行操作。

在Django中主要是设计类:模型类。

ORM另外一个作用:根据设计的类生成数据库中的表。

5.2 模型类设计

在应用models.py中设计模型类。

必须继承与models.Model类。

1) 设计BookInfo类。

2) 设计HeroInfo类。

Models.ForeignKey可以建立两个模型类之间一对多的关系,django在生成表的时候,就会在多端的表中创建一列作为外键,建立两个表之间一对多的关系。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 一类
# booktest2_bookinfo
class BookInfo(models.Model):
'''图书模型类'''
# 图书名称
btitle = models.CharField(max_length=20, db_column='title')
# 图书名字唯一
# btitle = models.CharField(max_length=20, unique=True, db_index=True)
# 出版日期
bpub_date = models.DateField()
# bpub_date = models.DateField(auto_now_add=True) # 创建时间
# bpub_date = models.DateField(auto_now=True) # 更新时间

# 多类
class HeroInfo(models.Model):
'''英雄人物模型类'''
# 英雄名
hname = models.CharField(max_length=20)
# 性别
hgender = models.BooleanField(default=False)
# 备注
hcomment = models.CharField(max_length=200, null=True, blank=False)
# 关系属性
hbook = models.ForeignKey('BookInfo')

5.3 模型类生成表

1) 生成迁移文件

命令:python manage.py makemigrations

image-20191108215750139

迁移文件是根据模型类生成的。

2) 执行迁移生成表

命令:python mange.py migrate

根据迁移文件生成表。

生成表名的默认格式:

应用名_模型类名小写

5.4 通过模型类操作数据表

进入项目shell的命令:

1
python manage.py shell

以下为在相互shell终端中演示的例子:

首先导入模型类:

1
from booktest.models import BookInfo,HeroInfo

1) 向booktest_bookinfo表中插入一条数据。

1
2
3
4
5
6
7
b = BookInfo() #定义一个BookInfo类的对象

b.btitle ='天龙八部' #定义b对象的属性并赋值

b.bpub_date = date(1990,10,11)

b.save() #才会将数据保存进数据库

2) 查询出booktest_bookinfo表中id为1的数据。

1
b = BookInfo.objects.get(id=1)

3) 在上一步的基础上改变b对应图书的出版日期。

1
2
3
b.bpub_date = date(1989,10,21)

b.save() #才会更新表格中的数据

4) 紧接上一步,删除b对应的图书的数据。

1
b.delete() #才会删除

5) 向booktest_heroInfo表中插入一条数据。

1
2
3
4
5
6
7
8
9
10
11
12
h = HeroInfo()

h.hname = '郭靖'
h.hgender = False

h.hcomment = ‘降龙十八掌’

b2 = BookInfo.objects.get(id=2)

h.hbook = b2 #给关系属性赋值,英雄对象所属的图书对象

h.save()

6) 查询图书表里面的所有内容。

1
2
3
BookInfo.objects.all()

HeroInfo.objects.all()

5.5 关联操作

image-20191108220336293

1) 查询出id为2的图书中所有英雄人物的信息。

1
2
3
b = BookInfo.objects.get(id=2)

b.heroinfo_set.all() #查询出b图书中所有英雄人物的信息

6. 后台管理

1) 本地化

​ 语言和时区的本地化。

​ 修改settings.py文件。

1
2
3
4
5
6
# Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

2) 创建管理员

命令:

1
python manage.py createsuperuser

3) 注册模型类

在应用下的admin.py中注册模型类。

1
2
3
4
from django.contrib import admin
from booktest.models import HeroInfo

admin.site.register(HeroInfo)

告诉djang框架根据注册的模型类来生成对应表管理页面。可以通过重写str()方法来改变显示的内容。

1
2
3
b = BookInfo() # 相当于创建了BookInfo()对象,然后调用str()方法

str(b) __str__

4) 自定义管理页面

自定义模型管理类。模型管理类就是告诉django在生成的管理页面上显示哪些内容。

image-20191108221113512

0%