Django 开发者都应该清楚的 十 个点

  1. 使用 Celery 进行异步任务和 cron 作业(不需要使用 UNIX cron) 开发的前两个星期,你可能不需要将任务放到异步进程中执行,但是当你的非技术联合创始人开始问为什么这个站点 hang 住了,那就是时候祭出 Celery 了(如果你需要更轻巧的东西,当然还有其他选择)。任何不需要同步的请求都可以排队,并最终由 Celery Worker 处理掉。我建议使用 redis 作为 Celery 的后端。除非你有充分的理由,否则不要在 RabbitMQ 上浪费时间,我一般使用 Celery 发送邮件或者从 API 拉取数据。另一个小技巧是,你可以设置定期任务作为一个 cron job。
  2. 使用 Gunicorn 搭建你的网站,而不是 Apache Apache 是经过战斗考验的,但是两年前我还是个新手的时候,我屁都不知道,它配置起来相当复杂。我只是想让一个网站正常运行,并忽略掉我代码里面的 print。Apache 有大量的配置需要去理解,这是我最受不了的。而 Gunicorn 非常简单,你只需要 gunicorn myproject.wsgi 当然,处理静态文件,我推荐 Nginx
  3. 使用 PostgreSQL 作为你的主数据库 PostgreSQL 支持 JSONB 数据类型,这意味着你可以在 PostgreSQL 中存储 documents,运行类似 MongoDB 那样的查询(带索引),而不会影响性能。最最重要的是,你仍然可以使用 Django ORM 和 Django admin 最近笔者看到一个统计报告,关系数据库的份额不降反增,啧啧
  4. 为 URL 命一个别名 from django.urls import path from . import views urlpatterns = [ #... path('articles/<int:year>/', views.year_archive, name='news-year-archive'), #... ] 后端使用 reverse 来将别名转换为 URL from django.urls import reverse from django.http import HttpResponseRedirect def redirect_to_year(request): # ... year = 2006 # ... return HttpResponseRedirect(reverse('news-year-archive', args=(year,))) 前端则使用 URL 的模板标签 <a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a> <ul> {% for yearvar in year_list %} <li> <a href="{% url 'news-year-archive' yearvar %}">{{ yearvar }} Archive</a> </li> {% endfor %} </ul> 看起来蛮笨的,但是它会为您节省大量的时间,因为没有任何 URL 的硬编码,一个 URL 的改变,不会破坏任何的单元测试。
  5. 正确的使用 settings.py 文件 关于这个,已经有很多讨论了,就我个人而言,我喜欢将生产环境和开发环境的通用配置创建一个新文件 common.py 保存,再创建两个配置文件:
    • 生产环境配置:prod_settings.py
    • 开发环境配置:settings.py

它们均会在开头将 common.py 中的所有配置导入进去,再差异化的添加配置(同名也可以覆盖),像这样:

from .common import *

然后修改 wsgi.py

"""
WSGI config for helloworld project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.prod_settings") <--- 注意这里

application = get_wsgi_application()

这样,我可以直接在本地使用:

python manage.py runserver

现在你明白为什么我们仍然使用 settings.py 作为开发环境配置的名字的原因了吗?

而在生产环境,我们可以直接:

gunicorn myproject.wsgi

So easy!

  1. 使用 Supervisor 来进行进程监控 如果你还没听过 supervisor,而且正要将服务部署在基于 UNIX 的计算机上,那你可以继续向下看:Supervisor 将为你控制所有进程,您只需要为每个进程添加一个单独的配置文件。如果进程挂了,Supervisor 将会为你重新启动,一些例子:Celery-beat,Celery,Gunicorn,StatsD,MongoDB 等。
  2. 选择在恰当的时候是用 JSON,比如使用 Django-rest-framework 除非你想用 HTML 来完成整个页面的更新(当然,这也没什么错) Django 有一个内置的 JSON HTTP 响应: >>> from django.http import JsonResponse >>> response = JsonResponse({'foo': 'bar'}) >>> response.content b'{"foo": "bar"}' 当然如果你是 Django ORM 的重度使用者(你应该是),那么 Django-rest-framework 是个神器
  3. 使用 Redis 因为它最终会成为你最好的帮手,正如文章开头建议的,在一开始,Redis 可以用来协助 Celery 工作,然后,当时机成熟,你可以将你的会话存储到 Redis 中,你还可以将 Redis 作为缓存,还可以使用 Redis 来自动完成,总之,我只用 Redis
  4. 使用 Munin 或者 StatsD 来监控进程 Munin 可以让你画出几乎任何图表,StatsD 可以让你为任何东西计时、计数(累加)。有了它们,你可以监控你想监控的一切 你还可以很轻松的使用 Python 编写自己的 Munin 插件
  5. 最后,使用 VueJS 全家桶构建你的前端页面

后续会出一个全栈教程

原文发布于微信公众号 - 随心DevOps(heart-devops)

原文发表时间:2017-12-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏信安之路

Splunk学习与实践

美国Splunk公司,成立于2004年,2012年纳斯达克上市,第一家大数据上市公司,荣获众多奖项和殊荣。总部位于美国旧金山,伦敦为国际总部,香港设有亚太支持中...

920
来自专栏CodeSheep的技术分享

利用TICK搭建Docker容器可视化监控中心

性能监控是容器服务必不可少的基础设施,容器化应用运行于宿主机上,我们需要知道该容器的运行情况,包括 CPU使用率、内存占用、网络状况以及磁盘空间等等一系列信息。...

2344
来自专栏北京马哥教育

皇上请阅卷!【2016运维高考-考卷汇总】

一年一度高考时,马帮小伙伴也没闲着,做了一套“运维高考题”,那么现在就由你,没错,就是你————最敬爱的大众评审来一起阅卷啦! We want you!!! 先...

3289
来自专栏服务端思维

如何防范常见的Web攻击

SQL注入攻击,这个是最常聊到的话题,使用过Java的开发人员,第一个反应就是一定要使用预编译的PrepareStatement,是吧?

1112
来自专栏容器云生态

linux系统性能分析对策

解决系统性能问题的一般思路 下面从影响操作系统性能的因素、性能优化工具、系统性能评价标准三个方面介绍优化Linux的一般思路和方法。 影响Linux性能的...

1949
来自专栏battcn

没有Eureka,但多了Nacos

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。

622
来自专栏架构师之路

小小的IP,大大的耦合,你痛过吗?

什么是耦合? 耦合,是架构中,本来不相干的代码、模块、服务、系统因为某些原因联系在一起,各自独立性差,影响则相互影响,变动则相互变动的一种架构状态。 感官上,...

4166
来自专栏有趣的Python

(旧)3- Flask构建弹幕微电影网站- 课程介绍Flask 构建微电影视频网站

Flask 构建微电影视频网站 已上线演示地址: http://movie.mtianyan.cn 项目源码地址:https://github.com/mti...

3939
来自专栏猿天地

Spring Cloud 如何选择分布式配置中心

微服务必备的几样武器有了,才能独闯武林, 有哪几样呢? 注册中心(eureka, consul, zk, etcd) 配置中心 (Spring Cloud Co...

35911
来自专栏Coding01

使用 PubSubHubbub 制作 RSS 定时器 —— Laravel RSS (三)

由于我们使用 xpath 方式去抓取网站的内容,这些网站更新了内容,但它们不会实时告诉你它们更新了;所以「RSS 阅读器如何做到所谓的的「更新」呢?」

902

扫码关注云+社区