生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

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

评论

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

ABAP 一组关键字 IS BOUND, IS NOT INITIAL 和 IS ASSIGNED 的用法辨析

Jerry Wang

指针 应用 SAP abap 8月月更

云图说丨初识可信分布式身份服务

华为云开发者联盟

云计算 安全 后端

龙蜥开发者说:我眼里的龙蜥社区:一个包容的大家庭 | 第 10 期

OpenAnolis小助手

Linux 开源 操作系统 龙蜥开发者说 参与贡献

四个层次管好设备,为生产保驾护航

PreMaint

预测性维护 设备管理 设备预测性维护

九章云极DataCanvas公司与中国信通院完成可信AI基础软件战略合作

九章云极DataCanvas

人工智能 数据智能 数智化 可信AI

OpenHarmony有氧拳击之设备端开发

OpenHarmony开发者

OpenHarmony

数据中台逼近炒作顶峰之际,Gartner给想建数据中台的一些建议

雨果

数据中台 Gartner

高效完成需求计划的四个关键 | 敏捷开发

LigaAI

Scrum 敏捷开发 Sprint LigaAI spring event

Meta项目功能测试 | 开启PrestoDB和Aria扫描优化

Alluxio

hive presto Alluxio 大数据 开源 8月月更

优雅,永不过时!SpringBoot中这样编写Controller层代码,那叫一个完美

Java永远的神

Java 程序员 面试 程序人生 springboot

数字知识库-知识图谱管理系统

金陵老街

Java 数字化 知识图谱 企事业系统

前端监控系列3 | 如何衡量一个站点的性能好坏

字节跳动终端技术

字节跳动 前端 性能监控 火山引擎 站点性能

马拉车算法 (最长回文串 例题 密码截获)

Five

算法 8月月更

一文带你认知定时消息发布RocketMQ

华为云开发者联盟

云计算 后端

7 天能找到 Go 工作吗?学学 Go 数组和指针试试

梦想橡皮擦

Python 爬虫 8月月更

一文搞懂EMAS Serverless小程序开发|电子书免费下载

hum建应用专家

Serverless emas

什么是企业知识库?有什么作用?如何搭建?@附源码

金陵老街

Java、 企业数字化转型 spring-boot

打了15天,如何做到在容器权限上不失一分?

青藤云安全

容器安全 攻防演练

开源一夏 | 在 STM32L051 上使用 RT-Thread (四、无线温湿度传感器 之 串口通讯)

矜辰所致

开源 RT-Thread 8月月更 STM32L051

前半个月的行动中,整个圈子都在疯传的“内网King”到底是个啥?

青藤云安全

网络安全 主机安全 攻防演练

Web3.0 DAPP项目智能合约系统开发技术详情

开发微hkkf5566

修筑产学研用一体化的通衢,从一场比赛背后瞭望苏州园区人才培养新范式

脑极体

SAP ABAP 和 Java 里的弱引用(WeakReference)和软引用(SoftReference)

Jerry Wang

Java 引用 SAP abap 8月月更

5分钟,带你看完24岁60W年薪架构师的简历,上面竟然写着精通JVM

收到请回复

Java JVM java面试 简历模板 金九银十

如何避免数据湖变成数据沼泽

Kyligence

数据湖 数据管理 智能多维数据库

博睿数据入选《2022爱分析· 银行数字化厂商全景报告》

博睿数据

银行 智能运维 博睿数据

开源一夏 | 在 STM32L051 上使用 RT-Thread (三、无线温湿度传感器 之 I2C通讯)

矜辰所致

开源 RT-Thread 8月月更 STM32L051

Python图像处理丨基于OpenCV和像素处理的图像灰度化处理

华为云开发者联盟

Python 人工智能 图像

基于RPC接口的业务侧流量回放

转转技术团队

测试工具 流量回放 测试方案

【8.12-8.19】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

字节一面:HTTPS 一定安全可靠吗?

程序员小毕

Java 程序员 面试 https 校招

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