Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from flask import Flask, jsonify, request, abort, make_response
- from sqlalchemy import Column, Integer, String, ForeignKey, create_engine, \
- Table
- from sqlalchemy.ext.declarative import declarative_base
- from sqlalchemy.orm import sessionmaker, relationship
- import random
- app = Flask(__name__)
- Base = declarative_base()
- engine = create_engine('sqlite:///sqlalchemytest.db', echo=True)
- Session = sessionmaker(bind=engine)
- ses = Session()
- task_tasklists = Table(
- 'task_tasklists', Base.metadata,
- Column('task_id', ForeignKey('tasks.id'), primary_key=True),
- Column('tasklist_id', ForeignKey('task_lists.id'), primary_key=True)
- )
- class User(Base):
- __tablename__ = 'users'
- id = Column(Integer, primary_key=True)
- email = Column(String(255))
- password = Column(String(255))
- remember_token = Column(String(255))
- user_level = Column(Integer)
- tasks = relationship("Task", back_populates="user")
- def __repr__(self):
- return "<User(email='%s', password='%s', rememberToken='%s', userLevel=%s)>" % (
- self.email, self.password, self.remember_token, self.user_level)
- class Task(Base):
- __tablename__ = 'tasks'
- id = Column(Integer, primary_key=True)
- title = Column(String(50))
- description = Column(String(255))
- priority = Column(Integer)
- completed = Column(Integer)
- user_id = Column(Integer, ForeignKey('users.id'))
- user = relationship("User", back_populates="tasks")
- tasklists = relationship(
- 'TaskList',
- secondary=task_tasklists,
- back_populates='tasks')
- class TaskList(Base):
- __tablename__ = 'task_lists'
- id = Column(Integer, primary_key=True)
- title = Column(String(50))
- description = Column(String(255))
- tasks = relationship(
- 'Task',
- secondary=task_tasklists,
- back_populates='tasklists')
- Base.metadata.create_all(engine)
- @app.route('/todo/api/v1.0/<int:id>/task', methods=['POST'])
- def create_task(id):
- if not request.json or 'title' not in request.json:
- abort(400)
- user = ses.query(User).filter(User.id == id).first()
- task = Task(
- title=request.json['title'],
- description=request.json.get('description', ""),
- priority=request.json['priority'],
- completed=request.json['completed'])
- user.tasks.append(task)
- ses.add(user)
- ses.commit()
- newTask = {
- 'id': task.id,
- 'title': task.title,
- 'description': task.description,
- 'priority': task.priority,
- 'completed': task.completed
- }
- return jsonify({'task': newTask}), 201
- @app.route('/todo/api/v1.0/<int:user_id>/tasks', methods=['GET'])
- def get_tasks(user_id):
- tasks = []
- for task in ses.query(User).filter(User.id == user_id).first().tasks:
- tasks.append(
- {
- 'id': task.id,
- 'title': task.title,
- 'description': task.description,
- 'priority': task.priority,
- 'completed': task.completed
- }
- )
- return jsonify({'tasks': tasks})
- @app.route('/todo/api/v1.0/user', methods=['POST'])
- def create_user():
- if not request.json or 'email' not in request.json:
- abort(400)
- elif not request.json or 'password' not in request.json:
- abort(400)
- user = User(
- email=request.json['email'],
- password=request.json['password'],
- remember_token=random.randint(1, 30000),
- user_level=1)
- ses.add(user)
- ses.commit()
- response = {
- 'status': 'success',
- 'message': 'new user created'
- }
- return jsonify({'user': response})
- @app.route('/todo/api/v1.0/user/<int:user_id>', methods=['GET'])
- def get_user(user_id):
- user = ses.query(User).filter(User.id == user_id).first()
- if not user:
- abort(404)
- response = {
- 'id': user.id,
- 'email': user.email,
- 'password': user.password,
- 'rememberToken': user.remember_token,
- 'userLevel': user.user_level
- }
- return jsonify({'user': response})
- @app.errorhandler(404)
- def not_found(error):
- return make_response(jsonify({'error': 'Not Found'}), 404)
- if __name__ == '__main__':
- app.run(debug=True)
Add Comment
Please, Sign In to add comment