Django + DebugToolbar构建全栈WEB开发

Django是什么

Django是Python最流行的WEB开发框架,很多公司都用Django来做项目,内置的ORM模型非常方便和易用,是一个全能的WEB开发框架。

Django有很多优秀的特性:

Python3完整支持的框架

支持Sqlite/MySQL/PostgreSQL等数据库,强大的migrate机制,修改对数据库字段变更非常便利,能自动生成变更的SQL语句,并且做规则检查

灵活的模板引擎,通过内置的Filter与Tag做模板,模板能继承,可以方便的组织模板的框架

安全的框架,不论是CSRF,还是XSS或者SQL注入,默认的安全选项等级比较高,给很多初学者很好的安全保护

完整的单元测试支持,能模拟Cookie、Session等场景做集成测试,极大方便了前后端分离的项目的集成测试

Debug功能强大,代码保存后就立即生效, 异常错误后的堆栈信息甚至能看到每个调用帧的局部变量,极大的方便了开发者

非常灵活的扩展,所以产生了很多优秀的扩展

Django-Debug-Toolbar

基于Django的灵活扩展,这次推荐一个非常实用的扩展:django-debug-toolbar。 Django内置的Debug特性,只有在发生异常后能查看异常信息,但是开发过程当中,我们想知道:

数据库调研时间、次数是多少

模板渲染的时间是多久

静态文件访问情况

通过django-debug-toolbar极大的提升了开发效率,这个教程教会你如何安装在Django中使用django-debug-toolbar。

在云服务器上安装Django的开发环境

本教程基于Ubuntu 16.04.4 LTS与Python3,开始这个教程前,需要到滴滴云购买一个Ubuntu 16.04.4 LTS的云服务器,由于需要提供WEB服务,所以需要买一个带公网IP的云服务器。滴滴云的镜像内置了很多开发工具,比如python3、sysstat、iotop等常见工具,不需要额外再安装其他工具,非常顺手。

滴滴云的云服务器默认的登录名是dc2-user, 并不是root登录,如果需要root操作的指令,需要通过sudo操作才能进行,这样确保我们日常的操作不会用root这个身份来管理服务器,避免危险的误操作。 如果你习惯用root管理你的服务器,强烈建议改掉这个坏习惯,用sudo吧

通过dc2-user登录服务器

尽量选择用ssh公钥登录服务器,避免输入密码,并且关闭服务器的密码登录,可以极大的提升服务器的安全性,毕竟ssh公钥证书的安全等级比密码安全等级高。

登录后可以看到服务器的信息(YOUR_SERVER_IP可以替换成你的服务器):

[jinti@jintis-MacBook-Pro:~] $ ssh dc2-user@YOUR_SERVER_IP

dc2-user@10-255-20-246:~$ uname -a

Linux 10-255-20-246 4.4.0-127-generic #153-Ubuntu SMP Sat May 19 10:58:46 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

dc2-user@10-255-20-246:~$ cat /etc/lsb-release

DISTRIB_ID=Ubuntu

DISTRIB_RELEASE=16.04

DISTRIB_CODENAME=xenial

DISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS"

1

2

3

4

5

6

7

8

9

10

11

安装Django

Python推荐的包管理工具是pip,类似Ubuntu里面的apt或者CentOS的YUM,通过pip能方便的安装常见的安装包。

pip默认的源是在海外,滴滴云提供了一个默认的pip源,避免访问海外的仓库,下载速度非常的快。所以我们需要先配置一下pip源。

mkdir -p ~/.pip && cat > ~/.pip/pip.conf << EOF

[global]

index-url = http://mirrors.intra.didiyun.com/pip/simple/

trusted-host = mirrors.intra.didiyun.com

EOF

1

2

3

4

5

6

Django默认不支持Python2.x,所以我们需要用pip3来安装django 和 django-debug-toolbar。

dc2-user@10-255-20-246:~$ sudo apt-get install python3-pip

dc2-user@10-255-20-246:~$ sudo pip3 install django django-debug-toolbar

1

2

3

创建一个Django的项目

安装好Django后,可以通过django-admin来维护和管理项目。首先,我们创建一个Django项目 djsite。

创建第一个项目,查看生成的目录结构:

dc2-user@10-255-20-246:~$ django-admin startproject djsite

dc2-user@10-255-20-246:~$ tree djsite/

djsite/

├── djsite

│ ├── __init__.py

│ ├── settings.py

│ ├── urls.py

│ └── wsgi.py

└── manage.py

1 directory, 5 files

1

2

3

4

5

6

7

8

9

10

11

运行你的第一个Django项目

生成的djite目录下有manage.py,通过这个文件来做项目的常规操作,比如创建超级管理员、启动服务器。

默认创建的项目的数据库引擎是sqlite,创建后的项目需要初始化数据库,确保django内置的数据库版本管理、session等特性能正常使用。

通过manange.py migrate来初始化数据库:

dc2-user@10-255-20-246:~/djsite$ python3 manage.py migrate

Operations to perform:

Apply all migrations: admin, auth, contenttypes, sessions

