在Django中使用MongoDB数据库详细操作步骤 带密码
在经历过被黑客攻破MongoDB并勒索之后心有余悸。我在找资料的时候发现很多连接MongoDB的配置都是没有密码的,很苦恼但是没有办法,只能去研究mongoengine这个包,最后发现了这样操作的方式。
·
我的开发环境
- 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
更多推荐
已为社区贡献2条内容
所有评论(0)