连接到 mongodb atlas 的烧瓶 API 问题

问题描述 投票:0回答:0

对于我的学校项目,我需要设置一个

API
,它可以在
Mongo DB atlas
的数据库中添加删除和编辑数据,并在我的
mijn dns server
环境中添加到
linux
。代码看起来像这样

#!/usr/bin/python

from flask import Flask
from flask_restful import reqparse, abort, Api, Resource
from main import *
import logging
import sys

# hieronder importeer je al je functies
from pymongo import MongoClient

app = Flask(__name__)
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)

api = Api(app)

DEBUG = True   # zet op False wanneer klaar met testen en troubleshooten

parser = reqparse.RequestParser()
# Argumenten die je via curl en de methoden PUT en POST via "-d" in JSON formaat kan meegeven, bv:
# curl http://192.168.190.100:5000/url/url -H "Content-type: application/json" -d "{ \"name\" : \"jan\" -d \"street\" : \"kerkstraat\" }" -X POST
parser.add_argument('name')
parser.add_argument('ip')
# hier de overige argumenten ook zo benoemen


class CouponUserNew(Resource):
    # Maak een nieuwe user aan
    # curl http://192.168.190.100:5000/client/new -H "Content-type: application/json" -d "{ \"name\" : \"jan\", \"street\" : \"kerkstraat\" }" -X POST
    def post(self):
        args = parser.parse_args()
        if DEBUG:
            app.logger.warning(f"DEBUG: CouponUserNew.post() <- {args }")
        n = args['name']
        s = args['ip']
        my_client = MongoClient("mongodb+srv://root:[email protected]/?retryWrites=true&w=majority")
        mydb = my_client["dns"]
        mycol = mydb['info']
        fqdn = (n + '.school.test')
        mydict = {"name": fqdn}
        mycol.insert_one(mydict)
        ns.add_address(n + '.school.test', s)
        # hier roep je de functie aan voor het aanmaken van een nieuwe user
        # <mijnfunctie(mijnargumenten)>
        return {'status': 'ok'}


class CouponUserName(Resource):
    # Verwijder de user
    # curl http://192.168.190.100:5000/client/name/jan -X DELETE
    def delete(self, user_name):
        # hier roep je de functie aan voor het verwijderen van een user
        # <mijnfunctie(mijnargumenten)>
        if DEBUG:
            app.logger.warning(f"DEBUG: CouponUserName.delete(\"{user_name}\")")
        args = parser.parse_args()
        n = args['name']
        my_client = MongoClient("mongodb+srv://root:[email protected]/?retryWrites=true&w=majority")
        mydb = my_client["dns"]
        mycol = mydb["info"]
        print(n)
        fqdn = n + '.school.test'
        mydict = f"{'name': {fqdn}}"
        mycol.delete_one(mydict)
        ns.clear_address(n)
        return {'status': 'ok'}

    # Voeg een coupon toe
    # curl http://192.168.190.100:5000/client/name/jan3 -H "Content-type: application/json" -d "{ \"code\" : \"3333333\", \"value\" : 100 }" -X PUT
    def put(self, user_name):
        args = parser.parse_args()
        if DEBUG:
            app.logger.warning(f"DEBUG: CouponUserName.put(\"{user_name}\") <- {args }")
        # hier een variabele toekennen aan elk argument, bv c = args['code'] etc.
        # <mijnfunctie(mijnargumenten)>
        return {'status': 'ok'}

    # Vraag informatie op over de user
    # curl http://192.168.190.100:5000/client/name/jan
    def get(self, user_name):
        if DEBUG:
            app.logger.warning(f"DEBUG: CouponUserName.get(\"{user_name}\")")
        # <x=mijnfunctie(mijnargumenten)>
        # return x: een stukje json met daarin informatie over de user, dus niet onderstaande regel
        return {'status': 'ok'}

##
## Elke url moet je hieronder apart definieren, dus /client/new  of /client/name
## Als een deel van de url een variabele is dan tussen vishaken, bv <user_name>
##
api.add_resource(CouponUserNew, '/client/new')
api.add_resource(CouponUserName, '/client/name/<user_name>')

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0')

我可以添加但不能删除。我不断收到错误消息:

"message": "Did not attempt to load JSON data because the request Content-Type was not 'application/json'."

稍后我将使用 curl 命令来执行此操作,我将通过 flask 在网站上实现它。

python pycharm pymongo
© www.soinside.com 2019 - 2024. All rights reserved.