在Django中使用MongoDB数据库详细操作步骤 带密码

我的开发环境

  • 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

在这里插入图片描述

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值