">

笔记11:Django入门

摘要:日常学习中对一些知识点进行总结得出该系列文章。学习笔记内容包括前端技术,Django web开发技术,数据库技术如MySQL,MongoDB,PGSQL等等。此外还有一些工具如Dock,ES等等。(本文原创,转载必须注明出处.)

MVC的核心思想就是解耦。

1559138019832

MVT

Django遵循MVC思想,其称为MVT。其中:

  • M: Model模型:和MVC中的M相同和数据库交互
  • V:View视图,和MVC中的C相同,接收请求并处理,与M和T交互,返回应答
  • T:Template模板,和MVC中的V功能相同,产生HTML

1559138277822

解决python安装包依赖问题

1559139008305

在虚拟环境里面配置,减少依赖。

Django项目创建

1559139501282

  • 项目结构

1559139626118

  • 创建应用 C:\Users\admin\Desktop\bncDome\test1>django-admin startapp booktest

1559139813409

1559140138434

  • 启动服务器

1559142881991

  • 添加app

1559141953184

ORM框架

1559142294439

ORM模型类生产表

  • 1 设计testbook app中的model.py

1559143745239

  • 2 生成迁移文件

1559143598381

1559143956503

  • 3 执行迁移生成表

1559144008478

1559144107935

sqlite3是一个小型数据库,经常使用在手机登移动端

  • 通过模型操作数据表。操作sqlite3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
C:\Users\admin>cd Desktop\bncDome\test1
C:\Users\admin\Desktop\bncDome\test1>python manage.py shell
In [3]: from booktest.models import BookInfo
In [6]: from datetime import date

In [4]: b=BookInfo()

# 插入
In [5]: b.btitle = '天龙八部'
In [9]: b.bpub_date = date(1990,1,1)
In [10]: b.save()

# 查找
In [14]: b2=BookInfo.objects.get(id=1)
In [15]: type(b2)
Out[15]: booktest.models.BookInfo
In [16]: b2.btitle
Out[16]: '天龙八部'

# 更新
In [17]: b2.btitle ='笑傲江湖'
In [18]: b2.save()
In [19]: b2.btitle
Out[19]: '笑傲江湖'

#删除
In [23]: b2.delete()

模型M

  • 模型与模型关系

1559232526545

生成迁移文件

1559232582029

生成迁移表

1559232615290

1559232696219

1559232830466

1559232902886

  • Django操作后台管理

(1)本地化语言与时间

1559233086302

(2)创建管理员

1559233147460

(3)启动服务器

1559233206207

(4)浏览器访问

1559233262373

(5)注册模型类

1559233296822

1559233405264

1559233729525

1559233420800

(6)列表文本显示

1559233550047

1559233566898

(7)自定义管理页面

1559488741646

1559488845141

视图V

  • 视图使用:当视图与T交互时候,首先浏览器地址中127.0.0.1\index。找到项目第三步中的url中的urlpatterns中查找,\与^ 一样,逐渐往下匹配。找到booktest.urls。然后跳到app中的booktest中的urls(第二步)继续匹配。对应的是一个视图views.index,就会跳到视图views.py匹配,即第一步

(1)编写view代码,定义视图函数,返回浏览器的内容

1559489906689

(2)创建urls.py:配置url路由,注意严格匹配开头结尾。地址视图都在这里直接匹配

1559490135125

1559490288469

1559490364451

(3) 项目的url文件配置,包含对应的app中的视图

1559489545206

  • ur与视图匹配过程

    1559490527800l

Template模板

(1)根项目下创建模板templates文件夹

1559491898481

(2)配置模板目录

  • 项目绝对路径,查看即可

1559490928361

  • 设置目录文件路径

1559490983465

  • 配置模板文件,每个app下创建一个模板文件名如booktest

1559492103769

这里面的模板文件为html,而模板中不仅仅为html。其中支持变量,变量使用两个花括号,;里面是view.py中设置的字典键名。

  • 模板中的遍历

1559492448818

(3)使用模板文件

1559491107254

  • 模板渲染:产生标准的html

    1559491434322

  • 封装以上步骤

