为我的python脚本创建一个django rest API

时间:2015-02-23 19:39:04

标签: python django mongodb rest django-rest-framework

我有一个包含数据的JSON文件:

['dbname' : 'A', 'collection' : 'ACollection', 'fields' : ['name', 'phone_no', 'address']}
['dbname' : 'B', 'collection' : 'BCollection', 'fields' : ['name', 'phone_no', 'address', 'class']}

这是同一格式的许多其他词典中的两个例子。

我有一个执行以下操作的python代码:接受来自用户的2个输入 - phone_no和dbname。例如,用户将phone_no输入为xxxxxxxxxx,将dbname输入为A.然后,python代码读取JSON文件,并将用户输入与具有数据库名称的字典元素匹配为' A'。然后它打开数据库' A'打开相应的集合' ACollection'并打印集合中具有phone_no值为xxxxxxxxxx的帖子的相应字段。数据库使用mongoDB实现。

我需要为此代码构建一个django rest api。最终目标是从浏览器访问代码。用户在浏览器中提供2个输入并执行代码,返回显示在浏览器上的数据。我已经阅读了django-rest框架文档,但我对这整个概念不熟悉,并希望得到一些指导。

如何实现这些功能并创建API?模型,序列化程序,视图和网址文件应该与我的程序相关的代码是什么代码?

models.py

from django.db import models


class App(object):
        def __init__(self, phone_no, name, address, categories):
                self.phone_no = phone_no
                self.name = name
                self.address = address
                self.categories = categories

这就是我到目前为止所做的工作,以便开始使用。然而,问题是模型类本质上应该是动态的。例如:如果' A'是数据库,程序返回3个字段但是如果' B'是数据库,程序返回4个值,所以我不确定模型类是什么样的。

views.py

from django.views.decorators.csrf import csrf_exempt
from rest_framework.decorators import api_view
from rest_framework.response import Response
from pymongo import Connection
from models import App
from serializers import AppSerializer
import json
import pymongo
from os import listdir
import re
from django import forms


@csrf_exempt
@api_view(['GET'])
def pgs(request):
    #connect to our local mongodb
    db = Connection('localhost',27017)
    #get a connection to our database
    dbconn = db.general
    dbCollection = dbconn['data']

    if request.method == 'GET':
        #get our collection
        items = []
        for r in dbCollection.find():
            post = App(r["phone_no"],r["name"],r["address"],r["categories"])
            items.append(post)
        serializedList = AppSerializer(items, many=True)
        return Response(serializedList.data)

1 个答案:

答案 0 :(得分:0)

假设您在两个不同的数据库中拥有相同的表。我们首先在settings.py中创建两个数据库连接。假设这些被称为db_a和db_b。我们可能会这样建模:

class PhoneGenome(models.Model):
    phone_no = models.CharField(length=255)
    name = models.CharField(length=255)
    # and so on...
    class Meta:
        # if database pre-exists, may want to use managed=False
        managed = False

这为我们提供了一个模型。现在我们根据用户输入选择要从哪个数据库中提取。在视图中,您可能会有类似的内容:

db_used = request.GET.get('database')
db_conns = {'a': 'db_a', 'b': 'db_b'}
if db_conns.has_key(db_used):    
    records = PhoneGenome.objects.using(db_conns[db_used]).filter( user_criteria_here)

queryset中的using()方法允许您选择运行查询的数据库。

这里有很多值得管理的内容,所以这是查看文档的好时机:https://docs.djangoproject.com/en/1.7/topics/db/multi-db/

如果你还没有,那么你真的应该在开始之前完成Django教程。