Django
: 发音为 [ `dʒæŋɡəʊ ]. 名称来源于比利时爵士音乐家 Django ReinhardtPython
语言写的开源web开发框架, 发布于2005年7月.Django
的主要目的是简便、快速的开发数据库驱动的网站.Django
强调代码复用, 多个组件能够很方便的以 “插件”
形式服务于整个框架. 有许多功能强大的第三方插件.Django
遵循MVC
设计模式. 可是有一个专有名词 :MVT
MVC
全拼为Model-View-Controller
MVC
核心思想 : 解耦
MVC
解析
M
全拼为Model
, 主要封装对数据库层的访问, 内嵌ORM框架, 实现面向对象的编程来操做数据库.V
全拼为View
, 用于封装结果, 内嵌了模板引擎, 实现动态展现数据.C
全拼为Controller
, 用于接收GET或POST请求, 处理业务逻辑, 与Model和View交互, 返回结果.Java、PHP、Python、...
中都有MVC
设计模式.MVT
全拼为Model-View-Template
MVT
核心思想 : 解耦MVT
解析
M (模型)
全拼为Model
, 与MVC中的M功能相同, 负责数据处理, 内嵌了ORM框架.V (视图)
全拼为View
, 与MVC中的C功能相同, 接收HttpRequest, 业务处理,返回HttpResponse.T (模板)
全拼为Template
, 与MVC中的V功能相同, 负责封装构造要返回的html, 内嵌了模板引擎.MVT和MVC
差别就在于黑箭头标识出来的部分.学习 Django, 重点就是研究
Model-View-Template
三个模块间如何协同工做及各自模块的代码如何编写。html
耦合性:指软件系统结构中各模块间相互联系紧密程度的一种度量。python
内聚性:指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。web
在开发过程当中, 当须要使用python
的某些工具包/框架时须要联网安装sql
好比联网安装Django框架django1.8.2
版本shell
sudo pip install django==1.8.2
django1.8.2
安装到/usr/local/lib/python版本/dist-packages
路径下虚拟环境
虚拟环境
能够搭建独立的python运行环境
, 使得单个项目的运行环境与其它项目互不影响.虚拟环境
都位于/home/
下的隐藏目录.virtualenvs
下安装虚拟环境的命令 :数据库
sudo pip install virtualenv sudo pip install virtualenvwrapper
建立虚拟环境的命令 :django
在python2中,建立虚拟环境编程
mkvirtualenv 虚拟环境名称 例 : mkvirtualenv py_django
在python3中,建立虚拟环境设计模式
mkvirtualenv -p python3 虚拟环境名称 例 : mkvirtualenv -p python3 py3_django
提示 :服务器
查看虚拟环境的命令 :
workon 两次tab键
使用虚拟环境的命令 :
workon 虚拟环境名称 例 :使用python2的虚拟环境 workon py_django 例 :使用python3的虚拟环境 workon py3_django
退出虚拟环境的命令 :
deactivate
删除虚拟环境的命令 :
rmvirtualenv 虚拟环境名称 例 :删除虚拟环境py3_django 先退出:deactivate 再删除:rmvirtualenv py3_django
python3版本下安装django1.8.2的包 :
pip install 包名称 例 : 安装django1.8.2的包 pip install django==1.8.2
工具包安装的位置 :
~/.virtualenvs/py_django/lib/python2.7/site-packages/
~/.virtualenvs/py3_django/lib/python3.5/site-packages
查看虚拟环境中安装的包 :
pip freeze
BookManager
, 建立应用名称为Book
, 完成图书信息
的维护.在~/Desktop/.../
目录下建立项目BookManager
例 : 在桌面建立项目 cd ~/Desktop/
建立项目的命令 :
建立好项目就可使用PyCharm
打开.
django-admin startproject 项目名称 例 :建立项目BookManager django-admin startproject BookManager
项目结构
BookManager
: 是与项目同名的文件, 内部包含以下项目的配置文件.
init.py
: 是表示文件BookManager
能够被看成包使用.settings.py
: 是项目的总体配置文件.urls.py
: 是项目的URL
配置文件.wsgi.py
: 是项目与WSGI
兼容的Web服务器入口.manage.py
: 是项目运行的入口, 指定配置文件路径.在BookManager
项目中, 建立应用Book
cd BookManager/ python manage.py startapp Book
项目结构
admin.py
: 是后台的站点管理注册文件.init.py
: 是表示文件Book
能够被看成包使用.migrations
: 是作模型迁移的.models.py
: 是处理数据的.MVT
中的M
tests.py
: 是作测试用的.views.py
: 是处理业务逻辑的.MVT
中的V
虚拟环境py_django
下的python
which python 结果: /home/python/.virtualenvs/py_django/bin/python
虚拟环境py3_django
下的python
which python 结果: /home/python/.virtualenvs/py3_django/bin/python
Django
提供了一个纯Python
编写的轻量级web服务器
,
python manage.py runserver ip:端口
python manage.py runserver 172.16.21.25:8001 对应: http://172.16.21.25:8001/
ip和端口号能够不写, 默认ip为127.0.0.1
;端口号为8000
.
python manage.py runserver 对应: http://127.0.0.1:8000/
提示:若是项目的虚拟环境由py3_django
切换到py_django
时,须要同时切换测试服务器的虚拟环境到py_django
输入http://127.0.0.1:8000/
便可访问.
增长代码、修改代码、删除代码
服务器会自动重启.按ctrl+c
中止服务器
如下为书籍信息管理的数据关系:书籍和人物是 :一对多关系
要先分析出项目中所须要的数据, 而后设计数据库表.
书籍信息表
字段名 | 字段类型 | 字段说明 |
---|---|---|
id | AutoField | 主键 |
name | CharField | 书名 |
id | name |
---|---|
1 | 西游记 |
2 | 三国演义 |
人物信息表
字段名 | 字段类型 | 字段说明 |
---|---|---|
id | AutoField | 主键 |
name | CharField | 人名 |
gender | BooleanField | 性别 |
book | ForeignKey | 外键 |
id | name | gender | book |
---|---|---|---|
1 | 孙悟空 | False | 西游记 |
2 | 白骨精 | True | 西游记 |
3 | 曹操 | False | 三国演义 |
4 | 貂蝉 | True | 三国演义 |
MVT
设计模式中的Model
, 专门负责和数据库交互.对应(models.py)
Model
中内嵌了ORM框架
, 因此不须要直接面向数据库编程.模型类和对象
完成数据库表的增删改查
.ORM框架
就是把数据库表的行与相应的对象创建关联, 互相转换.使得数据库的操做面向对象.book = models.ForeignKey(BookInfo)
根据数据库表的设计
在models.py
中定义模型类,继承自models.Model
from django.db import models # 准备书籍列表信息的模型类 class BookInfo(models.Model): # 建立字段,字段类型... name = models.CharField(max_length=10) # 准备人物列表信息的模型类 class PeopleInfo(models.Model): name = models.CharField(max_length=10) gender = models.BooleanField() # 外键约束:人物属于哪本书 book = models.ForeignKey(BookInfo) # 模型类准备好以后,须要建立和执行迁移==建表
迁移由两步完成 :
python manage.py makemigrations
python manage.py migrate
迁移前
迁移后
提示:默认采用sqlite3
数据库来存储数据
模型类和对象
完成数据库表的增删改查
.shell
, 进行简单的增删改查
API
操做.
ctrl+d
或输入quit()
能够退出shell
. python manage.py shell
测试增删改查
API
操做
# 引入应用中的模型类 from Book.models import * # 建立书籍模型对象 book = BookInfo() # 新增记录 book.name = 'xiyouji' # 保存记录 book.save() # 查询记录 BookInfo.objects.all() # 删除记录 : 再查询时,表里数据为空 book.delete() # 建立人物模型对象 people = PeopleInfo() people.name = 'sunwukong' people.gender = True people.book = book people.save() # 外键查询 : 查询书里面保存的人物信息(peopleinfo_set是隐式生成的) book.peopleinfo_set.all() # 退出shell quit()