Django+mongodb实现Rest_framework

  在我之前写的一篇博客中,我们利用Django已经将.csv导入到mongodb数据库中,那么现在我们想利用这些数据设计一些API,利用url进行交互,已达到与前端对接的程度。在这里呢,我想使用Rest_framework来实现一个初步的API界面。由于我们使用的是MongoDB数据库,不是Django所主流支持的数据库,所以我们在使用Rest_framework的时候会有所不同。

首先说明一下python及Django版本:

python3.6 
django2.0.6 

接下来是我们会用到的一些组件:

pip install mongoengine

pip install djangorestframework

pip install django-rest-framework-mongoengine==3.3.1

接下来是创建项目及APP,我创建的APP名为 datas,因为我事先已经创建好了,在这里就不重复。贴一下创建代码:

python manage.py startproject vis

python manage.py startapp datas

创建好Django项目后,首先我们打开项目文件下setting.py,在INSTALLED_APPS中加入以下内容:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'rest_framework',
    'rest_framework_mongoengine',
    'datas', #你的app名
]

还是在setting.py中,在DATABASES这里改为如下:

DATABASES = {
	'default': {
        'ENGINE': None,
    }
}

from mongoengine import connect
connect('vis') #所使用的mongodb库名

mongoengine提供的connect函数可以方便的连接到mongodb数据库。

接着我们要建立模型,打开data/models.py,添加以下代码:

from __future__ import unicode_literals
from django.db import models
from mongoengine import *
# Create your models here.

connect('vis',host = '127.0.0.1',port = 27017)

class data1(Document):
    siteid = IntField(max_length=45)
    title = StringField(max_length=45)
    lng = StringField(max_length=45)
    lat = StringField(max_length=45)
    # 指明连接的数据表名
    meta = {'collection':'raw_data1'}
    def __unicode__(self):
        return self.name



class data2(Document):
    personid = StringField(primary_key=True)
    siteid = StringField(max_length=45)
    xb = StringField(max_length=45)
    customername = StringField(max_length=45)
    onlinetime = StringField(max_length=45)
    offlinetime = StringField(max_length=45)
    areaid = StringField(max_length=45)
    birthday = StringField(max_length=45)
    # 指明连接的数据表名
    meta = {'collection':'raw_data2'}
    def __unicode__(self):
        return self.name

# 测试是否连接成功
#for i in data1.objects[:10]:
#    print(i.title)

在这里由于我准备了两个表,所以我定义了两个models。(但测试结果时只用到了一个表的数据)

注意我们在这里使用的是mongoengine的函数,与直接使用rest_framework定义model的方式不一样,例如models改为了Document。定义数据类型的CharField改为了StringField。其他定义可以自行查询mongoengine。

接下来是序列化的部分,这里我们定义序列化也需要稍作变化,使用rest_framework_mongoengine.serializers。在datas目录下创建serializers.py,加入以下代码:

from rest_framework_mongoengine import serializers
from . import models

class data1Serializer(serializers.DocumentSerializer):
    class Meta:
        model = models.data1
        fields = '__all__' #这个是将所有的字段都序列化

class data2Serializer(serializers.DocumentSerializer):
    class Meta:
        model = models.data2
        fields = '__all__' #这个是将所有的字段都序列化

接下来是views.py,同理,我们也需要用到rest_framework_mongoengine。打开view.py,加入以下代码:

from . import models
from . import serializers
from rest_framework_mongoengine import generics


class ListView(generics.ListCreateAPIView):
    queryset = models.data1.objects.all()
    serializer_class = serializers.data1Serializer

到此,我们就利用rest_framework建立了一个简单的,可用于查看所有数据的API。接着我们需要在urls.py中进行设置,以便我们使用url进行访问。

首先在项目文件下的urls.py中写入:

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
	path('api/', include('datas.urls')), #包含app中的urls
]

接着我们进入app文件,打开datas/urls.py,写入:

from django.contrib import admin
from django.urls import path,include
from .views import ListView

urlpatterns = [
    path('all/', ListView.as_view(),name='data1')
]

好了,现在所有设置完毕。我们运行一下试试。

首先运行mongodb数据库,

mongod --dbpath 你的mongodb data文件目录 

然后运行项目,在项目根目录下,打开cmd,输入一下命令:

python manage.py runserver

Django+mongodb实现Rest_framework_第1张图片

运行成功。

接下来打开浏览器,在url中输入 http://127.0.0.1:8000/api/all

Django+mongodb实现Rest_framework_第2张图片

成功。  

PS:在这可能是.csv数据格式有问题,或者是我导入数据时候格式设置不对,导致导入数据库中数据有一点问题。后续进行调整

你可能感兴趣的:(Django+mongodb实现Rest_framework)