我的开发环境

  • python==3.9
  • Django==4.0.6
  • pymongo==4.1.1
  • mongoengine==0.24.1
  • MongoDB==Docker最新版镜像

解决思路

在经历过被黑客攻破MongoDB并勒索之后心有余悸。我在找资料的时候发现很多连接MongoDB的配置都是没有密码的,很苦恼但是没有办法,只能去研究mongoengine这个包,最后发现了这样操作的方式。

安装引擎和配置MongoDB

  • 在Django的settings配置文件中配置MongoDB的信息
pip install pymongo
pip install mongoengine
DATABASES = {
	# 这里是mysql的配置,可以忽略
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'name',
        'USER': 'user',
        'PASSWORD': '密码',
        'HOST': '192.168.1.1',
        'PORT': 3306,
    },
    # MongoDB配置信息
    'mongodb': {
        'NAME': 'MongoDB的数据库名',
        'USER': '登录名',
        'PASSWORD': '登录密码',
        'HOST': '数据库服务器的IP地址',
        # 端口号一定不要使用默认的,曾经我使用默认端口号在有密码的情况下被黑客清空数据库并勒索支付比特币
        'PORT': '端口号',
    },
}

设置模型

import mongoengine
from project.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'

在视图中操作

from django.views.generic import View
from base.models import Inventory_a

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)

Success

在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