From 40a9963eee4771311fb66893eb4f3b9b1c877a94 Mon Sep 17 00:00:00 2001 From: Andros Fenollosa Date: Mon, 5 Feb 2018 23:59:51 +0100 Subject: [PATCH] Update --- app.py | 83 ++++++++++++++++++++++++++++++++++++++++++---------- fake_data.py | 10 +++---- models.py | 14 ++++----- 3 files changed, 80 insertions(+), 27 deletions(-) diff --git a/app.py b/app.py index 277e5e3..e80deba 100644 --- a/app.py +++ b/app.py @@ -1,14 +1,16 @@ # -*- coding: utf-8 -*- +# ========================= # Librarys # ========================= import os -from flask import Flask, jsonify, request +from flask import Flask, request from flask_restplus import Resource, Api from dotenv import load_dotenv, find_dotenv -from models import db, User, News, Comment +from models import db, User, Notice, Comment from flask_marshmallow import Marshmallow +# ========================= # Extensions initialization # ========================= load_dotenv(find_dotenv()) @@ -16,7 +18,7 @@ app = Flask(__name__) ma = Marshmallow(app) api = Api(app) - +# ========================= # Configurations # ========================= app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY') @@ -25,10 +27,11 @@ app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db.init_app(app) PRE_URL = '/api/v1/' - +# ========================= # Schemas # ========================= + # User class UserSchema(ma.Schema): class Meta: @@ -39,9 +42,44 @@ class UserSchema(ma.Schema): user_schema = UserSchema() users_schema = UserSchema(many=True) + +# Notice +class NoticeSchema(ma.Schema): + class Meta: + # Fields to expose + fields = ('title', 'link', 'user_id', '_links') + + _links = ma.Hyperlinks({ + 'comments': ma.URLFor('comments', id=''), + 'user': ma.URLFor('user_single', id='') + }) + + +notice_schema = NoticeSchema() +news_schema = NoticeSchema(many=True) + + +# Comment +class CommentSchema(ma.Schema): + class Meta: + # Fields to expose + fields = ('text', '_links') + + _links = ma.Hyperlinks({ + 'notice': ma.URLFor('news_single', id=''), + 'user': ma.URLFor('user_single', id='') + }) + + +comment_schema = CommentSchema() +comments_schema = CommentSchema(many=True) + + +# ========================= # Routes # ========================= + # Signup @api.route(PRE_URL + 'signup') class Signup(Resource): @@ -49,6 +87,7 @@ class Signup(Resource): def post(self): return {'hello': 'world'} + # Login @api.route(PRE_URL + 'login') class Login(Resource): @@ -56,13 +95,15 @@ class Login(Resource): def post(self): return {'hello': 'world'} + # Logout -@api.route(PRE_URL + 'login') +@api.route(PRE_URL + 'logout') class Logout(Resource): def get(self): return {'hello': 'world'} + # User @api.route(PRE_URL + 'user') class UserList(Resource): @@ -79,36 +120,48 @@ class UserSingle(Resource): all_users = User.query.get(id) return user_schema.jsonify(all_users) -# News -@api.route(PRE_URL + 'news') -class NewsList(Resource): + +# Notice +@api.route(PRE_URL + 'notice') +class NoticeList(Resource): def get(self): - my_news = News.query.all() - return serializeQuery(my_news) + my_news = Notice.query.all() + return news_schema.jsonify(my_news) def post(self): return request.form -@api.route(PRE_URL + 'news/') -class News_single(Resource): +@api.route(PRE_URL + 'notice/') +class NewsSingle(Resource): def get(self, id): - return {'hello': id} + my_notice = Notice.query.get(id) + return notice_schema.jsonify(my_notice) + + def path(self, id): + my_notice = Notice.query.get(id) + return notice_schema.jsonify(my_notice) + + def delete(self, id): + my_notice = Notice.query.get(id) + return notice_schema.jsonify(my_notice) # Comment -@api.route(PRE_URL + 'news//comments') +@api.route(PRE_URL + 'notice//comments') class Comments(Resource): def get(self, id): - return {'hello': 'world'} + my_comments = Comment.query.filter_by(notice_id=id).all() + return comments_schema.jsonify(my_comments) def post(self, id): return {'hello': 'world'} +# ========================= # Run # ========================= if __name__ == '__main__': diff --git a/fake_data.py b/fake_data.py index 34c0f0c..f497339 100644 --- a/fake_data.py +++ b/fake_data.py @@ -1,5 +1,5 @@ from werkzeug.security import generate_password_hash -from models import db, User, News, Comment +from models import db, User, Notice, Comment from faker import Factory from random import randint @@ -28,18 +28,18 @@ for num in range(1000): link = fake.uri() user_id = randint(1, 100) # Save in database - my_news = News(title=title, link=link, user_id=user_id) - db.session.add(my_news) + my_notice = Notice(title=title, link=link, user_id=user_id) + db.session.add(my_notice) print('News created') # Make 10000 fake comments for num in range(10000): text = fake.text() - news_id = randint(1, 1000) + notice_id = randint(1, 1000) user_id = randint(1, 100) # Save in database - my_comment = Comment(text=text, news_id=news_id, user_id=user_id) + my_comment = Comment(text=text, notice_id=notice_id, user_id=user_id) db.session.add(my_comment) print('Comments created') diff --git a/models.py b/models.py index 7e516c2..b977871 100644 --- a/models.py +++ b/models.py @@ -41,9 +41,9 @@ class User(db.Model): return ''.format(self.username) -class News(db.Model): +class Notice(db.Model): ''' - Table News + Table Notice ''' __tablename__ = 'news' @@ -58,10 +58,10 @@ class News(db.Model): # Relations user = db.relationship( - 'User', backref=db.backref('News', lazy=True)) + 'User', backref=db.backref('Notice', lazy=True)) def __repr__(self): - return ''.format(self.title) + return ''.format(self.title) class Comment(db.Model): @@ -73,7 +73,7 @@ class Comment(db.Model): id = db.Column(db.Integer, primary_key=True) text = db.Column(db.String(1000)) - news_id = db.Column( + notice_id = db.Column( db.Integer, db.ForeignKey('news.id'), nullable=False) user_id = db.Column( db.Integer, db.ForeignKey('users.id'), nullable=False) @@ -83,8 +83,8 @@ class Comment(db.Model): # Relations user = db.relationship( 'User', backref=db.backref('Comment', lazy=True)) - news = db.relationship( - 'News', backref=db.backref('Comment', lazy=True)) + notice = db.relationship( + 'Notice', backref=db.backref('Comment', lazy=True)) def __repr__(self): return ''.format(self.id)