· 6 years ago · Mar 12, 2019, 02:12 PM
1import os
2import datetime
3
4from flask import (Flask, flash, redirect, render_template, request,
5 Response, url_for, session)
6from peewee import *
7from playhouse.flask_utils import FlaskDB, get_object_or_404, object_list
8from playhouse.sqlite_ext import *
9
10SECRET_KEY = "secret"
11APP_DIR = os.path.dirname(os.path.realpath(__file__))
12DEBUG = True
13DATABASE = 'sqliteext:///%s' % os.path.join(APP_DIR, 'app_data.db')
14
15app = Flask(__name__)
16app.config.from_object(__name__)
17
18flask_db = FlaskDB(app)
19database = flask_db.database
20
21class BaseModel(flask_db.Model):
22 class Meta:
23 database = database
24
25class Author(BaseModel):
26 id = AutoField()
27 name = CharField(null = False)
28 bio = TextField(null = False)
29 avatar = CharField()
30
31class Book(BaseModel):
32 id = AutoField()
33 title = CharField(null = False)
34 description = TextField()
35 author = ForeignKeyField(Author)
36 publish_date = DateTimeField()
37 cover = TextField()
38
39def _create_or_edit(book, template):
40 if request.method == 'POST':
41 book.title = request.form.get('title') or ''
42 book.description = request.form.get('description') or ''
43 book.author = Author.get(Author.id == request.form.get('author') or 1)
44 book.publish_date = request.form.get('publish_date') or datetime.datetime.now()
45 book.cover = request.form.get('cover') or ''
46
47 if not(book.title and book.description and book.author and book.publish_date and book.cover):
48 flash('All fields are required.', 'danger')
49 else:
50 try:
51 with database.atomic():
52 book.save()
53 except IntegrityError:
54 flash('Error ID Conflicting', 'danger')
55 else:
56 flash('book saved successfully.', 'success')
57 return redirect(url_for('index'))
58 return render_template(template, book=book)
59
60@app.route('/book/new/', methods=['GET', 'POST'])
61def create():
62 return _create_or_edit(Book, 'create.html')
63
64@app.route('/edit_book/<id>', methods=['GET', 'POST'])
65def edit_book(id):
66 return "Edit Book"
67
68@app.route('/book/<id>')
69def get_book(id):
70 query = Book.select()
71 book = get_object_or_404(Book, Book.id == id)
72 return render_template('book.html', book=book)
73
74@app.route('/authors')
75def authors():
76 query = Author.select()
77 return object_list('author.html', query, check_bounds=False)
78
79@app.route('/')
80def index():
81 query = Book.select()
82 return object_list('index.html', query, check_bounds=False)
83
84@app.route('/create')
85def create():
86 return "Hello create"
87
88if __name__ == '__main__':
89 database.create_tables([Author, Book], safe=True)
90 app.run(debug=True)