I was creating a basic blog flask api with a login endpoint, a upload endpoint and a delete endpoint. When I logged in, it works right but when I tried to upload blog it doesn't worked. here is my code :
from flask import Flask,jsonify,request
from flask_pymongo import PyMongo
from flask_cors import CORS
from bson import ObjectId
import os
app = Flask(__name__)
app.config['MONGO_URI'] = os.getenv('MONGO_URI')
mongo = PyMongo(app)
CORS(app)
print(f"MongoDB Connection String: {app.config['MONGO_URI']}")
admin_username = os.getenv('ADMIN_USERNAME')
admin_password = os.getenv('PASSWORD')
@app.route('/')
def home():
return 'Blog API is working fine!'
@app.route('/auth', methods = ['POST'])
def authenticate():
username = request.form.get('username')
password = request.form.get('password')
if username == admin_username and password == admin_password:
return jsonify({
'message':'access granted'
}),200
else:
return jsonify({
'message':'access deined'
}),404
@app.route('/blogs', methods=['GET'])
def get_all_blogs():
try:
blogs = list(mongo.db.blogs.find())
if not blogs:
return jsonify({'message': 'No blogs found'}), 404
for blog in blogs:
blog['_id'] = str(blog['_id'])
return jsonify(blogs), 200
except Exception as e:
return jsonify({'message': 'An error occurred: {}'.format(str(e))}), 500
@app.route('/upload', methods=['POST'])
def upload_blog():
try:
banner = request.form.get('banner')
heading = request.form.get('heading')
body = request.form.get('body')
link = request.form.get('link')
if not banner or not heading or not body:
return jsonify({'message': 'Missing parameters!'}), 404
inserted_id = mongo.db.blogs.insert_one({
'banner': banner,
'heading': heading,
'body': body,
'link': link
}).inserted_id
return jsonify({
'message': 'Blog Uploaded',
'id': str(inserted_id)
}), 200
except Exception as e:
return jsonify({'message': 'An error occurred: {}'.format(str(e))}), 500
@app.route('/blogs/<blog_id>',methods=['DELETE'])
def delete_blog(blog_id):
result = mongo.db.blogs.delete_one({'_id':ObjectId(blog_id)})
if result.deleted_count == 0:
return jsonify({
'message':'Blog Not Found'
}),404
return jsonify({
'message':'Blog Deleted Successfully'
}), 200
@app.after_request
def after_request(response):
response.headers.add(
'Access-Control-Allow-Headers',
'Content-Type,Authorization'
)
response.headers.add(
'Access-Control-Allow-Methods',
'GET,PUT,PATCH,POST,DELETE,OPTIONS'
)
return response
The /auth' endpoint works correct but whenever I am trying to upload a blog. I am getting this error : An error occurred: 'NoneType' object has no attribute 'blogs'`. Even my mongodb url is correct. Where did I go wrong?