0%

django后端构建

一、基础配置

数据库配置

因为使用mongodb数据库,在Django中没有相对应的数据引擎,所以需要配置下,详细请参考django下优雅配置mongodb

  • 安装djongo库
1
pip install djongo
  • setting数据库配置
1
2
3
4
5
6
7
8
9
DATABASES = {
'default': {
'ENGINE': 'djongo',
'ENFORCE_SCHEMA': True,
'NAME': 'djongo_example', #数据库名字
'HOST': '127.0.0.1',
'PORT': 27017,
}
}

ORM映射

djongo官网

1、model定义

使用EmbeddedField来描述Entry中包含Blog数据对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from djongo import models

class Blog(models.Model):
name = models.CharField(max_length=100)

class Meta:
abstract = True

class Entry(models.Model):
blog = models.EmbeddedField(
model_container=Blog
)
headline = models.CharField(max_length=255)

e = Entry()
e.blog = {
'name': 'Djongo'
}
e.headline = 'The Django MongoDB connector'
e.save()

使用ArrayField来描述多重包含关系

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from djongo import models

class Entry(models.Model):
blog = models.ArrayField(
model_container=Blog
)
headline = models.CharField(max_length=255)

e = Entry()
e.blog = [
{'name': 'Djongo'}, {'name': 'Django'}, {'name': 'MongoDB'}
]
e.headline = 'Djongo is the best Django and MongoDB connector'
e.save()

二、问题记录

1、后端跨域问题

使用第三方包

①安装django-cors-headers

1
pip install django-cors-headers

②配置settings.py文件

  • 在在INSTALLED_APPS里添加corsheaders

    1
    2
    3
    INSTALLED_APPS = [
    'corsheaders',
    ]
  • 在MIDDLEWARE_CLASSES添加配置

    1
    2
    3
    4
    MIDDLEWARE_CLASSES = (
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    )
  • 在setting.py中增加如下配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    CORS_ALLOW_CREDENTIALS = True
    CORS_ORIGIN_ALLOW_ALL = True
    CORS_ORIGIN_WHITELIST = ()

    CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
    'VIEW',
    )

    CORS_ALLOW_HEADERS = (
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
    )