Django 简介

基本介绍

Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。

使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务 Django 本身基于 MVC 模型,即 Model(模型)+ View(视图)+ Controller(控制器)设计模式,MVC 模式使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。

  • 低耦合
  • 开发快捷
  • 部署方便
  • 可重用性高
  • 维护成本低

Python 加 Django 是快速开发、设计、部署网站的最佳组合。

特点

  • 强大的数据库功能
  • 自带强大的后台功能
  • 优雅的网址

MVC 与 MTV模型

MVC 模型

MVC 模式(Model–view–controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

MVC 以一种插件式的、松耦合的方式连接在一起。

  • 模型(M)- 编写程序应有的功能,负责业务对象与数据库的映射(ORM)。
  • 视图(V)- 图形界面,负责与用户的交互(页面)。
  • 控制器(C)- 负责转发请求,对请求进行处理。

简易图:

用户操作流程图:

MTV 模型

Django 的 MTV 模式本质上和 MVC 是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django 的 MTV 分别是指:

  • M 表示模型(Model):编写程序应有的功能,负责业务对象与数据库的映射(ORM)。
  • T 表示模板 (Template):负责如何把页面(html)展示给用户。
  • V 表示视图(View):负责业务逻辑,并在适当时候调用 Model和 Template。

除了以上三层之外,还需要一个 URL 分发器,它的作用是将一个个 URL 的页面请求分发给不同的 View 处理,View 再调用相应的 Model 和 Template,MTV 的响应模式如下所示:

简易图:

img

用户操作流程图:

img

解析:

用户通过浏览器向我们的服务器发起一个请求(request),这个请求会去访问视图函数:

  • a.如果不涉及到数据调用,那么这个时候视图函数直接返回一个模板也就是一个网页给用户。
  • b.如果涉及到数据调用,那么视图函数调用模型,模型去数据库查找数据,然后逐级返回。

视图函数把返回的数据填充到模板中空格中,最后返回网页给用户。

Django 安装

在安装 Django 前,系统需要已经安装了Python的开发环境。接下来我们来具体看下不同系统下Django的安装。

Window 下安装 Django

如果你还未安装Python环境需要先下载Python安装包。

1、Python 下载地址:https://www.python.org/downloads/

2、Django 下载地址:https://www.djangoproject.com/download/

注意:目前 Django 2.2.x 以上版本已经完全兼容 Python 3.x。

Python 安装(已安装的可跳过)

安装 Python 你只需要下载 python-x.x.x.msi 文件,然后一直点击 “Next” 按钮即可。

img

Django 安装

使用pip安装Django即可,加-i参数使用阿里云的pipy源,速度快.
命令:

1
pip install Django==2.2 -i https://mirrors.aliyun.com/pypi/simple/

检查是否安装成功

输入以下命令进行检查:

1
2
3
4
>>> import django
>>> django.get_version()
'2.2'
>>>

如果输出了Django的版本号说明安装正确。

Django 创建项目

本章我们将介绍Django 管理工具及如何使用 Django 来创建项目,第一个项目我们以 HelloWorld 来命令项目。

测试版本说明:

  • Python 3.6.8
  • Django 2.2

Django 管理工具

安装 Django 之后,您现在应该已经有了可用的管理工具 django-admin.py,Windows 如果没有配置环境变量可以用 django-admin。

我们可以使用 django-admin.py 来创建一个项目:
我们可以来看下django-admin 的命令介绍:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

Type 'django-admin help <subcommand>' for help on a specific subcommand.

Available subcommands:

[django]
check
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
makemigrations
migrate
runserver
sendtestemail
shell
showmigrations
sqlflush
sqlmigrate
sqlsequencereset
squashmigrations
startapp
startproject
test
testserver

Django 创建项目

使用 django-admin 来创建 Hello 项目:

django-admin startproject Hello

使用tree /F来查看目录结构:

1
2
3
4
5
6
7
8
9
$ tree /F
D:.
manage.py

└─Hello
settings.py
urls.py
wsgi.py
__init__.py

目录说明:

  • HelloWorld: 项目的容器。
  • manage.py: 一个实用的命令行工具,可让你以各种方式与该 Django 项目进行交互。
  • HelloWorld/init.py: 一个空文件,告诉 Python 该目录是一个 Python 包。
  • HelloWorld/settings.py: 该 Django 项目的设置/配置。
  • HelloWorld/urls.py: 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站”目录”。
  • HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。

接下来我们进入 Hello 目录输入以下命令,启动服务器:

py -3 manage.py runserver 0.0.0.0:8000

0.0.0.0 让其它电脑可连接到开发服务器,8000 为端口号。如果不说明,那么端口号默认为 8000。
在浏览器输入你服务器的 ip(这里我们输入本机 IP 地址: 127.0.0.1:8000) 及端口号,如果正常启动,输出结果如下:

Django 创建应用

使用py -3 manage.py startapp App创建一个应用,
目录结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
D:\Users\Administrator\Desktop\django\Hello>tree App /F
卷 软件 的文件夹 PATH 列表
卷序列号为 2901-4EB1
D:\USERS\ADMINISTRATOR\DESKTOP\DJANGO\HELLO\APP
admin.py
apps.py
models.py
tests.py
views.py
__init__.py

└─migrations
__init__.py

Django 项目配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
BASE_DIR	#项目路径
SECRET_KEY #签名key
DEBUG #调试模式
ALLOWED_HOSTS #允许访问列表 ALLOWED_HOSTS = ['*'] #允许所有访问
INSTALLED_APPS #安装应用 自己创建的应用需要加入到该列表,应用名即可
MIDDLEWARE #中间件
ROOT_URLCONF #根路由 Django中各个应用有个路由
TEMPLATES #模板配置
BACKEND #模板引擎
DIRS #模板路径
WSGI_APPLICATION #项目入口
DATABASES #数据库配置
AUTH_PASSWORD_VALIDATORS #访问验证
LANGUAGE_CODE = 'zh-hans' #简体中文语言
TIME_ZONE = 'Asia/Shanghai' #上海时区
USE_TZ = False #不适用国际标准时间
STATIC_URL #静态资源请求路径

设置后继续runserver,默认界面变成中文显示。

自定义主页

修改urls.py文件,在urlpatterns列表里增加path('',views.index,name='index'),在views.py定义index函数:

1
2
3
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello World")

pycharm创建项目

File=>New project=>Django=>配置项目路径=>配置Python路径=>配置模板=>配置应用名称=>create

Django 路由

创建子路由

Hello目录下的路由是根路由,每个应用都可以有自己的路由,应用路由互相不影响。

在应用目录新建urls.py文件,写入:

1
2
3
4
5
6
from django.urls import path #导入path模块
from App import views #导入应用views文件

urlpatterns = [
path('home/',views.home,name='home')
]

在views.py里定义函数:

1
2
3
from django.http import HttpResponse
def home(request):
return HttpResponse('Home')

在根路由列表里包含子路由列表:

1
2
from django.urls import path, include
path('',include("App.urls"))

pycharm技巧:选中views按Alt+Enter键可以导入快速导入模块,选中home可以自动生成home函数。

Django 模板和模型

设置模型路径

在Hello目录下载新建templates文件夹,用来存储模板,修改settings.py的TEMPLATES列表下的DIRS值为[os.path.join(BASE_DIR, ‘templates’)]。

新建模型

在templates文件夹中新建index.html文件:

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html lang="zh_cn">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
</head>
<body>
Hello, {{ name }}
</body>
</html>

注意:模板文件中不能出现中文

使用模板

render是Django提供的一个渲染Html的模块
request是一个固定参数, 没什么好讲的
index.html是模板文件
context是要传入文件中用于渲染呈现的数据, 默认是字典格式

1
2
3
4
5
6
7
8
9
10
from django.http import HttpResponse
from django.shortcuts import render

# Create your views here.
def home(request):
context = {
'title':'Django',
'name':'china'
}
return render(request,"index.html",context=context)

连接sqllite3数据库

如果pycharm是专业版,点击最右边的database选项,在弹出的界面选择data source,找到SQLlite数据库,按照下图配置即可。

新建模型

创建User类,继承models.Model属性,创建UserName和PassWord列名,并指定表名。

1
2
3
4
5
6
7
8
9
from django.db import models

# Create your models here.
class User(models.Model):
UserName = models.CharField(max_length=10)
PassWord = models.CharField(max_length=128)

class Meta:
db_table = 'Users' #指定表名

使用下面命令更新models并创建数据库:

1
2
py -3 manage.py makemigrations	#让 Django 知道我们在我们的模型有一些变更
py -3 manage.py migrate ## 创建表结构

完成后Django会自动创建表,并插入列名,ID列名自动增加并设置为主键。

数据库加入数据

选中database后双击User数据库,点击上面的+号,编辑你要加入的内容,点击>>展开,点击有DB的按钮提交到数据库即可。

反向生成模型

反向生成模型是根据数据库列名来生成模型,Django给我提供了这个功能,只需要使用:
py -3 manage.py inspectdb Users > App/Users.py
生成Users表的模型保存到App/Users.py,如果忽略Users,当前连接的数据所有表Model

遍历数据库用户

在templates文件夹创建user_list.html文件,写入:

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html lang="zh_cn">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
</head>
<body>
<h3>{{ title }}</h3>
{% for user in users %}
<li>{{ user.UserName }}</li>
{% endfor %}
</body>
</html>

在App路由列表”urls.py”中增加path('list/',views.user_list,name='user_list')

在views.py中添加内容:

1
2
3
4
5
6
7
def user_list(request):
users = User.objects.all()
context = {
'title':'用户列表',
'users':users,
}
return render(request,"user_list.html",context=context)

系列文章

Django基础学习:https://www.xpctf.cn/posts/24c5/
Django晋级学习:https://www.xpctf.cn/posts/2f99/
Django模型学习:https://www.xpctf.cn/posts/d0b4/
Django会话学习:https://www.xpctf.cn/posts/7490/
Django Form学习:正在写