Django Web 开发极简实战

课程介绍

本课程是一个系列基础教程,目标是带领读者上手实战 Django Web 开发,课程以 Django 1.10 为基础,通过一个在线视频网站的构建,实战化的介绍 Django Web 开发中涉及的各大基本功能,从项目的创建和配置、到视图函数的创建和 URL 映射设置、到数据模型的创建使用和 Django 模板的运用,再到用户认证系统的实现,最后完成 Django 项目在 Ubuntu 上的部署。

认真读完这个系列文章之后,将会理解 Django Web 开发的过程和其中涉及到的各种基本功能,具备使用 Django 上手进行 Web 开发的基本能力,为使用 Django 构建复杂的 Web 应用打下基础。

作者介绍

杨健,新三板某电商企业技术部 Python 开发工程师,负责公司数据挖掘项目的构建,Python 独立教程博客主:州的先生,对 Python 多领域的运用(Web 开发、数据采集、数据分析和挖掘等)均有所研究和涉及。

课程内容

导读:为什么是 Django

为什么选择 Django 作为 Web 开发,因为……我喜欢\^_^||,哈哈,有点任性了。

实际上,作为一个成熟的 Web 框架,Django 有着很多优点,尤其是对新接触 Python Web 开发的读者:

  • 清晰的架构
  • 完整的功能
  • 丰富的文档

对于一个 Web 新手来说,Django 将数据模型、业务处理函数和页面渲染的模板分离开来的结构很便于理解和排错。一个清晰的结构,有助于对 Web 应用有一个整体和局部的认识。

其次,Django 是一个大而全的框架,基本上 Web 中涉及到的技术,框架内都有提供一个基本的功能,如果对内置的功能不满意,还能够自行修改。一个大而全的框架的好处在于,不用为了各种功能而四处找良莠不齐的第三方模块,用熟了内置的功能,自然理解了功能的运作模式,其后自己造适合自己的轮子也是很轻松的。

使用开源的产品,最担心的不是功能,而是文档的丰富性,而 Django 在这方面,也是远胜于 Python 中的其他 Web 框架。

在此推荐一个 Django 1.8 的中文文档,方便英语不好的读者查漏补缺。

image.png

接下来我们会讲什么

接下来,将构建一个实际的 Web 应用——在线视频学习网站来讲解 Django 的开发。从安装模块,到最后的部署,将会涉及到:

  • 模块的安装
  • 数据模型
  • 业务视图
  • 模板的使用
  • 路由映射
  • 使用 Nginx 部署

没有罗里吧嗦的原理讲解,那本就是官方文档做的事,这里从实战中领悟 Django。

一个完整的开发流程,一个极简的项目实战,敬请期待!

个人博客州的先生 zmister.com| 个人博客,持续更新 Python GUI 开发、Python 渗透测试、Web 开发、Python 爬虫、数据分析、机器学习。

第01课:创建 Django 项目和应用

本篇将会涉及以下内容:

  • Virtualenv 的安装的使用
  • Django 的安装
  • Django 项目的创建
  • Django 项目的运行
  • Django 应用的创建

网站规划与设想

现在开始正式进入 Django Web 开发极简实战的达人课,我们将通过创建一个网站来入门 Django Web 开发,了解 Django 框架的基本结构和 Django Web 开发的基本流程。

首先在此规划一下,在接下来的课程中将会完成创建在线视频教程网站的一些基本页面和功能。

我们在本次达人课中创建的是一个提供 Python 视频教程在线播放的网站,网站主要由首页、视频列表页和视频详情页三个功能页面和其他辅助页面组成,出于教学演示的考虑,视频源存储在本地,同时对视频设置播放密码,来实现部分视频需要用户进行登录才能观看,网站大致有如下页面和功能。

页面

每一个内容丰富的网站都是由许许多多的页面构成的,对于我们需要创建的网站而言,以下几个页面是网站信息的主要载体,是必须必要存在的:

  • 一个首页,用于展示各个分类的视频信息;
  • 一个分类列表页面,用于显示特定分类的视频信息;
  • 一个视频详情页面,用于显示视频的详情和控制视频的播放,也用于视频的评论和点赞;
  • 一个观看历史页面,用于记录用户的观看历史,方便用户查看自己的学习记录;
  • 一个注册页面,用于新用户的注册,通过输入 Email 地址、密码和验证码进行注册;
  • 一个登录页面,用于用户的登录,输入用户名和密码即可进行登录。

