Reputation: 19
I am trying to send a post request to the created table but keep getting the error init() takes 1 positional argument but 3 were given.
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
import os
app = Flask(__name__)
file_path = os.path.abspath(os.getcwd())+"\database.db"
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///'+file_path
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
class post(db.Model):
id = db.Column(db.Integer, primary_key=True)
status = db.Column(db.Boolean(50))
title = db.Column(db.String(200))
body = db.Column(db.String(max))
createdtime = db.Column(db.DateTime())
def __init__(self, status, title, body, createdtime):
self.status = status
self.title= title
self.body = body
self.createdtime = createdtime
@app.route('/api/posts', methods=['GET'])
def get_all_posts():
return ''
@app.route('/api/posts/<id>', methods=['GET'])
def get_one_post():
return ''
@app.route('/api/new-post', methods=['POST'])
def put_post():
title= request.get_json('title')
body= request.get_json('body')
new_post= post(title, body)
db.session.add(new_post)
db.session.commit()
return jsonify({'message': 'Post created Successfully'})
@app.route('/api/delete-post', methods=['DELETE'])
def delete_post():
return ''
if __name__ == '__main__':
app.run(debug=True)
What am i doing wrong?
plus my request looks something like this
{
"title" : "Start before you are ready",
"body": "This post will be a little different from what I'm used to
write. I tend to keep my articles in the technical realm of programming.
This time, I'll have to talk about a subject that transformed my mindset
lately. It will appear a little like a rant, and it very well may be :D"
}
Upvotes: 1
Views: 1917
Reputation: 21
First the __init__
method is not the the same indentation level as the post class.
Secondly you don't need to override the default constructor of db.Model
you can use the Post model.
For example:
post = Post(title='xx')
like this you can pass as many argument to it like this when you instantiate the Post class as long as the attribute you are using is in the class.
Upvotes: 2