An error occurred: 'NoneType' object has no attribute 'blogs'

13 views Asked by At

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?

0

There are 0 answers