logo资料库

Django 2 by Example 中文版.pdf

第1页 / 共292页
第2页 / 共292页
第3页 / 共292页
第4页 / 共292页
第5页 / 共292页
第6页 / 共292页
第7页 / 共292页
第8页 / 共292页
资料共292页,剩余部分请下载后查看
01第一章_创建博客应用
第一章 创建博客应用
1安装Django
1.1创建独立的Python开发环境
1.2使用PIP安装Django
2创建第一个Django项目
2.1运行开发中的站点
2.2项目设置
2.3项目(projects)与应用(applications)
2.4创建一个应用
3设计博客应用的数据架构(data schema)
3.1激活应用
3.2创建和执行迁移
4为数据模型创建管理后台站点(administration site)
4.1创建超级用户
4.2Django 管理后台
4.3向管理后台内添加模型
4.4自定义模型在管理后台的显示
5使用QuerySet和模型管理器(managers)
5.1创建数据对象
5.2修改数据对象
5.3查询数据
5.3.1使用filter()方法
5.3.2使用exclude()方法
5.3.3使用order_by()方法
5.4删除数据
5.5QuerySet何时会被求值
5.6创建模型管理器
6创建列表和详情视图函数
6.1创建视图函数
6.2为视图配置URL
6.3规范模型的URL
7为视图创建模板
8添加分页功能
9使用基于类的视图
总结
02第二章_增强博客功能
第二章 增强博客功能
1通过邮件分享文章
1.1使用Django创建表单
1.2通过视图控制表单
1.3使用Django发送邮件
1.4在模板中渲染表单
2创建评论系统
2.1根据模型创建表单
2.2在视图中处理表单
2.3为文章详情页面添加评论
3添加标签功能
4通过相似性获取文章
总结
03第三章_扩展博客功能
第三章 扩展博客功能
1自定义模板标签和过滤器
1.1自定义模板标签
1.2自定义模板过滤器
2创建站点地图
3创建订阅功能
4增加全文搜索功能
4.1自定义模板过滤器
4.2执行简单搜索
4.3执行简单搜索
4.4创建搜索视图
4.5词干提取与搜索排名
4.6搜索权重
4.7三元相似性搜索
4.8使用其他全文搜索引擎
总结
04第四章_创建社交网站
第四章 创建社交网站
1社交网站
1.1启动社交网站项目
2使用Django内置验证框架
2.1创建登录视图
2.2使用内置验证视图
2.3登录与登出视图
2.4修改密码视图
2.5重置密码视图
3用户注册与用户信息
3.1用户注册
3.2扩展用户模型
3.2.1使用自定义的用户模型
3.3使用消息框架
4创建自定义验证后端
5第三方认证登录
5.1使用Google第三方认证
总结
05第五章_内容分享功能
第五章 内容分享功能
1创建图片分享功能
1.1创建图片模型
1.2创建多对多关系
1.3添加图片模型至管理后台
2从外站分享内容至本站
2.1验证表单字段
2.2重写表单的save()方法
2.3使用jQuery创建小书签程序
3创建图片详情视图
4创建图片缩略图
5使用jQuery发送AJAX请求
5.1加载jQuery
5.2AJAX中使用CSRF
5.3jQuery发送AJAX请求
6创建自定义装饰器
7AJAX分页
总结
06第六章_追踪用户行为
第六章 追踪用户行为
1创建关注系统
1.1通过中间模型创建多对多关系
1.2创建用户关注关系的列表和详情视图
1.3创建用户关注行为的AJAX视图
2创建通用行为流应用
2.1使用contenttypes框架
2.2为模型添加通用关系
2.3避免添加重复的行为
2.4向行为流中添加行为
2.5展示用户行为流
2.6优化QuerySet查询关联对象
2.6.1使用select_related()
2.6.2使用prefetch_related()
2.7创建行为流模板
3使用signals非规范化数据
3.1使用signal功能
3.2应用配置类
4使用Redis数据库
4.1安装Redis
4.2通过Python操作Redis
4.3在Redis中存储图片浏览次数
4.4在Redis中存储排名
4.5进一步使用Redis
总结
07第七章_创建电商网站
创建电商网站
1创建电商网站项目
1.1创建商品品类模型
1.2将模型注册到管理后台
1.3创建商品品类视图
1.4创建商品品类模板
2创建购物车功能
2.1使用Django的session模块
2.2session设置
2.3session过期
2.4在session中存储购物车数据
2.5创建购物车视图
2.5.1购物车相关视图
2.5.2创建展示购物车的模板
2.5.3添加商品至购物车
2.5.4更新商品数量
2.6创建购物车上下文处理器
2.6.1上下文处理器
2.6.2将购物车设置到request上下文中
3生成客户订单
3.1创建订单模型
3.2将订单模型加入管理后台
3.3创建客户订单视图和模板
4使用Celery启动异步任务
4.1安装Celery
4.2安装RabbitMQ
4.3在项目中集成Celery
4.4为应用添加异步任务
4.5监控Celery
总结
08第八章_管理支付与订单
第八章 管理支付与订单
1集成支付网关
1.1注册Braintree沙盒测试账户
1.2安装Braintree的Python模块
1.3集成支付网关
1.3.1使用Hosted Fields进行支付
1.4测试支付
1.5正式上线
2导出订单为CSV文件
2.1给管理后台增加自定义管理行为(actions)
3用自定义视图扩展管理后台的功能
4动态生成PDF发票
4.1安装WeasyPrint
4.2创建PDF模板
4.3创建渲染PDF的视图
4.4使用电子邮件发送PDF文件
总结
09第九章_扩展商店功能
第九章 扩展商店功能
1优惠码系统
1.1创建优惠码数据模型
1.2为购物车增加优惠码功能
1.3在订单中记录优惠码信息
2国际化与本地化
2.1国际化与本地化设置
2.1.1国际化与本地化设置
2.1.2国际化和本地化管理命令
2.1.3如何为项目增加翻译文件
2.1.4Django如何确定当前语言
2.2为项目使用国际化进行准备
2.3翻译Python代码中的字符串
2.3.1标记字符串
2.3.2惰性翻译
2.3.3包含变量的翻译
2.3.4复数的翻译
2.3.5为项目翻译Python字符串字面量
2.4翻译模板
2.4.1使用{% trans %}模板标签
2.4.2使用{% blocktrans %}模板标签
2.4.3翻译商店模板
2.5使用Rosetta翻译界面
2.6待校对翻译Fuzzy translations
2.7国际化URL
2.7.1语言前缀URL模式
2.7.2翻译URL模式
2.8允许用户切换语言
2.9使用django-parler翻译模型
2.9.1安装django-parler
2.9.2翻译模型字段
2.9.3将django-parler集成到管理后台
2.9.4迁移翻译模型数据
2.9.5视图中加入翻译功能
2.10本地格式化
2.11用django-localflavor验证表单字段
3创建商品推荐系统
3.1根据之前的购买记录推荐商品
总结
10第十章_创建在线教育平台
第十章 创建在线教育平台
1创建在线教育平台项目
2创建课程模型
2.1在管理后台注册上述模型
2.2使用fixture为模型提供初始化数据
3创建不同类型内容的模型
3.1模型的继承
3.1.1Abstract models 抽象基类继承
3.1.2Multi-table model inheritance 多表继承
3.1.3Proxy models 代理模型
3.2创建内容的模型
3.3创建自定义字段
3.4将自定义字段加入到模型中
4创建内容管理系统CMS
4.1为站点增加用户验证系统
4.2创建用户验证模板
4.3创建CBV
4.4在CBV中使用mixin
4.5使用用户组和权限
4.5.1限制访问CBV
5管理章节与内容
5.1在课程模型中使用表单集(formsets)
5.2向课程中添加内容
5.3管理章节与内容
5.4重新排列章节和内容的顺序
5.4.1使用django-braces模块中的mixins
总结
11第十一章_学生注册和选课、运用缓存框架
柚子小站
柚爸博客
近期文章
Django 2 By Example 在线教育平台–-学生注册和选课、运用缓存框架
渲染和缓存课程内容
近期评论
展示课程
文章归档
分类目录
增加学生注册功能
建立学生注册用视图
选课
访问课程内容
渲染不同种类的内容
使用缓存框架
缓存后端
安装Memcached服务
Django的缓存设置
为项目增加Memcached缓存
监控Memcached服务
缓存级别
使用Low-level cache API
缓存动态数据
缓存模板片段
缓存视图
缓存站点
总结
文章导航
发表评论
12第十二章_在线教育平台–-RESTful API
柚子小站
柚爸博客
近期文章
Django 2 By Example 在线教育平台–-RESTful API
建立API
近期评论
建立RESTul API
文章归档
分类目录
安装Django REST framework
设置序列化器
理解解析器(parser)与渲染器(renderer)
建立列表和详情视图
建立嵌套的序列化器
建立自定义API视图
处理身份认证
为视图增加权限控制
建立视图集合路由
为视图集添加额外功能
自定义权限
序列化课程内容
总结
文章导航
发表评论
13第十三章_上线_–_柚子小站
柚子小站
柚爸博客
近期文章
Django 2 By Example 上线
上线
近期评论
建立生产环境
文章归档
为不同环境管理不同配置
分类目录
使用PostgreSQL数据库
部署前检查项目
通过WSGI程序提供Django服务
安装WSGI
配置uWSGI
安装NGINX
生产环境
配置NGINX
让NGINX提供静态文件和媒体资源服务
使用SSL安全连接
建立一个SSL认证
配置NGINX使用SSL
配置Django使用SSL
自定义中间件
建立自定义中间件
配置NGINX的二级域名
实现自定义的管理命令
总结
其他感兴趣的书
文章导航
1 评论
发表评论
01第一章_创建博客应用 02第二章_增强博客功能 03第三章_扩展博客功能 04第四章_创建社交网站 05第五章_内容分享功能 06第六章_追踪用户行为 07第七章_创建电商网站 08第八章_管理支付与订单 09第九章_扩展商店功能 10第十章_创建在线教育平台 11第十一章_学生注册和选课、运用缓存框架 12第十二章_在线教育平台–-RESTful API 13第十三章_上线_–_柚子小站
第一章第一章 创建博客应用 创建博客应用 欢迎来到Django 2 by example的教程。你看到的是目前全网唯一翻译该书的教程。 本书将介绍如何创建可以用于生产环境的完整Django项目。如果你还没有安装Django,本章在第一部分中 将介绍如何安装Django,之后的内容还包括创建一个简单的博客应用。本章的目的是让读者对Django的整 体运行有一个概念,理解Django的各个组件如何交互运作,知道创建一个应用的基础方法。本书将指导你 创建一个个完整的项目,但不会对所有细节进行详细阐述,Django各个组件的内容会在全书的各个部分内 进行解释。 本章的主要内容有: 安装Django并创建第一个项目 设计数据模型和进行模型迁移(migrations) 为数据模型创建管理后台 使用QuerySet和模型管理器 创建视图、模板和URLs 给列表功能的视图添加分页功能 使用基于类的视图 1 安装安装Django 如果已经安装了Django,可以跳过本部分到 创建第一个Django项目 小节。Django是Python的一个包(模 块),所以可以安装在任何Python环境。如果还没有安装Django,本节是一个用于本地开发的快速安装 Django指南。 Django 2.0需要Python解释器的版本为3.4或更高。在本书中,采用Python 3.6.5版本,如果使用Linux或者 macOS X,系统中也许已经安装Python(部分Liunx发行版初始安装Python2.7),对于Windows系统, 从 https://www.python.org/downloads/windows/ 下载Python安装包。 译者在此强烈建议使用基于UNIX的系统进行开发。 如果不确定系统中是否已经安装了Python,可以尝试在系统命令行中输入 python 然后查看输出结果,如果 看到类似下列信息,则说明Python已经安装: Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 03:03:55) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> 如果安装的版本低于3.4,或者没有安装Python,从 https://www.python.org/downloads/ 下载并安装。 由于我们使用Python 3,所以暂时不需要安装数据库,因为Python 3自带一个轻量级的SQLite3数据库可以 用于Django开发。如果打算在生产环境中部署Django项目,需要使用更高级的数据库,比如 PostgreSQL,MySQL或者Oracle数据库。关于如何在Django中使用数据库,可以看官方文 档 https://docs.djangoproject.com/en/2.0/topics/install/#database-installation 。 译者注:在翻译本书和实验代码的时候,译者的开发环境是Centos 7.5 1804 + Python 3.7.0 + Django 2.1.0(最后一章升级到Django 2.1.2),除了后文会提到的一个旧版本第三方库插件冲突的问题之外,未 发现任何兼容性问题。 1.1 创建独立的 创建独立的Python开发环境 开发环境 推荐使用 virtualenv 创建独立的开发环境,这样可以对不同的项目应用不同版本的模块,比将这些模块直
接安装为系统Python的第三方库要灵活很多。另一个使用 virtualenv 的优点是安装Python模块的时候不需 要任何管理员权限。在系统命令行中输入如下命令来安装 virtualenv : pip install virtualenv 在安装完 virtualenv 之后,通过以下命令创建一个独立环境: virtualenv my_env 译者注:需要将virtualenv 的所在路径添加到系统环境变量PATH 中,对于Django也是如此,不然无法直 接执行django-admin 命令。 这个命令会在当前目录下创建一个 my_env/ 目录,其中放着一个Python虚拟环境。在虚拟环境中安装的 Python包实际会被安装到 my_env/lib/python3.6/site-packages 目录中。 如果操作系统中安装的是Python 2.X,必须再安装Python 3.X,还需要设置 virtualenv 虚拟Python 3.X的 环境。 可以通过如下命令查找Python 3的安装路径,然后创建虚拟环境: zenx$ which python3 /Library/Frameworks/Python.framework/Versions/3.6/bin/python3 zenx$ virtualenv my_env -p /Library/Frameworks/Python.framework/Versions/3.6/bin/python3 根据Linux发行版的不同,上边的代码也会有所不同。在创建了虚拟环境对应的目录之后,使用如下命令激 活虚拟环境: source my_env/bin/activate 激活之后,在命令行模式的提示符前会显示括号包住该虚拟环境的名称,如下所示: (my_env)laptop:~ zenx$ 开启虚拟环境后,随时可以通过在命令行中输入 deactivate 来退出虚拟环境。 关于 virtualenv 的更多内容可以查看 https://virtualenv.pypa.io/en/latest/ 。 virtualenvwrapper 这个工具可以方便的创建和管理系统中的所有虚拟环境,需要在系统中先安 装 virtualenv ,可以到 https://virtualenvwrapper.readthedocs.io/en/latest/ 下载。 1.2 使用使用PIP安装安装Django 推荐使用 pip 包安装Django。Python 3.6已经预装了 pip ,也可以 在 https://pip.pypa.io/en/stable/installing/ 找到 pip 的安装指南。 使用下边的命令安装Django: pip install Django==2.0.5 译者这里安装的是2.1版。 Django会被安装到虚拟环境下的 site-packages/ 目录中。 现在可以检查Django是否已经成功安装,在系统命令行模式运行 python ,然后导入Django,检查版本, 如下:
>>> import django >>> django.get_version() '2.0.5' 如果看到了这个输出,就说明Django已经成功安装了。 Django的其他安装方式,可以查看官方文档完整的安装指 南: https://docs.djangoproject.com/en/2.0/topics/install/ 。 2 创建第一个 创建第一个Django项目项目 本书的第一个项目是创建一个完整的博客项目。Django提供了一个创建项目并且初始化其中目录结构和文 件的命令,在命令行模式中输入: django-admin startproject mysite 这会创建一个项目,名称叫做 mysite 。 避免使用Python或Django的内置名称作为项目名称。 看一下项目目录的结构: mysite/ manage.py mysite/ __init__.py settings.py urls.py wsgi.py 这些文件解释如下: manage.py :是一个命令行工具,可以通过这个文件管理项目。其实是一个 django-admin.py 的包装器,这个文 件在创建项目过程中不需要编辑。 mysite/ :这是项目目录,由以下文件组成: __init__.py :一个空文件,告诉Python将 mysite 看成一个包。 settings.py :这是当前项目的设置文件,包含一些初始设置 urls.py :这是 URL patterns 的所在地,其中的每一行URL,表示URL地址与视图的一对一映射关系。 wsgi.py :这是自动生成的当前项目的WSGI程序,用于将项目作为一个WSGI程序启动。 自动生成的 settings.py 是当前项目的配置文件,包含一个用于使用SQLite 3 数据库的设置,以及一个叫 做 INSTALLED_APPS 的列表。 INSTALLED_APPS 包含Django默认添加到一个新项目中的所有应用。 在之后的 项目设置 部分会接触到这些应用。 为了完成项目创建,还必须在数据库里创建起 INSTALLED_APPS 中的应用所需的数据表,打开系统命令 行输入下列命令: cd mysite python manage.py migrate 会看到如下输出:
Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying sessions.0001_initial... OK 这些输出表示Django刚刚执行的数据库迁移(migrate)工作,在数据库中创建了这些应用所需的数据 表。在本章的 创建和执行迁移 部分会详细介绍 migrate 命令。 2.1 运行开发中的站点 运行开发中的站点 Django提供了一个轻量级的Web服务程序,无需在生产环境即可快速测试开发中的站点。启动这个服务之 后,会检查所有的代码是否正确,还可以在代码被修改之后,自动重新载入修改后的代码,但部分情况下 比如向项目中加入了新的文件,还需要手工关闭服务再重新启动。 在命令行中输入下列命令就可以启动站点: python manage.py runserver 应该会看到下列输出: Performing system checks... System check identified no issues (0 silenced). May 06, 2018 - 17:17:31 Django version 2.0.5, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. 现在可以在浏览器中打开 http://127.0.0.1:8000/ ,会看到成功运行站点的页面,如下图所示:
能看到这个页面,说明Django正在运行,如果此时看一下刚才启动站点的命令行窗口,可以看到浏览器 的 GET 请求: [15/May/2018 17:20:30] "GET / HTTP/1.1" 200 16348 站点接受的每一个HTTP请求,都会显示在命令行窗口中,如果站点发生错误,也会将错误显示在该窗口 中。 在启动站点的时候,还可以指定具体的主机地址和端口,或者使用另外一个配置文件,例如: python manage.py runserver 127.0.0.1:8001 --settings=mysite.settings 如果站点需要在不同环境下运行,单独为每个环境创建匹配的配置文件。 当前这个站点只能用作开发测试,不能够配置为生产用途。想要将Django配置到生产环境中,必须通过一 个Web服务程序比如Apache,Gunicorn或者uWSGI,将Django作为一个WSGI程序运行。使用不同web服 务程序部署Django请参考: https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/ 。本书的第十第十 三章三章 上线上线会介绍如何配置生产环境。 2.2 项目设置 项目设置 打开 settings.py 看一下项目设置,其中列出了一些设置,但这只是Django所有设置的一部分。可以 在 https://docs.djangoproject.com/en/2.0/ref/settings/ 查看所有的设置和初始值。 文件中的以下设置值得注意: DEBUG 是一个布尔值,控制DEBUG模式的开启或关闭。当设置为 True 时,Django会将所有的日志和错误信息 都打印在窗口中。在生产环境中则必须设置为 False ,否则会导致信息泄露。 ALLOWED_HOSTS 在本地开发的时候,无需设置。在生产环境中, DEBUG 设置为 False 时,必须将主机名/IP 地址填入该列表中,以让Django为该主机/IP提供服务。 INSTALLED_APPS 列出了每个项目当前激活的应用,Django默认包含下列应用: django.contrib.admin :管理后台应用 django.contrib.auth :用户身份认证 django.contrib.contenttypes :追踪ORM模型与应用的对应关系 django.contrib.sessions :session应用 django.contrib.messages :消息应用 django.contrib.staticfiles :管理站点静态文件 MIDDLEWARE 是中间件列表。 ROOT_URLCONF 指定项目的根URL patterns配置文件。 DATABASE 是一个字典,包含不同名称的数据库及其具体设置,必须始终有一个名称为 default 的数据库,默认 使用SQLite 3数据库。 LANGUAGE_CODE 站点默认的语言代码。 USE_TZ 是否启用时区支持,Django可以支持根据时区自动切换时间显示。如果通过 startproject 命令创建站 点,该项默认被设置为 True 。 如果目前对这些设置不太理解也没有关系,在之后的章节中这里的设置都会使用到。 2.3 项目(项目(projects)与应用( )与应用(applications)) 在整本书中,这两个词会反复出现。在Django中,像我们刚才那样的一套目录结构和其中的设置就是一个 Django可识别的项目。应用指的就是一组Model(数据模型)、Views(视图)、Templates(模板)和 URLs的集合。Django框架通过使用应用,为站点提供各种功能,应用还可以被复用在不同的项目中。你 可以将一个项目理解为一个站点,站点中包含很多功能,比如博客,wiki,论坛,每一种功能都可以看作
是一个应用。 2.4 创建一个应用 创建一个应用 我们将从头开始创建一个博客应用,进入项目根目录( manage.py 文件所在的路径),在系统命令行中输 入以下命令创建第一个Django应用: python manage.py startapp blog 这条命令会在项目根目录下创建一个如下结构的应用: blog/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py 这些文件的含义为: admin.py :用于将模型注册到管理后台,以便在Django的管理后台(Django administration site)查看。管理后 台也是一个可选的应用。 apps.py :当前应用的主要配置文件 migrations 这个目录包含应用的数据迁移记录,用来追踪数据模型的变化然后和数据库同步。 models.py :当前应用的数据模型,所有的应用必须包含一个 models.py 文件,但其中内容可以是空白。 test.py :为应用增加测试代码的文件 views.py :应用的业务逻辑部分,每一个视图接受一个HTTP请求,处理这个请求然后返回一个HTTP响应。 3 设计博客应用的数据架构( 设计博客应用的数据架构(data schema)) schema是一个数据库名词,一般指的是数据在数据库中的组织模式或者说架构。我们将通过在Django中 定义数据模型来设计我们博客应用在数据库中的数据架构。一个数据模型,是指一个继承 了 django.db.models.Model 的Python 类。Django会为在 models.py 文件中定义的每一个类,在数据库中 创建对应的数据表。Django为创建和操作数据模型提供了一系列便捷的API(Django ORM): 我们首先来定义一个 Post 类,在 blog 应用下的 models.py 文件中添加下列代码: from django.db import models from django.utils import timezone from django.contrib.auth.models import User class Post(models.Model): STATUS_CHOICES = (('draft', 'Draft'), ('published', 'Published')) title = models.CharField(max_length=250) slug = models.SlugField(max_length=250, unique_for_date='publish') author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts') body = models.TextField() publish = models.DateTimeField(default=timezone.now) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft') class Meta: ordering = ('-publish',) def __str__(self): return self.title 这是我们为了博客中每一篇文章定义的数据模型:
title :这是文章标题字段。这个字段被设置为 Charfield 类型,在SQL数据库中对应 VARCHAR 数据类型 slug :该字段通常在URL中使用。slug是一个短的字符串,只能包含字母,数字,下划线和减号。将使用 slug 字 段构成优美的URL,也方便搜索引擎搜索。其中的 unique_for_date 参数表示不允许两条记录的 publish 字段日期 和 title 字段全都相同,这样就可以使用文章发布的日期与 slug 字段共同生成一个唯一的URL标识该文章。 author :是一个外键字段。通过这个外键,告诉Django一篇文章只有一个作者,一个作者可以写多篇文章。对于 这个字段,Django会在数据库中使用外键关联到相关数据表的主键上。在这个例子中,这个外键关联到Django内 置用户验证模块的 User 数据模型上。 on_delete 参数表示删除外键关联的内容时候的操作,这个并不是Django特 有的定义,而是SQL 数据库的标准操作;将其设置为 CASCADE 意味着如果删除一个作者,将自动删除所有与这 个作者关联的文章,对于该参数的设置,可以查 看 https://docs.djangoproject.com/en/2.0/ref/models/fields/#django.db.models.ForeignKey.on_delete 。 related_name 参 数设置了从 User 到 Post 的反向关联关系,用 blog_posts 为这个反向关联关系命名,稍后会学习到该关系的使 用。 body :是文章的正文部分。这个字段是一个文本域,对应SQL数据库的 TEXT 数据类型。 publish :文章发布的时间。使用了 django.utils.timezone.now 作为默认值,这是一个包含时区的时间对象,可以 将其认为是带有时区功能的Python标准库中的 datetime.now 方法。 created :表示创建该文章的时间。 auto_now_add 表示当创建一行数据的时候,自动用创建数据的时间填充。 updated :表示文章最后一次修改的时间, auto_now 表示每次更新数据的时候,都会用当前的时间填充该字 段。 statues :这个字段表示该文章的状态,使用了一个 choices 参数,所以这个字段的值只能为一系列选项中的值。 Django提供了很多不同类型的字段可以用于数据模型,具体可以参 考: https://docs.djangoproject.com/en/2.0/ref/models/fields/ 。 在数据模型中的Meta类表示存放模型的元数据。通过定义 ordering = ('-publish',) ,指定了Django在进行数 据库查询的时候,默认按照发布时间的逆序将查询结果排序。逆序通过加在字段名前的减号表示。这样最 近发布的文章就会排在前边。 __str__() 方法是Python类的功能,供显示给人阅读的信息,这里将其设置为文章的标题。Django在很多 地方比如管理后台中都调用该方法显示对象信息。 如果你之前使用的是Python 2.X,注意在Python 3中,所有的字符串都已经是原生Unicode格式,所以只 需要定义 __str__() 方法, __unicode__() 方法已被废弃。 3.1 激活应用 激活应用 为了让Django可以为应用中的数据模型创建数据表并追踪数据模型的变化,必须在项目里激活应用。要激 活应用,编辑 settings.py 文件,添加 blog.apps.BlogConfig 到 INSTALLED_APPS 设置中: INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog.apps.BlogConfig', ] BlogConfig 类是我们应用的配置类。现在Django就已经知道项目中包含了一个新应用,可以载入这个应 用的数据模型了。 3.2 创建和执行迁移 创建和执行迁移 创建好了博客文章的数据模型,之后需要将其变成数据库中的数据表。Django提供数据迁移系统,用于追 踪数据模型的变动,然后将变化写入到数据库中。我们之前执行过的 migrate 命令会
分享到:
收藏