把握行业变革关键节点,12 月 19 日 - 20 日,AICon北京站即将重磅启幕! 了解详情
写点什么

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:521257

评论

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

从寻人到航天,科技与公益的下一个交汇点正在“星辰”中诞生

脑极体

Feed流系统重构-架构篇

勇哥java实战分享

架构 RocketMQ 分库分表 ShardingJDBC redisson

CG行业云渲染服务的演进之路

华为云开发者联盟

公有云 CG 渲染 云渲染 影视动画

详解RS232、RS485、RS422、串口和握手

不脱发的程序猿

串口 通信总线 RS232、RS485、RS422 握手通信

小傅哥,一个有“副业”的码农!

小傅哥

Java 小傅哥 技术成长 码农副业

腾讯云实名认证流程

三掌柜

5月日更

记一次与写作朋友的线下沙龙

架构精进之路

技术交流 杂记 5月日更

字节、美团等客户与华为联合创新DCI智能控制器,共筑互联网基础设施新生态

强化基于位置的4种营销策略

郑州埃文科技

IP 营销 ISP

Cilium 1.10 重磅发布!】支持 Wireguard, BGP, Egress IP 网关, XDP 负载均衡, 阿里云集成

公众号:云原生Serverless

云原生 cilium cni

屏幕共享的实现与应用

anyRTC开发者

音视频 WebRTC RTC sdk

全新F1洞察精彩亮相,帮你理解赛道上的瞬间决定!

亚马逊云科技 (Amazon Web Services)

掌握学习方法,成为技术大牛

实力程序员

ThreadLocal内存溢出代码演示和原因分析!

王磊

Java 多线程

redis在微服务领域的贡献

捉虫大师

redis dubbo RPC 协议 注册中心

Nginx调试必备的几种技能

运维研习社

nginx 运维 实用技巧 5月日更

探索专有领域的端到端ASR解决之道

华为云开发者联盟

端到端 ASR 自动语音识别 语境偏移 专有领域

驾云驭能,云科技点燃制造创新之旅!

亚马逊云科技 (Amazon Web Services)

NUCLEO-L432KC实现ADC配置(STM32L432KC)

不脱发的程序猿

嵌入式 单片机 NUCLEO-L432KC STM32L432KC 光敏电阻传感器

选择排序&插入排序 - DAY 15

Qien Z.

排序算法 插入排序 5月日更

☕【JVM 技术之旅】攻克技术盲点之“JVM常量池们“

码界西柚

JVM 5月日更 字符串常量池 静态常量池 运行时常量池

☕【JVM 技术之旅】深入JVM原理分析synchronized

码界西柚

synchronized 重量级锁 5月日更 同步锁 ObjectMontior

GitHub开源的10个超棒后台管理面板

不脱发的程序猿

GitHub 开源 后台管理面板

密码学系列之:memory-hard函数

程序那些事

加密解密 密码学 程序那些事

详解 WebRTC 高音质低延时的背后 — AGC(自动增益控制)

阿里云CloudImagine

阿里云 WebRTC 3A算法 音频技术 视频云

手把手带你体验 Amazon Graviton2 的高性价比!文末有惊喜

亚马逊云科技 (Amazon Web Services)

通用连接池帮你解决资源管理难题

万俊峰Kevin

MySQL redis mongodb pool Go 语言

【Flutter 专题】120 Flutter & 腾讯移动通讯 TPNS~

阿策小和尚

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

k8s 集群下微服务 pod 的各种指标信息监控

Damon

微服务 5月日更

5G掀起工业互联网浪潮,水泥厂智能管理模式收效颇丰

一只数据鲸鱼

数据可视化 工业互联网 智慧工厂 水泥厂 智能工厂

再不解决延迟不当,小心你的内存被打爆

华为云开发者联盟

线程 延迟 内存 并发 Sleep

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