写点什么

Django + DebugToolbar 构建全栈 WEB 开发

  • 2019-09-15
  • 本文字数:2305 字

    阅读完需:约 8 分钟

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 可以替换成你的服务器):



安装 Django


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


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



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


创建一个 Django 的项目

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


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


运行你的第一个 Django 项目

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


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


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



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


启动 WEB 服务器


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



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



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


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



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


修改settings.py


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



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


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


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

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



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



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


引入 django-debug-toolbar


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


修改 INSTALLED_APPS:



修改 MIDDLEWARE:



新增 INTERNAL_IPS 选项


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



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



修改urls.py


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



访问看看效果


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


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


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


本文转载自公众号滴滴技术(ID:didi_tech)。


原文链接:


https://mp.weixin.qq.com/s/PKksPb28PpILaqA0Ycg1Yw


2019-09-15 23:521123

评论

发布
暂无评论
发现更多内容

【Vue2.x 源码学习】第二十篇 - 使用真实节点替换原始节点

Brave

源码 vue2 6月日更

电商系统微服务

贯通

架构实战营

云图说|初识云数据库GaussDB(for Cassandra)

华为云开发者联盟

开源 Cassandra 云数据库 GaussDB(for Cassandra) 宽列数据库

MySQL 页完全指南——浅入深出页的原理

leonsh

MySQL 数据库 innodb

浪潮云说 | 开源新势力—云溪数据库ZNBase

云计算

模块六:课后作业

菲尼克斯

架构实战营

架构实战营 模块六课后作业

iProcess

架构实战营

HarmonyOS学习路之开发篇——Data Ability

爱吃土豆丝的打工人

HarmonyOS Ability 鸿蒙 Ability Data Ability

EasyRecovery,拯救那些遗失的文件

淋雨

文件恢复 Easyrecovery破解 数据恢复软件 免费数据恢复

共享存储设备,如何实现差异化IO分配策略

怀瑾握瑜

云计算 负载均衡 存储 数据中心 SSD

从工单到需求管理,企业如何快速响应客户反馈?

万事ONES

项目管理 需求管理 需求 ONES

鸿蒙究竟是什么?

Nydia

架构实战营 模块六作业

Dylan

架构实战营

34岁安卓开发大叔感慨,帮你突破瓶颈

欢喜学安卓

android 程序员 面试 移动开发

架構實戰營 - 模塊 6 作業

Frank Yang

架构实战营

Linux之mkdir命令

入门小站

Linux

在线crontab表达式执行时间计算工具

入门小站

工具分享

架构实战营模块 6

阿体

从 Flutter 和前端角度出发,聊聊单线程模型下如何保证 UI 流畅性

魅影

大前端 事件驱动 Event iOS 知识体系

密码学系列之:blowfish对称密钥分组算法

程序那些事

加密解密 密码学 程序那些事 密码学和算法

第6模块作业

高亮

架构训练营

Flink集成hive测试及生产规划

一弦思华年

大数据 hive 实时数仓 数仓 flink 执行

活久见!低访问量竟然也能导致系统问题

三石

mycat

【Flutter 专题】128 图解 ColorTween 颜色补间动画 & ButtonBar 按钮容器

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6月日更

Nginx简单属性和使用总结

赵镇

Cookie常见面试题

悟空聊架构

缓存 面试 Cookie 6月日更

顶级程序员都是如何诞生的?

Nydia

话题讨论

不动如山,表备份硬核技术:物理细粒度备份恢复

华为云开发者联盟

集群 数仓 Roach 物理细粒度 备份恢复

Python——双向队列 (deque)

在即

6月日更

推荐 3 款超好用的 Docker 图形化管理工具

学神来啦

Docker Linux 程序员 分布式 运维

34岁Android开发大叔感慨,已拿offer附真题解析

欢喜学安卓

android 程序员 面试 移动开发

Django + DebugToolbar构建全栈WEB开发_文化 & 方法_金堤_InfoQ精选文章