01django开发博客系统之后端开发

一、新建项目

1. 如何创建一个项目(project)

创建一个项目,实际上就是创建一个Web网站。

命令格式:

django-admin startproject  + 项目名

示例:在home目录下创建一个项目,项目名为django_site

[email protected]:~$ sudo django-admin startproject django_site

创建完毕,当前目录下就会多出一个目录django_site,如图

01django开发博客系统之后端开发

 

2. 运行第一个项目

进入目录django_site,执行启动服务命令即可启动Web服务器。

命令

python manager.py runserver

如图

01django开发博客系统之后端开发

打开虚拟机中的浏览器,地址栏目输入:http://127.0.0.1:8000,或者直接输入:http://localhost:8000,就可以访问到web服务器了。

如图

01django开发博客系统之后端开发

 

3. 准备工作

在windows下新建一个目录,也命名为django_site,通过FTP客户端将服务器上的代码文件下载到windows中,方便在windows下编辑,查看代码,如果有修改,再上传更新文件,编译。

01django开发博客系统之后端开发

需要看个人习惯,有些人喜欢在linux中编辑代码,那就直接在服务器(虚拟机)中进行开发。相对来说,windows下有一些很好的代码编辑、代码查看工具。

使用Notepad++打开windows下的项目代码,方便进行编辑和阅读。

01django开发博客系统之后端开发

 

4. 开发模式

目前,虚拟机就是服务端,如下图:

01django开发博客系统之后端开发

开发完一个网站之后,服务器迁移到云端,也是这种开发模式。

 

二、创建应用

1. 如何创建一个应用(application)

在Django中,一个网站包含很多的功能,每一个功能都可以看成是一个应用。

在项目根目录下执行命令:

python manage.py startapp  + 应用名

示例:创建一个应用,实现博客功能 。

[email protected]:~/django_site$ sudo python manage.py startapp blog

创建结束,当前目录下会多出一个目录blog

如图

01django开发博客系统之后端开发

blog这个应用是基于django_site这个项目创建的。

 

2. Git初始化一个本地仓库

初始化一个本地仓库,便于管理本地代码版本以及跟踪文件的改动。在项目的根目录下执行命令:git init

01django开发博客系统之后端开发

 

3. 重要文件简介

对开发过程中,会经常修改到的一些文件做简单说明。

 

3.1 功能管理目录

功能管理目录的名称和项目名是一样的,且位于当前项目的根目录下。

01django开发博客系统之后端开发

在功能管理目录中,有很多的配置文件,里面的各项配置生效于整个项目,即当前项目的配置文件都在该目录中。

注意以下几个文件和目录

(1)settings.py:里面有项目的初始化配置,这些配置都是可改的,包括:数据库的配置,项目中注册的应用等。

(2)urls.py:URL配置表文件。在URL和应用程序之间建立一种映射关系,用户请求某个URL的时候,Django会根据映射关系,指向某个目标对象。对象可以是某个具体的视图函数,可以是某个应用中的urls.py文件。

(3)wsgi.py:Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是专门为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。

(4)__pycache__:这是一个目录,执行python manage.py runserver之后才生成的。该目录下的文件是python原文件编译后对应的编译文件(xxx.pyc)。在开发的过程中,很少关注这个目录。

 

3.2 APP目录

项目中使用命令创建一个应用之后,在当前目录下自动生成一个子目录,子目录的名称就是应用的名称,该目录称之为APP目录。

APP目录中的文件

01django开发博客系统之后端开发

注意以下几个文件和目录

(1)admin.py:在文件中可以自定义Django管理工具,如:在管理界面能够管理的项目,重新自定义与系统管理有关的类对象,新增管理内容。

(2)apps.py:针对应用的配置,比如设置应用的名称。

(3)migrations:是一个目录,用于存储修改和创建数据库的指令。

(4)models.py:应用的数据模型文件,每个Django应用都有一个模型文件。

(5)tests.py:在该文件中可以自由编写测试代码,来测试所创建的应用。

