我有一个包含数据的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)
答案 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教程。