简介
Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。相比于python的其他框架例如Tornado、Flask等,其优势在于大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。
架构设计
Django是基于MVC(Model-View-Controller 模型-视图-控制器)构造的框架,但Django在其基础上做了一些变化,更关注的是模型(Model)、模板(Template)和视图(Views),称之为MTV架构。各自的职责如下:
层次 | 职责 |
---|---|
模型(Model),即数据存取层 | 处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。 |
模板(Template),即业务逻辑层 | 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。 |
视图(View),即表现层 | 存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。 |
此外,Django还有一个url分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template。 可以看出,Model部分与MVC模型部分的功能一致,Template部分完成MVC视图部分的功能,而MVC控制器部分的功能由View与url分发器共同完成。
架构图基本如下:
基本命令
目前django已更新到2.1beta版本,支持的python语言为python3。由于python2.7后续可能将不再维护,所有建议使用安装python3,使用最新的django版本。
新建一个 django project
django-admin.py startproject project_name
注意 project_name 是自己的项目名称,需要为合法的 Python 包名,如不能为 1a 或 a-b。
新建 app 要先进入项目目录下,cd project_name 然后执行下面的命令(下同,已经在项目目录下则不需要 cd project_name)
python manage.py startapp app_name
或
django-admin.py startapp app_name
一般一个项目有多个app, 当然通用的app也可以在多个项目中使用。
与项目名类似 app name 也需要为合法的 Python 包名,如 blog,news, aboutus 等都是合法的 app 名称。
创建数据库表 或 更改数据库表或字段 Django 1.7.1及以上 用以下命令
创建更改的文件
python manage.py makemigrations
将生成的py文件应用到数据库
python manage.py migrate`
旧版本的Django 1.6及以下用
python manage.py syncdb
这种方法可以在SQL等数据库中创建与models.py代码对应的表,不需要自己手动执行SQL。
备注:对已有的 models 进行修改,Django 1.7之前的版本的Django都是无法自动更改表结构的,不过有第三方工具 south,详见 Django 数据库迁移 一节。
使用开发服务器
开发服务器,即开发时使用,一般修改代码后会自动重启,方便调试和开发,但是由于性能问题,建议只用来测试,不要用在生产环境。
python manage.py runserver
当提示端口被占用的时候,可以用其它端口:
python manage.py runserver 8001
python manage.py runserver 9999(当然也可以kill掉占用端口的进程,具体后面有讲,此处想知道的同学可查下 lsof 命令用法)
监听机器所有可用 ip (电脑可能有多个内网ip或多个外网ip)
python manage.py runserver 0.0.0.0:8000
如果是外网或者局域网电脑上可以用其它电脑查看开发服务器 访问对应的 ip加端口,比如 http://172.16.20.2:8000
清空数据库
python manage.py flush
此命令会询问是 yes 还是 no, 选择 yes 会把数据全部清空掉,只留下空表。
创建超级管理员
python manage.py createsuperuser
按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填 修改 用户密码可以用:
python manage.py changepassword username
导出数据 导入数据
python manage.py dumpdata appname > appname.json
python manage.py loaddata appname.json关于数据操作 详见:数据导入数据迁移,现在了解有这个用法就可以了。
Django 项目环境终端
python manage.py shell
如果你安装了 bpython 或 ipython 会自动用它们的界面,推荐安装 bpython。 这个命令和 直接运行 python 或 bpython 进入 shell 的区别是:你可以在这个 shell 里面调用当前项目的 models.py 中的 API,对于操作数据,还有一些小测试非常方便。
数据库命令行
python manage.py dbshell
Django 会自动进入在settings.py中设置的数据库,如果是 MySQL 或 postgreSQL,会要求输入数据库用户密码。
在这个终端可以执行数据库的SQL语句。如果您对SQL比较熟悉,可能喜欢这种方式。
更多命令 终端上输入
python manage.py
可以看到详细的列表,在忘记子名称的时候特别有用。 更详细的介绍,点击对应版本去官网查看
目录结构
让我们使用基本命令中的第一条和第二条命令来快速创建一个最简单的demo,从而观察其目录结构。
➜ django-admin startproject myproject
➜ cd myproject
➜ django-admin startapp myapp
➜ tree
.
├── manage.py #django管理主程序
├── myapp #app目录
│ ├── __init__.py
│ ├── admin.py #注册后台管理文件
│ ├── apps.py #应用配置文件
│ ├── migrations #数据迁移目录
│ │ └── __init__.py
│ ├── models.py #应用模型文件,对应MTV架构中的M
│ ├── tests.py #测试文件
│ └── views.py #视图文件,对应MTV架构中的V
└── myproject #项目配置目录
├── __init__.py
├── settings.py #项目主配置文件
├── urls.py #url路由系统文件
└── wsgi.py #网络通信接口文件
3 directories, 12 files