一. 序列化版本Mongo在Django中的配置
官方mongo-drf插件GITHUB
官方文档地址
安装
1. settings.py
# mongodb配置
from mongoengine import connect
connect(db='diary',username='test',password='123456', host='192.168.50.225', port=27017)
2. 模型
import mongoengine
STATUS = ((0, '启用'), (1, '废弃'))
class Company(mongoengine.Document):
name = mongoengine.StringField(max_length=100, required=True)
fullname = mongoengine.StringField(max_length=250, required=True)
address = mongoengine.StringField(max_length=250)
status = mongoengine.IntField(default=0, choices=STATUS, required=False)
date = mongoengine.DateTimeField()
3.视图
class CompanySerializer(rest_framework_mongoengine.serializers.DocumentSerializer):
class Meta:
model = Company
fields = '__all__'
class MongodbModelViewSet(rest_framework_mongoengine.viewsets.ModelViewSet):
serializer_class = CompanySerializer
queryset = Company.objects.all()
class MongoTestView(rest_framework_mongoengine.viewsets.GenericAPIView):
queryset = Company.objects.all()
serializer_class = CompanySerializer
def get(self, request, *args, **kwargs):
query = self.get_queryset()
instance = query.filter(fullname="hai").first()
serializer = self.get_serializer(instance)
return Response(serializer.data)
二. 普通版本使用(简单) Mongo-django-orm参考
1. 安装
pip install pymongo
pip install mongoengine
2. settings.py配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'markdown',
'USER': 'root',
'PASSWORD': '123456',
'PORT': 3306,
'HOST': '192.168.50.213'
},
'mongodb': {
'NAME': 'testmongo', # 不存在数据库会自动创建
'USER': 'chf', # 用户名
'PASSWORD': '123456', # 密码
'HOST': '192.168.50.213',
'PORT': 27017, # 端口
}
}
2. 模型配置
可以创建一个app, 在models.py文件里写 - 创建连接 - 配置模型(注意_id与mongodb的id变量名一致) - 不存在的表会自动创建
from django.db import models
# Create your models here.
import mongoengine
from DjangoMark.settings import DATABASES
# 这里的参数对应settings中的值
mongoengine.connect(
# 需要进行增删改查操作的数据库名称
db=DATABASES['mongodb']['NAME'],
# 定义一个default数据库,必须!
alias='default',
host=DATABASES['mongodb']['HOST'],
port=DATABASES['mongodb']['PORT'],
username=DATABASES['mongodb']['USER'],
password=DATABASES['mongodb']['PASSWORD'],
# 进行身份验证的数据库,必须!
authentication_source="admin",
)
class Inventory_a(mongoengine.Document):
# 可以不设置_id,MongoDB自带有_id
_id = mongoengine.IntField()
# 可以设置非空,长度等,这里与关系型数据库定义模型一样
material_code = mongoengine.StringField(null=False, max_length=256)
material_name = mongoengine.StringField()
material_mode = mongoengine.StringField()
inventory_code = mongoengine.StringField()
inventory_name = mongoengine.StringField()
pcs = mongoengine.StringField()
count = mongoengine.FloatField()
class Meta:
db_table = 'inventory_a'
verbose_name = '库存A'
3. 视图views.py, url
- 与django的orm一致
- 但是序列化是个问题 views.py
from django.views.generic import View
from .models import Inventory_a
from django.http import JsonResponse
from django.core import serializers
class Inventory(View):
def get(self, request):
# a = Inventory_a.objects.create(
# material_code='A.DDR3.1G178B-ENF',
# material_name='A.DDR3.1G178B-ENF',
# material_mode='A.DDR3.1G178B-ENF',
# inventory_code='A.DDR3.1G178B-ENF',
# inventory_name='A.DDR3.1G178B-ENF',
# pcs='A.DDR3.1G178B-ENF',
# count=1,
# )
# print(a)
# b = Inventory_a.objects.all()
# print(b)
# Inventory_a.objects.filter(pcs__startswith='A.DDR3').update(pcs='ADDR31G178BENF')
b = Inventory_a.objects.all()
for i in b:
print(i._id)
return JsonResponse({'msg': 'mongo创建成功'})
**urls.py**
- 正常的urls.py配置
```python
from django.urls import path
from .views import Inventory
urlpatterns = [
path('create/', Inventory.as_view()),
]