1.Django介绍
1.1Django历史
- Django 是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。
- 这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。
- 官方网站:https://www.djangoproject.com/
1.2Django核心组件
- M 代表模型(Model),即数据存取层。该层处理与数据相关的所有事务:如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。
- T 代表模板(Template),即表现层。该层处理与表现相关的决定:如何在页面或其他类型文档中进行显示。
- V 代表视图(View),即业务逻辑层。该层包含存取模型及调取恰当模板的相关逻辑。我们可以把它看作模型与模板之间的桥梁。
1.3Django版本
1.4Django安装
1.5Django工作机制
- 用manage .py runserver 启动Django服务器时就载入了在同一目录下的settings .py。该文件包含了项目中的配置信息,如前面讲的URLConf等,其中最重要的配置就是ROOT_URLCONF,它告诉Django哪个Python模块应该用作本站的URLConf,默认的是urls .py。
- 当访问url的时候,Django会根据ROOT_URLCONF的设置来装载URLConf。
- 然后按顺序逐个匹配URLConf里的URLpatterns。如果找到则会调用相关联的视图函数,并把HttpRequest对象作为第一个参数(通常是request)。
- 最后该view函数负责返回一个HttpResponse对象
1.6Djangom目录说明
- manage.py,一个命令行工具,可以使用多种方式对Django项目进行开发交互
- settings.py,项目的配置文件
- urls.py,项目的URL配置
- wsgi.py,项目与WSGI兼容的web服务器入口
1.7Django基本命令
- django-admin startproject sitename(创建一个工程)
- python manage.py runserver ip:port (启动服务器,默认ip和端口为http://127.0.0.1:8000/)
- python manage.py startapp appname (新建 app)
- python manage.py syncdb (同步数据库命令,Django 1.7及以上版本需要用以下的命令)
- python manage.py makemigrations (显示并记录所有数据的改动)
- python manage.py migrate (将改动更新到数据库)
- python manage.py createsuperuser (创建超级管理员)
- python manage.py dbshell (数据库命令行)
- python manage.py (查看命令列表)
2.模型介绍
2.1什么是Model模型
Model (模型) 简而言之即数据模型。模型不是数据本身(比如数据库里的数据),而是抽象的描述数据的构成和逻辑关系。每个Django model实际上是个类,继承自models.Model。每个Model应该包括属性,关系(比如单对单,单对多和多对多)和方法。当你定义好Model模型后,Django的接口会自动帮你在数据库生成相应的数据表(table)。这样你就不用自己用SQL语言创建表格或在数据库里操作创建表格了,是不是很省心?
2.2什么是ORM
ORM是"对象-关系-映射"的简称:
- O 是object,也就类对象的意思
- R 是relation,也就是关系数据库中数据表的意思
- M 是mapping,是映射的意思
主要完成以下任务:
- 根据对象类型生成表结构
- 将对象、列表的操作,转换成SQL语句
- 将SQL查询到的结果转换为对象、列表
2.3定义模型类常用的属性
2.3.1字段类型
2.3.2字段选项
2.3.3 关系字段类型
2.4Django数据库开发步骤
- 在models.py文件中定义模型类
- 迁移
- 通过类和对象完成数据增删改查操作
2.5模型设计示例
本示例完成“图书-英雄”信息的维护,需要存储两种数据:图书、英雄
2.5.1图书表结构设计
- 数据库表名称(类名称):BookInfo
- 图书名称:btitle
- 图书发布日期:bpub_date
2.5.2英雄表结构设计
- 数据库表名称(类名称):HeroInfo
- 英雄姓名:hname
- 英雄性别:hgender
- 英雄介绍:hcontent
- 所属图书:hbook
图书和英雄的关系为一对多
2.5.3数据库配置
- 在settings.py文件里,通过DATABASES项进行数据库配置
- Django支持的数据库包括sqlite、mysql等
- Django默认使用的是sqlite数据库
2.6创建应用
在一个项目里可以创建多个应用,每个应用进行一种业务处理
2.7定义模型类
2.8生成数据
2.8.1激活模型
编辑settings.py,将booktest应用加入到install_apps中
2.8.2 生成迁移文件
生成迁移文件:根据模型类生成sql语句。迁移文件被生成到应用的migrations目录。
2.8.3执行迁移
执行sql语句生成数据表
2.9数据测试
进入python manage.py shell,进行简单的模型练习
2.9.1导入依赖包
2.9.2查询所有图书信息
2.9.3新建图书馆信息
2.9.4查找图书
2.9.5输出图书信息
2.9.6修改图书信息
2.9.7删除图书信息
2.10关联对象
对于HeroInfo可以按照上面的操作方式进行,注意添加关联对象
2.10.1添加关联对象
2.10.2获得关联集合
返回当前book对象的所有hero
3.管理站点
3.1站点操作
3.1.1 什么是站点管理
- 站点分为内容发布和公共访问两部分
- 内容发布的部分负责添加、修改、删除内容,开发这些重复的功能是一件单调乏味、缺乏创造力的工作。因此,DJango会根据定义的模型类完全自动地生成管理模块
3.1.2站点管理特性
- 读取模型中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即工作
- django的管理工具被称作 django.contrib.admin
3.2使用Django管理
3.2.1创建管理员
3.2.2启动Django服务
- 浏览器输入http://127.0.0.1:8000/admin访问链接,输入上述步骤创建的用户名、密码即可完成登录。
3.2.3进入管理站点
- 默认可以对groups、users进行管理
3.3管理界面化
- 本地化是将显示的语言、时间等使用本地的习惯,这里的本地化就是进行中国化,中国大陆地区使用简体中文,时区使用亚洲/上海时区,注意这里不使用北京时区表示。
编辑settings.py文件,设置编码、时区
3.4管理站点注册模型
3.4.1注册模型
打开booktest/admin.py文件,注册模型
3.4.2修改数据
刷新管理页面,可以对BookInfo的数据进行增删改查操作
3.4.3问题及解决方案
如果在str方法中返回中文,在修改和添加的会报ascii的错误。解决方案:在str()方法中,将字符串末尾添加".encoding(utf-8)"(此问题针对python2.x版本)
3.5自定义管理页面
3.5.1 admin.ModelAdmin类
Django提供了admin.ModelAdmin类
3.5.2显示方式
通过定义ModelAdmin的子类,来定义模型在Admin界面的显示方式
3.5.3列表页属性
- list_display: 显示字段,可以点击列头进行排序
list_display['pk', 'btitle', 'bpub_date'] - list_filter: 过滤字段,过滤框会出现在右侧
list_filter = ['btitle'] - search_fields: 搜索字段,搜索框会出现在上测
search_fields = ['btitle'] - list_per_page: 分页,分页框会出现在下册
3.5.4修改、添加页属性
- fields: 属性的先后顺序
- fieldsets: 属性分组
元组第一个参数,分组的名字;第二个参数,存放哪些字段
3.5.5关联对象
对于HeroInfo模型类,有两种注册方式
- 方式一:与BookInfo模型类相同
- 方式二:关联注册
关联注册(在admin.py文件里)