Django 新手需要注意的十个要点
新手建议,可以参考,第四点我还是没明白,看了别人的代码都是把各种业务逻辑写在 views.py
,怎么写到另外的地方。
1. 硬编码
像导航栏上的各种项目,需要进行跳转,或者静态文件,媒体文件,需要从开发环境部署上线 的时候就很麻烦。
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) # 项目的根目录,其它的模板文件,静态文件,媒体文件都是根据 `BASE_DIR`
# Template dir
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, "templates/account/"),
os.path.join(BASE_DIR, "templates/garage/"),
os.path.join(BASE_DIR, "templates/review/"),
) # 每个 App 的模板文件都放在统一的 `templates` 下面的每个 App 文件夹下
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
'/var/www/static/',
)
STATIC_URL
是用来在模板里面载入静态的媒体文件,图片,音频,视频,用法如下:
{% load staticfiles %}
<img src="{% static "my_app/myexample.jpg" %}" alt="My image"/>
这个地方还是把图片文件放在了项目下的 static
文件夹,每个 App 单独一个文件夹。
<!-- loading Bootstrap core CSS -->
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/bootstrap.min.css">
<!-- loading customise CSS -->
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/base_customise.css">
CSS, JS 文件设置,注意 css
前没有 /
,在 STATIC_URL
中已经有了斜杠。
第二个 STATICFILES_DIRS
我还没明白到底是干什么的,文档里面写的是设置不同的静态文件目录,不绑定给特定的 App 用(看了半天英文还是没有明白……不过这个是必须要设置的,不设置那就找不到 CSS 和 JS 文件了)。部署到线上的的话就要把 STATICFILES_DIRS
换成 STATIC_ROOT = "/home/chen/DjangoProjects/static"
,服务器上的文件夹。
2. URL
URL 设置 urls.py
放在每个 App 下面,除非 App 真的很小,功能很少那放在和 settings.py
一个文件夹下的 urls.py
也没问题,一旦 App 大了之后给每个 App 单独设置 URL,和 models.py
views.py
一起在 App 文件夹下,这样能够重用 App 到不通的项目中,在项目的 urls.py
中设置:
url(r'^', include('garage.urls', namespace='garage')),
这里的 namespace
是给在模板中直接调用 URL 用的,避免硬编码
{% raw %}
<a class="navbar-brand" href="{% url 'garage:index' %}">BookGarage</a>
{% endraw %}
硬编码的问题我最早也纠结了很久,还在上线到服务器的时候掉到坑里了,还好也爬上来了。
3. 其他
其他建议比如:不要将项目名称包含在一引用代码中,这样不利于重用(我也没见过有人会这么做)。
部署的时候不要忘记将 DEBUG
设置改成 False
。
调试能够借助一些第三方工具获取更多的信息,django-debug-toolbar,前段时间是 Django 的十周年,调查显示这个工具用的人非常多。
还能用 Jinja2 这个模板系统替换自带的模板系统,作者是 Flask 的作者,也是 Flask 的一部分。
13 年的文章里面很多的链接都没用了,我也不知道这个到底是什么情况。