功能

除了基本的展示外,我们的网站还需要有各种交互功能,而以下功能,是我们为网站所进行的设定。

  • 用户认证功能:实现新用户的注册和老用户的登录以及登录用户的注销;
  • 视频列表分页功能:在分类列表页面,能够通过“上一页”、“下一页”对视频列表进行翻页;
  • 视频评论功能,能够对视频教程发表评论,此功能通过第三方评论工具来实现;
  • 视频点赞功能,登录用户能够对视频进行点赞;
  • 视频页面分享功能,能够将视频详情页面进行社会化分享,此功能通过百度分享接口实现。

上述的规划将作为接下来进行 Django 项目实战的指导,下面开始 Django Web 开发的实战应用吧!

创建一个 Virtualenv 虚拟环境

为了在一个干净的 Python 环境中进行 Django 项目开发,我们使用 Virtualenv 工具创建一个隔离的虚拟 Python 环境作为 Django 项目的运行环境。

Virtualenv 是一个用于创建独立的 Python 环境的工具,用于解决 Python 开发中版本依赖和兼容的问题。

使用 pip install virtualenv 命令安装好 Virtualenv 模块之后,创建一个名为django_env的虚拟环境,在命令行终端使用 Virtualenv 命令进行创建,代码如下所示:

virtual django_env

默认情况下,Virtualenv 创建一个只包含了 pip、wheel 和 setuptools 这三个模块安装工具的全新 Python 环境。

在当前目录下,我们可以发现已经多出了一个新的文件夹——django_env,点击进去可以查看我们创建的django_env虚拟环境的结构,如图所示:

在 Windows 平台下,我们可以运行 Scripts 子目录下的 activate 脚本来激活当前的虚拟环境,代码如下所示:

Scripts\activate

当看到命令行中目录前出现了一个括号包含着虚拟环境的名称,说明已经激活了虚拟环境。

如果需要退出当前的虚拟环境,可以使用 Script 子目录下的 deactivate 脚本来实现虚拟环境的退出,代码如下所示:

Scripts\deactivate

安装 Django

在激活当前的虚拟环境之后,使用 pip 命令在虚拟环境内安装 Django 模块,在此我们指定安装 Django 1.11 版本(本课程所介绍的项目在 Django 1.11 上开发,为了避免不必要的错误,尽量安装指定的 Django 版本),代码如下所示:

pip install django==1.11

安装完成之后,进行 Python 的 shell 测试一下是否安装成功:

如果没有报错,那就说明安装成功了。

然后我们再查看一下安装的 Django 的版本确保是正确的版本,接着在命令行界面的 Python Shell 中输入以下代码:

django.__version__

结果返回了我们安装的 Django 框架的版本号:

创建一个 Django 项目

在 Django 中,每一个 Web 网站都以项目 Project 的形式来呈现,Django Project 通俗的理解,就是一个包含各个子系统的网站容器。

在 Django 安装完成之后,其会生成很多工具脚本,可以使用其中的 Django 管理工具——django-admin 来创建一个项目,使用参数 startproject,后接具体的项目名称,代码如下所示:

django-admin startproject videolearn

在命令行终端运行上述命令,就在当前目录下创建了一个名为 vidolearn 的 Django 项目,结果如下图所示:

完成上述操作后,可以打开虚拟环境所在的文件夹,看看刚刚创建的 Django 项目,结果如下图所示:

因为我们激活了虚拟环境,所以 Django 项目创建在虚拟环境的目录下,继续打开 Videolearn 文件夹,里面的内容如下图所示:

可以发现,在这个文件夹下有一个项目的主文件夹和一个名为 manage.py 的 Python 文件。

manage.py 文件是以后在 Django 项目开发的过程中经常会使用到的一个管理文件,其提供了 Django 项目的一系列操作,诸如创建应用、创建数据模型、运行服务器等。

在命令行终端运行如下命令:

python manage.py -h

可以看到 manage.py 工具所支持的各种可用功能:

其中一些常用的参数如下:

  • changepassword:用于更改用户密码;
  • createsuperuser:用于创建超级用户,后台管理员;
  • dbshell:用于进入 Django 模型 shell 中;
  • loaddata:用于从文件中加载数据;
  • migrate:用于检测数据模型的改变;
  • makemigtations:用于创建数据模型改变的迁移;
  • startapp:用于创建一个 Django 应用;
  • startproject:用于创建一个 Django 项目;
  • collectstatic:用于收集汇总静态文件;
  • runserver:运行自带调试服务器,默认运行在本地 8000 端口之上。