(6)views.py:里面编写各种函数、类,这些函数或者类用来响应用户的各种请求。所以,里面的函数也称之为“基于函数的视图”,或简称“视图函数”(函数-->视图【反馈到用户】);同理,里面编写的类也称之为“基于类的视图”。

 

4. 网站的配置文件setting.py

配置文件位于功能管理目录下,功能管理目录名和项目名是一样的。

01django开发博客系统之后端开发

该文件中有很多的配置项

01django开发博客系统之后端开发

目前只需要关注下面几个配置项

(1)是否开启调试模式

在开发阶段,需要打开调试模式,如果运行出错,Django会显示详细的报告信息,方便查找原因。

DEBUG = True

(2)服务器的IP配置

当DEBUG设置为True的时候,ALLOWED_HOSTS可设置为空,开发结束,真正部署线上服务器的时候,要设置成服务器的域名。

ALLOWED_HOSTS = []

(3)时区和字符集设置

语言设置成“汉字”:LANGUAGE_CODE = 'zh-hans'

时区设置:TIME_ZONE = 'Asia/Shanghai'

字符集设置:DEFAULT_CHARSET = "utf-8"

(4)APP的安装配置

默认的配置中已经安装了一些应用:

# Application definition

 

INSTALLED_APPS = [

    'django.contrib.admin', #实现后台管理的一个应用

    'django.contrib.auth',  #实现认证的一个应用

    'django.contrib.contenttypes', #用于内容类型的应用

    'django.contrib.sessions', #会话应用

    'django.contrib.messages', #消息应用

    'django.contrib.staticfiles', #管理静态文件的应用

]

在上面,我们仅仅使用命令创建了一个应用,但是还没有把它注册到项目中。创建的APP需要添加到该配置下应用才会生效:

# Application definition

 

INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

         'blog'

]

 

(5)数据库的配置

  配置项:DATABASES

01django开发博客系统之后端开发

Django支持很多的数据库,如:MySQL、Oracle等,默认使用的是SQLite数据库。

配置文件中规定,数据库文件名为db.sqlite3,位于项目根目录下。如果数据模型发生了改变,那么生成数据库的时候,这个文件会被更新。

01django开发博客系统之后端开发

 

5. 编写数据模型类(model.py)

在APP的数据模型文件model.py中编写数据模型类,就是使用python语法去定义一个类。

模型文件:django_site/blog/model.py

01django开发博客系统之后端开发

类代码编写如下

01django开发博客系统之后端开发

注:

(1)类中所定义的每一个属性会对应数据库表中的一个字段

(2)Django中的CharField类型实际上就是字符串类型,这里指定title这个属性的长度最大是300个字符

(3)属性author规定了博客文章和用户之间的关系,一个用户对应多篇文章。

BlogArticles类的数据模型编写好了,接下来要根据数据模型建立数据库表(记得把代码文件通过FTP客户端更新到服务器)。

 

6. 数据迁移

命令

[email protected]:~/django_site$ sudo python manage.py makemigrations

如下图

01django开发博客系统之后端开发

 

7. 创建数据库

命令

[email protected]:~/django_site$ sudo python manage.py migrate

如图

01django开发博客系统之后端开发

这时候,根目录下的数据库文件已经被更新了,这是二进制文件。

01django开发博客系统之后端开发

 

三、编辑后台博客内容

1. 创建管理员账户

命令

python manage.py createsuperuser

注:

(1)后台管理员用户名和邮箱随便写

(2)登陆密码不能太短(至少8位),也不能太简单(比如不能都是数字)。

(3)用户名和密码用于登陆后台管理系统

示例如下图

01django开发博客系统之后端开发

 

2. 登陆后台管理系统

(1)启动服务

命令

python manage.py runserver

如图

01django开发博客系统之后端开发

(2)在虚拟机中登陆后台管理系统

打开虚拟机里面的浏览器,地址栏输入:http://127.0.0.1:8000/admin,在弹出的界面中输入用户名和密码,单击“登陆”按钮即可进入后台管理系统。