Running migrations:

Applying contenttypes.0001_initial... OK

...

Applying sessions.0001_initial... OK

dc2-user@10-255-20-246:~/djsite$

1

2

3

4

5

6

7

8

这样就完成了数据库的初始化工作。

启动Web服务器

通过manange.py runserver来启动服务器,默认服务器会运行在127.0.0.1:8000,只能本机访问。

dc2-user@10-255-20-246:~/djsite$ python3 manage.py runserver

Performing system checks...

System check identified no issues (0 silenced).

November 01, 2018 - 09:11:54

Django version 2.1.2, using settings 'djsite.settings'

Starting development server at http://127.0.0.1:8000/

Quit the server with CONTROL-C.

1

2

3

4

5

6

7

8

你可以通过curl看一下Web服务器是否正常运行:

dc2-user@10-255-20-246:~$ curl http://127.0.0.1:8000/

<!doctype html>

<html>

<head>

<meta charset="utf-8">

<title>Django: the Web framework for perfectionists with deadlines.</title>

<meta name="viewport" content="width=device-width, initial-scale=1">

...

1

2

3

4

5

6

7

8

9

10

通过公网访问你的云服务器

如果我们需要公网访问,那么就需要让服务器运行在非本机的80端口,但是如果运行在80端口,就需要root权限,我们通过sudo 就可以了。

dc2-user@10-255-20-246:~/djsite$ sudo python3 manage.py runserver 0.0.0.0:80

...

Django version 2.1.2, using settings 'djsite.settings'

Starting development server at http://0.0.0.0:80/

Quit the server with CONTROL-C.

1

2

3

4

5

通过公网IP就可以直接访问你的WEB服务器。

修改settings.py

其实这时候如果你直接访问服务器的80端口,会遇到提醒(YOUR_HOST_IP是你的服务器IP):

DisallowedHost at /

Invalid HTTP_HOST header: 'YOUR_HOST_IP'. You may need to add 'YOUR_HOST_IP' to ALLOWED_HOSTS.

1

2

这时候就体现了Django的默认安全设置很体贴了,避免犯初级错误。

因为你当前的服务器是在Debug模式,只能通过127.0.0.1的方式来访问,如果你要通过公网访问,有两张方式:

方法一:修改settings.py的Debug = True为Debug = False,关闭Debug模式

方法二:保留Debug模式,把你的公网IP加入到ALLOWED_HOSTS中

ALLOWED_HOSTS = ['YOUR_HOST_IP']

1

这时候在重新启动服务就可以正常访问了。

dc2-user@10-255-20-246:~/djsite$ sudo python3 manage.py runserver 0.0.0.0:80

1

Django项目最大的特点是配置文件是Python,所以可以把配置当成代码来使用。

引入django-debug-toolbar

要在项目中使用django-debug-toolbar,最简单的方式就是修改settings.py

修改INSTALLED_APPS:

INSTALLED_APPS = [

'django.contrib.admin',

#...

'django.contrib.staticfiles',

#确保staticfiles的顺序比debug_toolbar靠前

'debug_toolbar',

]

1

2

3

4

5

6

7

8

9

修改MIDDLEWARE:

MIDDLEWARE = [

# ...

'debug_toolbar.middleware.DebugToolbarMiddleware',

# ...

]

1

2

3

4

5

6

新增INTERNAL_IPS选项

通常情况下,django-debug-toolbar只会对开发者提供展示,如果你是本机开发,只需要允许127.0.0.1访问就可以,本次是在服务器上访问,你可以全部放开访问,也可以通过访问ip.cn来得到你的出口IP地址,把你的出口IP地址加入到INTERNAL_IPS中。

[jinti@jintis-MBP:~] $ curl ip.cn

当前 IP: 183.128.190.90 来自: 浙江省杭州市 电信

1

2

在这个教程中,把我自己家里的公网ip183.128.190.90写入到INTERNAL_IPS中。

INTERNAL_IPS = ['183.128.190.90']

1

修改urls.py

django-debug-toolbar会在每一个html的请求中注入一段js,我们需要修改一下urls.py,确保这些js资源能正常访问。

# ...

# 需要访问项目的settings信息。并且用到了 include指令

#

from django.conf import settings

from django.urls import path, include

urlpatterns = [

''

path('admin/', admin.site.urls),

]

# ...

# 加入这段代码到urls.py的尾部

if settings.DEBUG:

import debug_toolbar

urlpatterns = [

path('__debug__/', debug_toolbar.urls),

] + urlpatterns

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

访问看看效果

这是可以通过访问http://YOUR_HOST_IP/admin/,测试django-debug-toolbar是否正常工作。 注: 需要注意我的云服务器是通过80端口开放服务

如果正常工作后,会在页面的右上角有个浮动的工具栏,可以看SQL、缓存、模板的运行时间,特别是SQL,你会发现访问一个页面,默认会访问很多数据库访问。

也可以通过看Request,分析你的请求携带的信息,帮助你快速分析数据是否提交正确。

Django + DebugToolbar构建全栈WEB开发

相关推荐