在 Django 开发过程中,会频繁使用到一些 manage 命令,大家不需要死记硬背,使用得多了自然就熟练了。

继续来看创建的项目文件夹,内层的 viedolearn 目录是创建的 django 项目的包,里面是我们这个 Django 项目创建后的初始文件,默认生成了__init__.pysettings.pyurls.pywsgi.py这四个文件。

  • 项目目录\项目名称\__init__.py文件用于将这个文件夹变成一个可以被其他 Python 文件引用的模块;
  • 项目目录\项目名称\setting.py 文件是 Django 项目的全局配置文件,数据库的信息、模板的配置、静态文件和资源的配置、站点配置基础配置等都在这里面进行设置;
  • 项目目录\项目名称\urls.py 为 Django 项目的路由映射文件,里面为对 url 路由的处理和转发规则;
  • 项目目录\项目名称\wsgi.py 文件则是 Django 的默认 WSGI 配置,WSGI(Web Server Gateway Interface,Web 服务网关接口),是 Python Web 服务器和应用的标准,我们可以根据项目的需要对 wsgi.py 文件做出调整。

对项目进行基本设置

在了解了创建 Django 项目后生成的文件后来对 Django 项目进行一些基础的设置,以方便我们接下来的项目开发。

设置模板目录

我们先创建一个与 Videolearn 同层级的目录 templates,用来放置以后需要使用到的 HTML 模板文件,这些模板文件用于进行数据的渲染。

然后在 settings.py 文件中,将新创建的 templates 目录设为模板引擎的路径,settings.py 中的源代码如下:

# 本块代码位于:videolearn\videolearn\settings.pyTEMPLATES = [    {        'BACKEND': 'django.template.backends.django.DjangoTemplates',        'DIRS': [],        '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',            ],        },    },]

将其修改为:

# 本块代码位于:videolearn\videolearn\settings.pyTEMPLATES = [    {        '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',            ],        },    },]

改动的地方就是将变量 DIRS 的值从空列表,设为了一个包含 templates 目录路径的列表,代码如下所示:

# 本块代码位于:videolearn\videolearn\settings.py'DIRS': [            os.path.join(BASE_DIR,'templates')        ],

修改中文语言和时区

Django 的默认显示语言为英语,并且时区为标准格林威治时间,为了方便查看,我们将其显示语言修改为中文,显示时间的时区修改为上海时区。

settings.py 文件中的源代码如下所示:

# 本块代码位于:videolearn\videolearn\settings.pyLANGUAGE_CODE = 'en-us'TIME_ZONE = 'UTC'

将其修改为如下所示:

# 本块代码位于:videolearn\videolearn\settings.pyLANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/Shanghai'

设置静态文件路径

在 Django 中,使用静态文件(JS、CSS、图片等)需要首先声明静态文件的路径,以便于 Django 从声明的路径中寻找到静态文件。

settings.py 文件中已经默认生成了一个静态文件的 URL,代码如下所示 :

# 本块代码位于:videolearn\videolearn\settings.pySTATIC_URL = '/static/'

继续在项目的内层 Videolearn 文件夹同层级创建一个 static 文件夹,用于存放静态资源文件:

然后在 settings.py 文件中指定这个静态资源文件的路径,代码如下所示:

# 本块代码位于:videolearn\videolearn\settings.pySTATIC_URL = '/static/'STATICFILES_DIRS = (    os.path.join(BASE_DIR,"static"),)

设置媒体文件路径

在我们的网站中可能会需要上传一些图片或是文件,这就需要在 settings.py 文件中声明媒体文件的路径。

我们同样在项目的内层 Videolearn 文件夹同层级创建一个 media 文件夹,用于存放媒体资源文件:

然后在 settings.py 文件中设置变量MEDIA_URLMEDIA_ROOT,分别指定媒体文件的 URL 路由地址和媒体文件的本地路径,代码如下所示:

# 本块代码位于:videolearn\videolearn\settings.pyMEDIA_URL = '/media/'MEDIA_ROOT = os.path.join(BASE_DIR,'media')

测试运行 Django 项目

在完成上述基本设置后,我们使用 Django 内置的测试服务器来运行一下 Django 项目,看看是否正常。