01django开发博客系统之后端开发

01django开发博客系统之后端开发

按下Ctrl+C组合键可结束后台管理系统的运行

01django开发博客系统之后端开发

(3)在Windows下登陆后台管理系统

目标是在windows下进行代码的编辑,Linux命令行的输入,对服务器进行模拟访问和设置,所以不应该在虚拟机的浏览器中去访问后台管理系统(在“服务器”中访问“服务器”,有点别扭)。

以宿主机和虚拟机能相互Ping通为前提(虚拟机上网模式设置为NAT),在windows下也能访问到后台管理系统,因为这时候,虚拟机就是一台服务器。

在运行后台管理系统的时候,指定服务器的地址。

命令格式

python manage.py runserver 服务器的IP(虚拟机的IP):通信端口号

如图

01django开发博客系统之后端开发

Windows与虚拟机能相互Ping通,也就意味着,在Windows下,能访问到虚拟机的地址(“服务器”的地址)。

所以,在windows下打开浏览器,地址栏输入:http://192.168.49.128:8000/admin,也能访问到服务端的后台管理系统

如下图

01django开发博客系统之后端开发

01django开发博客系统之后端开发

 

3. 注册数据模型类

前面已经编写好了数据模型类,也生成了对应的数据库文件。接下来,就要把它注册到用户中。

文件:django_site/blog/admin.py

新增代码

from .models import BlogArticles

admin.site.register(BlogArticles)

如图

01django开发博客系统之后端开发

更新文件到服务端,刷新网页,多出了BLOG一栏。

01django开发博客系统之后端开发

 

4. 编辑博客内容

单击“增加”按钮,开始编辑博客内容。

01django开发博客系统之后端开发

内容编辑结束,单击右下角的“保存”按钮。

01django开发博客系统之后端开发

成功编辑一篇博客

01django开发博客系统之后端开发

新增几篇博客,方便开发调试。博客保存之后,数据会被存入数据库中。

 

5. 打开数据库文件

使用SQLitesPy这款数据库管理工具打开数据库文件,可以很清楚地看到数据库文件里数据表的结构。

SQLitesP工具百度云连接如下,免安装,直接解压即可。

链接:https://pan.baidu.com/s/1y1-tNrftsWv5ASc-W-1hSg

提取码:vuqm

把最新的数据库文件从服务端下载到windows下

01django开发博客系统之后端开发

打开数据库文件

File------->Open Datebase---->选中数据库文件db.sqlites------>双击这个数据表(blog_blogarticles)

01django开发博客系统之后端开发

在SQLitesPy中,还支持SQL的增删改查语句,比如:

01django开发博客系统之后端开发

 

6. 丰富数据模型类

为了让博客列表显示页的信息更多样,可以向用户注册更丰富的数据模型。

(1)编写数据模型类

在django_site/blog/admin.py中新增代码

class BlogArticlesAdmin(admin.ModelAdmin):

         list_display = ("title", "author", "publish")

         list_filter = ("publish", "author")

         search_fields = ("title", "body")

         raw_id_fields = ("author",)

         date_hierarchy = "publish"

         ordering = ['publish', 'author']

如下图

01django开发博客系统之后端开发

 

更新代码文件到服务器,刷新浏览器,显示的效果如下:

01django开发博客系统之后端开发

 

四、Django_Web网站开发基础知识

1. 关于HTTP和HTTPS

1.1 什么是HTTP

HTTP:Hyper Text Transfer Protocal,中文翻译为超文本传输协议,是客户端(比如浏览器)和服务器(比如网站)之间数据传输协议。首先,服务器监听端口,HTTP服务器默认监听的是80端口;当有客户端发起请求,建立到服务器的TCP连接之后,服务器收到请求,就向客户端返回两项信息:

(1)状态信息,这是固定的一串数据“HTTP/1.1 200”

