#python #jupyter-notebook #plotly-dash
#python #jupyter-ноутбук #plotly-dash
Вопрос:
Я работаю над программой, которая принимает имя пользователя и пароль пользователя (созданные в оболочке MongoDB) и использует их для их проверки, а затем возвращает следующий запрос на чтение:
{"animal_type":"Dog", "name":"Lucy"}
Однако, когда я ввожу имя пользователя и пароль, ничего не выводится. Я пытался использовать методы read() и методы дампа, но оба, похоже, ничего не выводят.
Я предоставлю как фреймворк dash, над которым я работаю, так и основной класс, в котором у меня есть основные методы. Я с удовольствием уточню дополнительную информацию. Я ценю помощь!
Вот фреймворк dash, над которым я работаю:
from jupyter_plotly_dash import JupyterDash
import dash_core_components as dcc
import dash_html_components as html
import dash
from dash.dependencies import Input, Output
from pymongo import MongoClient
import urllib.parse
from bson.json_util import dumps
from CRUD import AnimalShelter
# this is a juypter dash application
app = JupyterDash('ModuleFive')
вывод
app.layout = html.Div(
[
html.H1("Zane's Module 5 Assignment"),
html.Hr(),
dcc.Input(
id="input_user".format("text"),
type="text",
placeholder="input type {}".format("text")),
dcc.Input(
id="input_passwd".format("password"),
type="password",
placeholder="input type {}".format("password")),
html.Button('Execute', id='submit-val', n_clicks=0),
html.Hr(),
html.Div(id="query-out"),
#Completed: inserted unique identifier code on line 20 and 36
html.H3('Fin'),
])
@app.callback(
Output("query-out", "children"),
[Input("input_user".format("text"), "value"),
Input("input_passwd".format("password"),"value"),
Input('submit-val', 'n_clicks')],
[dash.dependencies.State('input_passwd', 'value')]
)
def cb_render(userValue,passValue,n_clicks,buttonValue):
if n_clicks > 0:
username = urllib.parse.quote_plus(userValue)
password = urllib.parse.quote_plus(passValue)
shelter = AnimalShelter(userValue, passValue)
animals = shelter.read({"animal_type":"Dog", "name":"Lucy"})
print(animals)
return dumps(list(shelter.read({"animal_type":"Dog", "name":"Lucy"})))
Вот мой основной класс, который имеет методы:
from pymongo import MongoClient
from bson.objectid import ObjectId
class AnimalShelter(object):
""" CRUD operations for Animal collection in MongoDB """
def __init__(self, username, password):
# Initializing the MongoClient. This helps to
# access the MongoDB databases and collections.
self.client = MongoClient('mongodb://%s:%s@localhost:43282' % (username, password))
self.AAC = self.client['AAC']
# Create method to implement the C in CRUD
def create(self, data):
if data is not None:
return self.AAC.animals.insert_one(data)
else:
print("Nothing to save")
return False
# Create method to implement the C in CRUD
def read(self, data):
if data is not None:
return self.AAC.animals.find(data)
else:
print("Nothing to read")
return False
# Create method to implement the C in CRUD
def update(self, data, newData):
if data is not None:
return self.AAC.animals.update_one(data, {'$set': newData})
else:
print("Nothing to update, because data parameter is empty")
return False
# Create method to implement the D in CRUD
def delete(self, data):
if data is not None:
return self.AAC.animals.delete_one(data)
print("data deleted")
else:
return False
Комментарии:
1. Я не так хорошо знаком с MongoDB, но вы
read
пишете дважды. Показывает ли это
Ответ №1:
Во-первых, чтобы понять результаты cb_render, я бы начал с того, что прокомментировал весь его код, а затем изменил ваш оператор return на this:
return '{}'.format(enter_your_variable_here)
Пройдите и введите каждый из аргументов и посмотрите, что они возвращают. Это поможет вам лучше понять, что он делает, и в конечном итоге это будет оператор return, который вам нужно использовать для распечатки вашего запроса.
Во-вторых, вы должны поместить ‘username’ и ‘password’ в свой конструктор, а не аргументы ‘userValue’ и ‘passValue’ напрямую.
В-третьих, определите свой запрос:
query = {"animal_type":"Dog","name":"Lucy"}
В-четвертых, теперь запустите свой запрос, используя объект client:
animals = shelter.read(query)
Наконец, преобразуйте объект python в строку json с помощью функции dumps
return '{}'.format(dumps(animals))
Чтобы убедиться, что запрос возвращает только один результат, перейдите в animal_shelter.py запустите скрипт в функции read () и измените ‘find’ на ‘find_one’, который является версией PyMongo ‘findOne’ в оболочке MongoDB.