在命令行终端中输入命令,命令如下所示:

# 本命令在CMD命令行界面的videolearn目录下输入python manage.py runserver

Django 项目默认会运行在本地的 8000 端口上,当出现下图的提示,说明测试服务器启动成功:

在浏览器中访问命令行终端中显示的地址:http://127.0.0.1:8000/:

出现了如上图所示的页面,说明 Django 项目创建并测试运行成功了。

为 Django 项目创建一个 App

刚刚创建了一个 Django 项目并进行了基本的设置,同时成功地将创建的项目使用 manage 工具的 runserver 命令运行在本地的 8000 端口上。

下面接着介绍 Django 的应用(App),在 Django 中,项目(project)是 Django 网站的大框架和容器,那么 App(应用)又是什么呢?

应用(App)是一个具体的 Web 应用程序,用来实现具体的功能和完成具体的事项,被 Django 项目(project)所包含。一个 project 里面可以有很多个 App,就像一个网站可以有文章系统、论坛系统、后台系统等,每一个 App 也可以剥离出来作为独立的模块组件。

还记得上一篇介绍过的 manage.py 文件和它的一些常用功能命令吗?利用 manage.py 这个命令行小工具,通过 startapp 命令,可以很方便快速地创建一个 django app,代码如下所示:

python manage.py startapp video

在命令行终端运行上述命令,就创建了一个名为 video 的 Django App,我们看看文件夹中的新变化:

Django 项目 viedolearn 目录中多出了一个 video 文件夹,里面有6个文件,其中:

  • admin.py:用于设置 Django 自带的强大管理后台;
  • apps.py:声明了这个的 App 信息;
  • models.py:用于定义数据模型(数据库表);
  • tests.py:用于单元测试;
  • views.py:用于定义 App 的视图,也就是业务函数。

这包含了一个 Web 应用的后台管理、数据库定义、逻辑视图,在结合项目的路由映射,就是一个 Django App 最基本的结构。

migrations 文件夹目前是一个空的文件夹,其中会记录应用的数据模型迁移的情况。

创建完 video 应用之后,我们需要使用 manage.py 文件的 migrate 和 makemigrations 命令,创建一些默认的数据库表,命令如下所示:

python manage.py migrate

运行命令,会显示将会对数据库进行很多个表的实例化和迁移,细看一下,基本上是属于认证和后台管理的数据库名。

接着,可以使用 makemigrations 命令来检测项目中数据模型的数据迁移变化,命令如下所示:

python manage.py makemigrations

直接输入这个命令,终端可能会提示没有任何改变完成(No changes detected),结果如下图所示:

面对这种情况,可以在命令后显式地指定具体的应用名,命令如下所示:

python manage.py makemigrations video

但是可能依然不会成功,命令行中提示“video”App 并没有被发现,因为刚刚创建的 App——video 并没有添加到 videolearn 项目的 App 列表中:

怎么添加呢?添加方法还是在 settings.py 文件中,找到INSTALLED_APPS变量,源代码如下所示:

# 本块代码位于:videolearn\videolearn\settings.pyINSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',]

我们将 video 以一个字符串的形式添加到列表最后,代码如下所示:

# 本块代码位于:videolearn\videolearn\settings.pyINSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'video']

添加完成后,再尝试使用 makemigrations 和 migrate 命令,如下所示:

python manage.py makemigrationspython manage.py migrate

结果就会顺利的完成一些数据模型的创建和更改。

创建超级用户

接下来为我们的项目创建一个超级管理员,通过这个超级管理员账户,可以快速地使用 Django 强大的后台功能,对数据模型进行管理,同样使用 manage.py 这个工具,利用它的 createsuperuser 命令来进行创建,命令如下所示:

python manage.py createsuperuser

根据提示输入用户名、邮箱和密码,一个超级用户就创建好了。我们可以运行项目,访问 /admin 路径看看:

结果呈现了一个“Django 管理”的登录表单,这就是 Django 自带的后台管理模块:

使用刚刚创建超级用户的用户名和密码进行登录:

进入了传说中功能强大的 Django 自带后台,但是我们并没有添加数据模型进去,所以里面只有之前通过 magrite 命令对应用生成初始化的认证模型(用户和用户组),略显简陋。

你肯定会好奇,为什么打开/admin,就会呈现出来 Django 的管理后台呢?

