-
项目名称不用用连字符
-
,名称必须是有效的包名。如果在 PyCharm 中新建 Django 项目时,项目名称中包含连字符,则无法创建项目,并提示:Project name should only contain letters, number and underscores; -
运行使用 Django 自带的测试模块
django.test
的测试用例时,默认需要一个与开发不同的数据库。可以在settings.py
的DATABASE
中添加:'TEST': { 'NAME': 'your-db-name', }
来指定测试使用的数据库。测试用例执行完成后会直接 drop 掉数据库。可以在运行时使用
--keepdb
参数保证测试用的数据库不会被 drop,但是在表中所有产生的数据,是不会保存的。详情可参考:Writing and running tests。 -
如果不习惯用测试用例,只是想简单的测试下产生的效果,或者构造一些数据,可以在项目根目录下新建
scripts
文件夹,在scripts
文件夹下新建 Python 脚本,并把要执行的代码放到 run 方法下即可。示例如下:test.py
def run(): # do something for i in range(0, 10): print(i)
然后执行
python manage.py runscript test
即可。 -
在模板中,除了可以用一些内置的 template tags 和 filters(如
autoespace
、block
、comment
和csrf_token
等常用的 template tags,default_if_none
、add
和date
等常用 filters ),还可以自定义 template tag 和 filter 用于实现特定的功能。自定义 template tag 和 filter 也很方便,在 app 目录下,新建
templatetags
包,在此文件夹下新建相应脚本即可。示例如下:utils.py
from django import template register = template.Library() # 自定义 tag @register.simple_tag(name='math_add') def math_add(x, y): return x + y # 自定义 filter @register.filter(name='parse_gender') def parse_gender(flag): if not flag: return '未知' if flag == 1: return '男' else: return '女'
在模板文件中先
load
然后使用即可:<!-- 加载 utils --> {% load utils %} <!-- 使用自定义 tag math_add --> <input id="sum" type="text" value="{% math_add 3 5 %}"> <!-- 使用自定义 filter parse_gender --> <span>{{ 2|parse_gender }}</span>
-
相对于 Java Servelet 中可以对 request 进行 preprocessing 和 postprocessing 的 Filter,Django 中的 Middleware 也是干这个的。🤓
Middleware is a framework of hooks into Django’s request/response processing. It’s a light, low-level “plugin” system for globally altering Django’s input or output.
使用 middleware 也非常简单。在 App 目录下新建 middleware 包,然后创建相应中间件脚本,示例如下:
perm_filter.py
from django.utils.deprecation import MiddlewareMixin from django.shortcuts import redirect # 简单示例: # 如果请求路径是以 /api 开头,则重定向到登录页面 # 否则,直接放行,进行下一步处理 class PermissionFilterMiddleware(MiddlewareMixin): def process_request(self, request): path = request.path_info if path.startswith('/api'): return redirect('/login') else: return
然后在
settings.py
中配置上MIDDLEWARE
即可:MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django_demo.middleware.filter.PermissionFilterMiddleware' # 自定义 middleware ]
-
在上线部署前,一定要在
ALLOWED_HOSTS
配置项中添加上线上环境所监听的 IP 和域名,否则无法提供服务。详情可参考 Settings。
Django 使用笔记
原文链接:
blog.smoker.cc