1559491544675

注意:使用模板文件中需要以上四个步骤,对以上四步进行封装为my_render遍历高效执行。幸运的是django已经帮我们封装好了这个方法为render。其中第一个参数为request,第二个是模板路径,第三个参数是变量字典,没有变量则为空

1559491709284

1559491608434

1559492307170

  • 显示结果

1559492417381

MVT综合案例

(1)启动项目解决端口号占用,指定端口号

1559492591951

(2)案例介绍

1559492675244

1559492716985

(3)视图编写,先导入模型model类,查找MongoDB数据库的表信息

1559492850511

1559492946155

(4)配置url,记得配置主项目下的urls.py,这个文件一次配置多次使用

1559493017734

(5)创建模板文件

1559493253565

(6)显示图书信息,主页信息

1559493198553

(7) 在视图里面编写图书管理的详细信息

1559493402099

1559493480687

(8) 设置URL地址以及传参

1559493621636

Django在页面间传参的原理是,在页面url配置时候通过括号里面的组进行传参,后面视图会自动解析组内容进行参数填充。多个参数多个组

(8)创建子页面信息

1559493816342

Django使用MySQL

(1)创建新的项目:django-admin startproject tets2

(2) 创建app: django-admin startapp booktest

(3) setting.py中的INSTALLED_APPS注册应用booktest

(4) setting.py中的DATABASES中配置数据库

1
2
3
4
5
6
7
8
9
10
11
12
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.mysql',
'NAME':'bj18',
'USER':'root',
'PASSWORD':'admin',
'HOST':'127.0.0.1',
'PORT':3306,
}
}

(5) 预先安装pip install pymysql,之后在test2中需要加两句话:

1559566868521

1559566639759

(6) 根目录下启动服务: python manage.py runserver

(7) 迁移表:python manage.py makemigrations

(8) mysql数据库同步表:python manage.py migrate

1560179674829

(9) 编写views

1
2
3
4
5
6
7
8
9
10
from django.shortcuts import render

from booktest.models import BookInfo

# Create your views here.
def index(request):
# 1 查询所有信息
books = BookInfo.objects.all()
# 2 使用模板
return render(request,'booktest/index.html',{'books':books})

(10) 设置模板目录DIRS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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',
],
},
},
]

(11) 在templates下新建booktest文件夹,然后创建html

(12) 配置urls

1
2
3
4
5
6
7
8
from django.contrib import admin
from django.urls import path,include


urlpatterns = [
path('admin/', admin.site.urls),
path('booktest/', include('booktest.urls') )
]

booktest的urls

1
2
3
4
5
6
from django.urls import path,include

from booktest import views
urlpatterns = [
path('',views.index,name='index')
]

重定向

1
2
3
4
5
6
7
8
9
from django.shortcuts import render,redirect

def create(request):
b = BookInfo()
b.btitle = '流星蝴蝶剑'
b.bpub_date= datetime.date(1990,1,1)
b.save()
# return HttpResponse('ok')
return redirect('index')

(13)mysql日志文件

1560266978298

(14)模型-模型关系:1:1,1:多,多:多

1560267866713

两个类之间有多对多的关系,ManyToManyField定义在哪个类里面都可以

1560267754216

(15)模型-关联查询

1560268121596

1560268260720

(16)管理器对象

1560268710592

1560268993164

1560269246685

1560269420407

(17)元选项:不会因为app改变影响模型类,然后重新做下迁移

1560269741567

模型类对应的表名不依赖于应用的名字

机器学习和自然语言QQ群:436303759

机器学习和自然语言(QQ群号:436303759)是一个研究深度学习、机器学习、自然语言处理、数据挖掘、图像处理、目标检测、数据科学等AI相关领域的技术群。其宗旨是纯粹的AI技术圈子、绿色的交流环境。本群禁止有违背法律法规和道德的言谈举止。群成员备注格式:城市-自命名。微信订阅号:datathinks

白宁超 wechat
扫一扫关注微信公众号,机器学习和自然语言处理,订阅号datathinks!