Python -Flask Я хочу отобразить данные, которые представлены в Mongodb на HTML-странице в чистом формате - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть список данных вопросов в базе данных Mongodb.Я хочу отображать вопрос за вопросом на HTML-странице.Это мой код Flask

from flask import Flask, render_template, request, url_for
from pymongo import MongoClient
from bson.json_util import dumps
import json

client = MongoClient('localhost:27017')
db = client.girish

app = Flask(__name__)
@app.route("/questions", methods = ['GET'])
def questions():
    try:
        names = db.questions.find({},{"ques":1,"options":1,"_id":0,"quesid":1,"ans":1}).limit(10)
        return render_template('index.html', names=names)
        #return dumps(names)
    except Exception as e:
        return dumps({'error' : str(e)})

@app.route("/answers", methods = ['POST'])
def answers():
    try:
        data = json.loads(request.data)
        quesid = data['quesid']
        yourans = data['yourans']
        if quesid and yourans:
            status = db.myanswers.insert_one({
                "quesid" : quesid,
                "yourans" : yourans
            })
        return dumps({'message' : 'SUCCESS'})
    except Exception as e:
        return dumps({'error' : str(e)})

@app.route("/myanswers", methods = ['GET'])
def myanswers():
    try:
        answers = db.myanswers.find({},{"quesid":1,"yourans":1})
        return dumps(answers)
    except Exception as e:
        return dumps({'error' : str(e)})

@app.route("/check/<id>", methods = ['GET','POST'])
def check(id):
    try:
        doc=db.questions.find({'quesid':float(id)})
        return dumps(doc)
    except Exception as e:
        return dumps({'error': str(e)})




if __name__ == '__main__':
     app.run(port='5002',debug = True)

Каковы возможные способы отображения данных, представленных в monodb, на странице html?Я новичок в веб-разработке на Python.Пожалуйста, помогите мне в подробном процессе.

Это мой код внедрения mogodb с python

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["girish"]
mycol = mydb["questions"]

mylist = [
 {

        "ques" : "what is test?",
        "options" : [
                {
                        "op1" : "test",
                        "op2" : "test",
                        "op3" : "test"
                }
        ],
        "quesid" : 1,
        "ans" : 1
},
{

        "ques" : "what is test2?",
        "options" : [
                {
                        "op1" : "test",
                        "op2" : "test",
                        "op3" : "test"
                }
        ],
        "quesid" : 2,
        "ans" : 1
},
{

        "ques" : "what is test3?",
        "options" : [
                {
                        "op1" : "test",
                        "op2" : "test",
                        "op3" : "test"
                }
        ],
        "quesid" : 3,
        "ans" : 1
},
{

        "ques" : "what is test4?",
        "options" : [
                {
                        "op1" : "test",
                        "op2" : "test",
                        "op3" : "test"
                }
        ],
        "quesid" : 4,
        "ans" : 1
},
{

        "ques" : "what is test5?",
        "options" : [
                {
                        "op1" : "test",
                        "op2" : "test",
                        "op3" : "test"
                }
        ],
        "quesid" : 5,
        "ans" : 1
},
]

x = mycol.insert_many(mylist)

Как я могу создать HTML-страницу и как связаться с моей базой данных?

1 Ответ

0 голосов
/ 25 ноября 2018

Как я могу создать страницу HTML?

В Flask используется нечто, называемое jinja templates, которое имеет определенный синтаксис.Он объединяет структуру HTML и ваши данные, чтобы вернуть страницу HTML, заполненную данными для отображения в браузере

Как связаться с моей базой данных?

Я вижу, выиспользуя PyMongo для подачи и чтения данных из MongoDB, что идеально.

Теперь связующая часть,

Создайте функцию python для доступа к данным из базы данных, поместите их в переменную python, используйтевсю необходимую логику, а затем передать эту переменную python в шаблон HTML.Вам нужно будет предоставить уникальный URL-адрес, который веб-браузер будет использовать для вызова этой функции, используя @ app.route

Я пишу пример кода для отображения всех вопросов из questions collection

@app.route("/questions", methods = ['GET'])
def questions():
    try:
        questions = db.questions.find({},{"ques":1,"ans":1})
        return render_template('questions.html', questions = questions)
    except Exception as e:
        return dumps({'error' : str(e)})

Теперь шаблон, который отображает данные - шаблон Jinja 2 предоставляет способ отображения значений переменных python в html-файле.Jinja позволяет вам использовать условные операторы (if-else) и циклы for для соответствующих случаев использования.

Questions.html

<!doctype html>
<html>
   <body>
         {% for question in questions %}
            <h3>{{question["ques"]}}</h3>
         {% endfor %}
   </body>
</html>
...