01django开发博客系统之后端开发
一、新建项目
1. 如何创建一个项目(project)
创建一个项目,实际上就是创建一个Web网站。
命令格式:
django-admin startproject + 项目名 |
示例:在home目录下创建一个项目,项目名为django_site
[email protected]:~$ sudo django-admin startproject django_site |
创建完毕,当前目录下就会多出一个目录django_site,如图
2. 运行第一个项目
进入目录django_site,执行启动服务命令即可启动Web服务器。
命令
python manager.py runserver |
如图
打开虚拟机中的浏览器,地址栏目输入:http://127.0.0.1:8000,或者直接输入:http://localhost:8000,就可以访问到web服务器了。
如图
3. 准备工作
在windows下新建一个目录,也命名为django_site,通过FTP客户端将服务器上的代码文件下载到windows中,方便在windows下编辑,查看代码,如果有修改,再上传更新文件,编译。
需要看个人习惯,有些人喜欢在linux中编辑代码,那就直接在服务器(虚拟机)中进行开发。相对来说,windows下有一些很好的代码编辑、代码查看工具。
使用Notepad++打开windows下的项目代码,方便进行编辑和阅读。
4. 开发模式
目前,虚拟机就是服务端,如下图:
开发完一个网站之后,服务器迁移到云端,也是这种开发模式。
二、创建应用
1. 如何创建一个应用(application)
在Django中,一个网站包含很多的功能,每一个功能都可以看成是一个应用。
在项目根目录下执行命令:
python manage.py startapp + 应用名 |
示例:创建一个应用,实现博客功能 。
[email protected]:~/django_site$ sudo python manage.py startapp blog |
创建结束,当前目录下会多出一个目录blog
如图
blog这个应用是基于django_site这个项目创建的。
2. Git初始化一个本地仓库
初始化一个本地仓库,便于管理本地代码版本以及跟踪文件的改动。在项目的根目录下执行命令:git init
3. 重要文件简介
对开发过程中,会经常修改到的一些文件做简单说明。
3.1 功能管理目录
功能管理目录的名称和项目名是一样的,且位于当前项目的根目录下。
在功能管理目录中,有很多的配置文件,里面的各项配置生效于整个项目,即当前项目的配置文件都在该目录中。
注意以下几个文件和目录
(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目录中的文件
注意以下几个文件和目录
(1)admin.py:在文件中可以自定义Django管理工具,如:在管理界面能够管理的项目,重新自定义与系统管理有关的类对象,新增管理内容。
(2)apps.py:针对应用的配置,比如设置应用的名称。
(3)migrations:是一个目录,用于存储修改和创建数据库的指令。
(4)models.py:应用的数据模型文件,每个Django应用都有一个模型文件。
(5)tests.py:在该文件中可以自由编写测试代码,来测试所创建的应用。
(6)views.py:里面编写各种函数、类,这些函数或者类用来响应用户的各种请求。所以,里面的函数也称之为“基于函数的视图”,或简称“视图函数”(函数-->视图【反馈到用户】);同理,里面编写的类也称之为“基于类的视图”。
4. 网站的配置文件setting.py
配置文件位于功能管理目录下,功能管理目录名和项目名是一样的。
该文件中有很多的配置项
目前只需要关注下面几个配置项
(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
Django支持很多的数据库,如:MySQL、Oracle等,默认使用的是SQLite数据库。
配置文件中规定,数据库文件名为db.sqlite3,位于项目根目录下。如果数据模型发生了改变,那么生成数据库的时候,这个文件会被更新。
5. 编写数据模型类(model.py)
在APP的数据模型文件model.py中编写数据模型类,就是使用python语法去定义一个类。
模型文件:django_site/blog/model.py
类代码编写如下
注:
(1)类中所定义的每一个属性会对应数据库表中的一个字段
(2)Django中的CharField类型实际上就是字符串类型,这里指定title这个属性的长度最大是300个字符
(3)属性author规定了博客文章和用户之间的关系,一个用户对应多篇文章。
BlogArticles类的数据模型编写好了,接下来要根据数据模型建立数据库表(记得把代码文件通过FTP客户端更新到服务器)。
6. 数据迁移
命令
[email protected]:~/django_site$ sudo python manage.py makemigrations |
如下图
7. 创建数据库
命令
[email protected]:~/django_site$ sudo python manage.py migrate |
如图
这时候,根目录下的数据库文件已经被更新了,这是二进制文件。
三、编辑后台博客内容
1. 创建管理员账户
命令
python manage.py createsuperuser |
注:
(1)后台管理员用户名和邮箱随便写
(2)登陆密码不能太短(至少8位),也不能太简单(比如不能都是数字)。
(3)用户名和密码用于登陆后台管理系统
示例如下图
2. 登陆后台管理系统
(1)启动服务
命令
python manage.py runserver |
如图
(2)在虚拟机中登陆后台管理系统
打开虚拟机里面的浏览器,地址栏输入:http://127.0.0.1:8000/admin,在弹出的界面中输入用户名和密码,单击“登陆”按钮即可进入后台管理系统。
按下Ctrl+C组合键可结束后台管理系统的运行
(3)在Windows下登陆后台管理系统
目标是在windows下进行代码的编辑,Linux命令行的输入,对服务器进行模拟访问和设置,所以不应该在虚拟机的浏览器中去访问后台管理系统(在“服务器”中访问“服务器”,有点别扭)。
以宿主机和虚拟机能相互Ping通为前提(虚拟机上网模式设置为NAT),在windows下也能访问到后台管理系统,因为这时候,虚拟机就是一台服务器。
在运行后台管理系统的时候,指定服务器的地址。
命令格式
python manage.py runserver 服务器的IP(虚拟机的IP):通信端口号 |
如图
Windows与虚拟机能相互Ping通,也就意味着,在Windows下,能访问到虚拟机的地址(“服务器”的地址)。
所以,在windows下打开浏览器,地址栏输入:http://192.168.49.128:8000/admin,也能访问到服务端的后台管理系统
如下图
3. 注册数据模型类
前面已经编写好了数据模型类,也生成了对应的数据库文件。接下来,就要把它注册到用户中。
文件:django_site/blog/admin.py
新增代码
from .models import BlogArticles admin.site.register(BlogArticles) |
如图
更新文件到服务端,刷新网页,多出了BLOG一栏。
4. 编辑博客内容
单击“增加”按钮,开始编辑博客内容。
内容编辑结束,单击右下角的“保存”按钮。
成功编辑一篇博客
新增几篇博客,方便开发调试。博客保存之后,数据会被存入数据库中。
5. 打开数据库文件
使用SQLitesPy这款数据库管理工具打开数据库文件,可以很清楚地看到数据库文件里数据表的结构。
SQLitesP工具百度云连接如下,免安装,直接解压即可。
链接:https://pan.baidu.com/s/1y1-tNrftsWv5ASc-W-1hSg 提取码:vuqm |
把最新的数据库文件从服务端下载到windows下
打开数据库文件
File------->Open Datebase---->选中数据库文件db.sqlites------>双击这个数据表(blog_blogarticles)
在SQLitesPy中,还支持SQL的增删改查语句,比如:
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'] |
如下图
更新代码文件到服务器,刷新浏览器,显示的效果如下:
四、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
如果要修改数据表的结构,只需要修改数据模型类。数据模型类每修改一次,都要进行一次数据迁移操作。