为了解决这个疑问,我们打开内层 videolearn 文件夹下的 urls.py 文件,里面的内容如下所示:

# 本块代码位于:videolearn\videolearn\urls.pyfrom django.conf.urls import urlfrom django.contrib import adminurlpatterns = [    url(r'^admin/', admin.site.urls),]

在 urls.py 文件中,其引入了两个模块,url 和 admin,然后定义了一个列表 urlpatterns。url 模块用于匹配解析 url 路径,admin 模块就是 Django 的后台模块,名为 urlpatterns 的列表中的内容则是引导 URL 链接——/admin 显示 Django 后台界面的关键。

其中具体的运行机制,在下一篇 Django 的路由和视图中将详细介绍。

第02课:设置 URL 路由与创建视图函数
第03课:创建网站数据模型
第04课:数据模型使用与填充网站数据
第05课:构建 HTML 页面模板
第06课:完善视图、模板和数据查询
第07课:实现用户注册和登录认证
第08课:在 Ubuntu 上部署 Django

阅读全文: http://gitbook.cn/gitchat/column/5a96694d7a0cbc5fa76d4dac

适合人群: 1、具有一定Python语言基础,有一定的web前端基础,想要深入学习Python Web框架的朋友; 2、学习完“跟着王进老师学开发Python篇”“跟着王进老师学Web前端开发”的朋友; 3、有Django基础,但是想学习企业级项目实战的朋友; 4、喜欢 Django 框架并想深入研究的朋友; 5、有一定的数据库基础   课程目标: 本系列课程是从零基础开始并深入讲解Django,最终学会使用Django框架开发企业级的项目。课程知识点全网最详细,项目实战贴近企业需求。本系列课程除了非常详细的讲解Django框架本身的知识点以外,还讲解了web开发中所需要用到的技术,学完本系列课程后,您将独立做出一个具有后台管理系统,并且前端非常优美实用的网站。   课程内容: 在人工智能大行其道的时代,许多开发者对Python这门编程语言都比较熟悉。但是如何用它实现一个企业级别的项目,可能许多朋友还存在一些困惑。联科教育“跟着王进老师学Python”系列课程是专门针对想要从事Python Web开发的朋友而准备的,并且按照企业需求的标准定制的学习路线。学习路线中包含Python基础和进阶、Web前端、MySQL数据库、Flask和Django框架以及N多个企业真实项目。在学习完本系列中所有的课程后,从前端页面的实现,到后台代码的编写,再到数据库的管理,一人可以搞定一个公司网站的事情,掌握实现全栈开发,让你升职加薪不是梦! 本季课程介绍了Django中ORM模型,使用ORM模型的优势;Django中ORM模型常用的字段,ORM实现数据查询;Django后台管理等。所有应用均通过案例“在线图书商城”完成讲解和演示,完整项目,贯穿全部知识点,边学边练,帮助大家快速掌握知识,了解企业要求。
适合人群: 1、具有一定Python语言基础,有一定的web前端基础,想要深入学习Python Web框架的朋友; 2、学习完“跟着王进老师学开发Python篇”“跟着王进老师学Web前端开发”的朋友; 3、有Django基础,但是想学习企业级项目实战的朋友; 4、喜欢 Django 框架并想深入研究的朋友; 5、有一定的数据库基础 课程目标: 本系列课程是从零基础开始并深入讲解Django,最终学会使用Django框架开发企业级的项目。课程知识点全网最详细,项目实战贴近企业需求。本系列课程除了非常详细的讲解Django框架本身的知识点以外,还讲解了web开发中所需要用到的技术,学完本系列课程后,您将独立做出一个具有后台管理系统,并且前端非常优美实用的网站。对于从事一份Python Web开发相关的工作直轻而易举。 课程内容: 一、融汇贯通 将Python语言和Django基础知识,以实际应用为媒介,有机组织、融汇贯通。让你的理论与实践结合起来,由知道变成会用。使用了大量的Django高级特性和Bootstrap前端框架,展示了真实的项目部署过程。 二、贴近实战 本系列课程为项目实战:超市前端收银系统的开发,项目包含了如下几个模块:系统登录页面、收银模块、管理人员的主界面、收银明细查询。从零开始展示了开发过程。包含了开发前的需求分析、数据库的设计、前端页面的准备、登录模块的实现、收银模块的实现、主界面的动态加载、收银明细的查询。课程具有强的实战性。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页