(2)客户端请求的具体数据内容

 

 请求(request)是客户端的行为,响应(response)是服务器的行为。HTTP/1.1协议版本规定了8种请求方式:GET、 POST 、……..,Web服务器常用的两种请求方式是GET和POST。

(1)GET:向指定的服务器发出请求,读取信息并显示在网页上。

(2)POST:向指定的服务器提交数据,请求服务器处理这些数据,比如上传文件、提交登陆信息的表单(服务器要验证登录名和密码是否合法,是否有注册)。

1.2 什么是HTTPS

HTTP:Hyper Text Transfer Protocal Secure,安全性比HTTP协议高。

1.3 两者有何区别

(1)默认的端口不同:HTTP默认的端口是80,HTTPS默认的端口是443。

(2)安全性不同:HTTP以明文的方式进行数据的传输,抓包工具可以分析出内容;而HTTPS则以加密的方式传送信息,安全性很高。

 

2. 什么是URL

URL:Uniform Resource Locator,中文译为“统一资源定位符”。客户端访问服务端,实际上就是要访问服务器上的哪一个位置(资源),因为服务器上有很多资源,访问的时候就需要明确指定,这里的资源是一个很泛的概念,可以是地址、端口、文件、某项数据等等。

2.1 URL的格式

格式:协议类型://服务器地址:端口号/路径/文件名

(1)协议类型有两种:HTTP和 HTTPS

(2)服务器地址:可以是域名

(3)端口号:如果是默认的80端口,可以不用写,否则需要写上端口

(4)路径:路径之间用 / 隔开,对于GET请求,可以有多个参数,参数以?开头,不同参数之间用&隔开,参数直接用=赋值。

 

3. ORM模型

ORM:Object-Relational Mapping ,中文译为“对象关系映射”。ORM模型是关系型数据库与业务实体对象之间的一种映射,在操作业务对象的时候,不需要直接使用SQL语句,简单地操作对象的属性和方法即可。

Django的数据模型层使用的是ORM,最大的好处在于数据库查询语法简单,ORM本质上就是python的对象,使用python语法进行操作即可(避免了复杂的SQL语句)。

Django的ORM表现方式就是编写数据模型类!实际上就是使用python的语法编写类。这些类一般写在APP目录下的model.py文件中,当然也可以写在其他文件中,使用的时候,能正确导出模块即可。

3.1 数据模型类的父类

每个数据模型类都是django.db.models. Model的子类,即新的数据模型类的父类是django.db.models. Model。Django自动生成的model.py文件的最初的结构如下

from django.db import models

 

# Create your models here.

 

 

在构造自己模型类的时候,就要遵循这条规则。

from django.db import models

 

# Create your models here.

class my_class(models.Model):   #一定要继承于django.db.models. Model

    xxxxxxxxxxxxxxxxxxxx

 

例:编写简单的博客数据模型类

model.py

from django.db import models

from django.utils import timezone

from django.contrib.auth.models import User

 

# Create your models here.

class BlogArticles(models.Model):

         title = models.CharField(max_length=300)

         author = models.ForeignKey(User, related_name='blog_posts')

         body = models.TextField()

         publish = models.DateTimeField(default=timezone.now)

 

         class Meta:

                   ordering = ("-publish",)

 

         def __str__(self):

                   return self.title

3.2 数据库表名称规则

数据模型类编写完毕,进行数据迁移操作之后,就能创建数据库(生成/更新数据库文件)。

数据迁移操作命令:

python manage.py makemigrations

 

python manage.py migrate

使用数据库管理工具SQLitesPy打开数据文件,数据库文件是由数据表来构成,在Django里面,数据表的规则是:应用名(小写字母)_数据模型类(小写字母)。

 比如,在blog这个应用中,编写了一个数据模型类,类名为BlogArticles,则数据库文件中对应的表名就是:blog_blogarticles

01django开发博客系统之后端开发

如果要修改数据表的结构,只需要修改数据模型类。数据模型类每修改一次,都要进行一次数据迁移操作。