对于我的学校项目,我需要设置一个
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 在网站上实现它。