总结下Django开发过程中的一些技巧和问题

1.Django中使用json.dumps( )方法,返回数据到模板中引号被转义

可使用Django中的escapejs过滤器, escapejs filter可以替换value中的某些字符,以适应Javascript和Json格式:

{{ data | escapejs }}
2.将Django的Model独立出来

一开始我项目中的Model全部写在框架默认的models.py文件里,后来随着数据库表逐渐增加,代码越来越多,考虑把Model独立出来。

(1)首先在项目根目录下创建一个model文件夹,然后在model文件夹中创建__init__.py文件。之后分别为每个表创建一个独立的model文件。

目录结构如下:

└── myproj
    ├── views
    ├── static 
    ├── templates
    ├── model
    │   ├── __init__.py 
    │   ├── user.py
    │   ├── article.py
    │   └── category.py
    ├── apps.py
    └── models.py

(2)然后在models.py中import model文件夹中的文件:

from myproj.model.user import User
from myproj.model.article import Article
from myproj.model.category import Category

(3)之后就可以执行migrate:

python manage.py makemigrations
python manage.py migrate
3.在Django中如何引用自定义全局设置

settings.py文件中增加一个常量SITE_NAME:

SITE_NAME = 'My Website'

然后在需要用到此常量的view中导入配置文件

from django.conf import settings

最后使用我们自定义的这个常量:

website_name = settings.SITE_NAME

如果你定义的是一个字典:

SITE_INFO = {
    'SITE_NAME'        : 'My Website',
    'SITE_DESCRIPTION' : 'This is my website.'
}

使用方法如下:

website_name = settings.SITE_INFO['SITE_NAME']
website_desc = settings.SITE_INFO['SITE_DESCRIPTION']
4.Django中如何在模板中引用自定义全局设置

参照 http://stackoverflow.com/questions/433162/can-i-access-constants-in-settings-py-from-templates-in-django 中的几种方法,选择了一个最简单的方法,直接使用了django-settings-export第三方库

(1)首先安装django-settings-export库(我的开发环境是python3.6,系统环境是Mac OS):

sudo pip3 install django-settings-export

(2)然后在settings.py中引用,代码如下:

TEMPLATES = [
  {
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [BASE_DIR + "/templates",],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
                 ...
             'django_settings_export.settings_export'
         ],
     },
  },
]

(3)然后在settings.py中新增一条配置:

SETTINGS_EXPORT = [
    'SITE_NAME',
]

(4)最后在模板中使用:

{{ settings.SITE_NAME }}
5.Django中自定义用户认证User模型后出现警告。

proj.User: (auth.W004) ‘User.username’ is named as the ‘USERNAME_FIELD’, but it is not unique.
HINT: Ensure that your authentication backend(s) can handle non-unique usernames.

USERNAME_FIELD是描述User模型上用作唯一标识符的字段名称的字符串。这通常是某种用户名,但它也可以是电子邮件地址或任何其他唯一标识符。字段必须必须是唯一的(即在其定义中设置unique=True)。然后设置USERNAME_FIELD = ‘字段名’。

代码如下:

# 用户模型
class User(AbstractUser):
    userid     = models.AutoField(null=False,primary_key=True)
    username   = models.CharField(null=True,max_length=64)
    realname   = models.CharField(null=True,max_length=16,default = '')
    userphone  = models.CharField(null=True,max_length=64,default = '')
    password   = models.CharField(null=False,max_length=255,default = '')
    useremail  = models.CharField(null=False,max_length=64,default = '',unique=True)
    USERNAME_FIELD = 'useremail'
    userintro  = models.TextField(null=True)
    userphoto  = models.ImageField(null=True, upload_to = 'avatar',storage = ImageStorage())

发表评论

电子邮件地址不会被公开。 必填项已用*标注