Heim > Backend-Entwicklung > Python-Tutorial > Konfiguration und Verwendung von Mongodb für die Django-Entwicklung

Konfiguration und Verwendung von Mongodb für die Django-Entwicklung

不言
Freigeben: 2018-12-12 10:18:16
nach vorne
7196 Leute haben es durchsucht

Der Inhalt dieses Artikels befasst sich mit der Konfiguration und Verwendung von Mongodb in der Django-Entwicklung. Ich hoffe, dass er für Freunde hilfreich ist.

Heute habe ich herausgefunden, wie man Mongodb im Django-Projekt verwendet. Die Umgebung ist wie folgt: ubuntu18.04, django2.0.5, drf3.9, mongoengine0.16

Schritt eins: in Mongodb und MySQL in Settings.py konfigurieren Die Konfiguration ist wie folgt (MySQL und Mongodb können gleichzeitig verwendet werden):

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',   # 数据库引擎
        'NAME': 'django_test2',                  # 你要存储数据的库名,事先要创建之
        'USER': 'root',                         # 数据库用户名
        'PASSWORD': 'wyzane',                     # 密码
        'HOST': 'localhost',                    # 主机
        'PORT': '3306',                         # 数据库使用的端口
    },
    'mongotest': {
        'ENGINE': None,
    }
}
import mongoengine
# 连接mongodb中数据库名称为mongotest5的数据库
conn = mongoengine.connect("mongotest")
Nach dem Login kopieren

Schritt 2: Daten in Mongodb einfügen

1. JSON-Typdaten einfügen

models.py:
    import mongoengine
    class StudentModel(mongoengine.Document):
        name = mongoengine.StringField(max_length=32)
        age = mongoengine.IntField()
        password = mongoengine.StringField(max_length=32)

views.py:
    from rest_framework.views import APIView
    class FirstMongoView(APIView):
        def post(self, request):
            name = request.data["name"]
            age = request.data["age"]
            password = request.data["password"]
            StudentModel.objects.create(name=name, age=age, password=password)
            return Response(dict(msg="OK", code=10000))
Nach dem Login kopieren

Datenformat einfügen:

{
    "name": "nihao",
    "age": 18,
    "password": "123456"
}
Nach dem Login kopieren

2. JSON-Daten mit Liste einfügen

models.py:
    import mongoengine
    class Student2Model(mongoengine.Document):
        name = mongoengine.StringField(max_length=32)
        # 用于存储list类型的数据
        score = mongoengine.ListField()

views.py:
    from rest_framework.views import APIView
    class FirstMongo2View(APIView):
        def post(self, request):
            name = request.data["name"]
            score = request.data["score"]
            Student2Model.objects.create(name=name, score=score)
            return Response(dict(msg="OK", code=10000))
Nach dem Login kopieren

Datenformat einfügen:

{
     "name": "test",
     "score": [12, 13]
}
Nach dem Login kopieren

3. JSON-Daten mit Liste und den komplexen JSON-Daten der Liste einfügen

models.py:
    import mongoengine
    class Student3Model(mongoengine.Document):
        name = mongoengine.StringField(max_length=32)
        # DictField用于存储字典类型的数据
        score = mongoengine.DictField()
views.py:
    from rest_framework.views import APIView
    class FirstMongo3View(APIView):
        def post(self, request):
            name = request.data["name"]
            score = request.data["score"]
            Student3Model.objects.create(name=name, score=score)
            return Response(dict(msg="OK", code=10000))
Nach dem Login kopieren

Das eingefügte Datenformat ist:

{
    "name": "test",
    "score": {"xiaoming": 12, "xiaoli": 13}
}
或者:
{
    "name": "test",
    "score": {"xiaoming": 12, "xiaoli": {"xiaozhao": 14}}
}
或者:
{
"name": "test",
"score": {"xiaoming": 12, "xiaoli": {"xiaozhao": {"xiaoliu": 12, "xiaojian": 18}}}
}
或者:
{
"name": "test",
"score": {"xiaoming": 12, "xiaoli": {"xiaozhao": {"xiaoliu": 12, "xiaojian": [12,13,14]}}}
}
Nach dem Login kopieren

Schritt 3: Fragen Sie die Daten in Mongodb ab

1 . Komplexe JSON-Daten abfragen und serialisieren

serializers.py:
    class StudentSerializer(serializers.Serializer):
        name = serializers.CharField()
        score = serializers.DictField()  # 序列化复杂的json数据
        # DictField与EmbeddedDocumentField类似,但是比EmbeddedDocumentField更灵活
views.py:
    class FirstMongo4View(APIView):
        def get(self, request):
            student_info = Student3Model.objects.all()
            # 增加过滤条件
            # student_info = Student3Model.objects.filter(name="test1")
            ser = StudentSerializer(instance=student_info, many=True)
            return Response(dict(msg="OK", code="10000", data=ser.data))
Nach dem Login kopieren

2. Serialisieren Sie zwei Dokumente mit verschachtelten Beziehungen in mongodb

models.py:
    class AuthorModel(mongoengine.EmbeddedDocument):
        author_name = mongoengine.StringField(max_length=32)
        age = mongoengine.IntField()


    class BookModel(mongoengine.Document):
        book_name = mongoengine.StringField(max_length=64)
        publish = mongoengine.DateTimeField(default=datetime.datetime.utcnow())
        words = mongoengine.IntField()
        author = mongoengine.EmbeddedDocumentField(AuthorModel)

serializers.py: 序列化时注意与rest_framework的序列化中DictField()的区别
    from rest_framework_mongoengine import serializers as s1
    class AuthorSerializer(s1.DocumentSerializer):  
        # DocumentSerializer继承自drf中的ModelSerializer,用于代替ModelSerializer序列化mongodb中的document.
        # 具体可以到官网上查看
        class Meta:
            model = AuthorModel
            fields = ('author_name', 'age')


    class BookSerializer(s1.DocumentSerializer):
        author = AuthorSerializer()

        class Meta:
            model = BookModel
            fields = ('book_name', 'publish', 'words', 'author')

    AuthorSerializer还可以这样写:
    class AuthorSerializer(s1.EmbeddedDocumentSerializer):
        # EmbeddedDocumentSerializer继承了DocumentSerializer
        class Meta:
            model = AuthorModel
            fields = ('author_name', 'age')

views.py:
    class BookView(APIView):
        def get(self, request):
            """
            查询数据
            :param request:
            :return:
            """
            books = BookModel.objects.all()
            ser = BookSerializer(instance=books, many=True)
            return Response(dict(msg="OK", code="10000", data=ser.data))
Nach dem Login kopieren

Wenn der Serializer von Serializer und ModelSerializer in rest_framework erbt, Die folgende Ausnahme wird ausgelöst:

Django serialization to JSON error: 'MetaDict' object has no attribute 'concrete_model'
Nach dem Login kopieren

Zu diesem Zeitpunkt muss der Serializer von der Klasse rest_framework_mongoengine erben. Weitere Informationen finden Sie auf der offiziellen Website:
http://umutbozkurt.github. io/...

Das obige ist der detaillierte Inhalt vonKonfiguration und Verwendung von Mongodb für die Django-Entwicklung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage