├── .gitignore ├── LICENSE ├── README.md ├── book.db ├── book.py ├── book.sql ├── books.txt ├── static └── style.css ├── templates ├── #manager_user_modify.html# ├── index.html ├── layout.html ├── manager.html ├── manager_book.html ├── manager_books.html ├── manager_books_add.html ├── manager_books_delete.html ├── manager_index.html ├── manager_login.html ├── manager_modify.html ├── manager_user_modify.html ├── manager_userinfo.html ├── manager_users.html ├── reader.html ├── reader_book.html ├── reader_histroy.html ├── reader_info.html ├── reader_login.html ├── reader_modify.html ├── reader_query.html └── register.html └── venv ├── include └── python2.7 └── local └── include /.gitignore: -------------------------------------------------------------------------------- 1 | *.py[cod] 2 | *~ 3 | # C extensions 4 | *.so 5 | 6 | # Packages 7 | *.egg 8 | *.egg-info 9 | dist 10 | build 11 | eggs 12 | parts 13 | bin 14 | var 15 | sdist 16 | develop-eggs 17 | .installed.cfg 18 | lib 19 | lib64 20 | 21 | # Installer logs 22 | pip-log.txt 23 | 24 | # Unit test / coverage reports 25 | .coverage 26 | .tox 27 | nosetests.xml 28 | 29 | # Translations 30 | *.mo 31 | 32 | # Mr Developer 33 | .mr.developer.cfg 34 | .project 35 | .pydevproject 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bayonetta/BookLibrary/58db9a9e86b0bd1f4a1189d7c0e48e22b5895978/LICENSE -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | BookLibrary 2 | =========== 3 | 4 | 一个基于Flask框架的简单图书管理系统 5 | 6 | 7 | ## 搭配环境 8 | * 输入 sudo apt-get install python-virtualenv 安装virtualenv虚拟机 9 | * 输入 sudo apt-get install sqlite3 安装sqlite3 10 | * 输入 sqlite3 book.db < book.sql 创建数据库 11 | * 在项目根目录下执行. venv/bin/activate, 开启虚拟机 12 | * 安装FLask模块 输入pip install Flask 13 | * 输入deactive, 关闭虚拟机 14 | * 在虚拟机开启情况下,输入python book.py,然后在浏览器中打开127.0.0.1:5000即可访问 15 | 16 | ## 导入数据 17 | 在项目根目录 输入sqlite3 book.db 18 | * 进入sqlite3 shell,输入.separator "," 后,再输入 .import books.txt books 19 | -------------------------------------------------------------------------------- /book.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bayonetta/BookLibrary/58db9a9e86b0bd1f4a1189d7c0e48e22b5895978/book.db -------------------------------------------------------------------------------- /book.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import time 3 | from sqlite3 import dbapi2 as sqlite3 4 | from hashlib import md5 5 | from datetime import datetime 6 | from flask import Flask, request, session, url_for, redirect, \ 7 | render_template, abort, g, flash, _app_ctx_stack 8 | from werkzeug import check_password_hash, generate_password_hash 9 | import time 10 | 11 | #CONFIGURATION 12 | DATABASE = 'book.db' 13 | DEBUG = True 14 | SECRET_KEY = 'development key' 15 | MANAGER_NAME = 'admin' 16 | MANAGER_PWD = '123456' 17 | 18 | app = Flask(__name__) 19 | 20 | app.config.from_object(__name__) 21 | app.config.from_envvar('FLASKR_SETTINGS', silent=True) 22 | 23 | 24 | def get_db(): 25 | top = _app_ctx_stack.top 26 | if not hasattr(top, 'sqlite_db'): 27 | top.sqlite_db = sqlite3.connect(app.config['DATABASE']) 28 | top.sqlite_db.row_factory = sqlite3.Row 29 | return top.sqlite_db 30 | 31 | @app.teardown_appcontext 32 | def close_database(exception): 33 | top = _app_ctx_stack.top 34 | if hasattr(top, 'sqlite_db'): 35 | top.sqlite_db.close() 36 | 37 | def init_db(): 38 | with app.app_context(): 39 | db = get_db() 40 | with app.open_resource('book.sql', mode='r') as f: 41 | db.cursor().executescript(f.read()) 42 | db.commit() 43 | 44 | def query_db(query, args=(), one=False): 45 | cur = get_db().execute(query, args) 46 | rv = cur.fetchall() 47 | return (rv[0] if rv else None) if one else rv 48 | 49 | 50 | def get_user_id(username): 51 | rv = query_db('select user_id from users where user_name = ?', 52 | [username], one=True) 53 | return rv[0] if rv else None 54 | 55 | 56 | @app.before_request 57 | def before_request(): 58 | g.user = None 59 | if 'user_id' in session: 60 | g.user = session['user_id'] 61 | 62 | @app.route('/') 63 | def index(): 64 | return render_template('index.html') 65 | 66 | @app.route('/manager_login', methods=['GET', 'POST']) 67 | def manager_login(): 68 | error = None 69 | if request.method == 'POST': 70 | if request.form['username'] != app.config['MANAGER_NAME']: 71 | error = 'Invalid username' 72 | elif request.form['password'] != app.config['MANAGER_PWD']: 73 | error = 'Invalid password' 74 | else: 75 | session['user_id'] = app.config['MANAGER_NAME'] 76 | return redirect(url_for('manager')) 77 | return render_template('manager_login.html', error = error) 78 | 79 | 80 | @app.route('/reader_login', methods=['GET', 'POST']) 81 | def reader_login(): 82 | error = None 83 | if request.method == 'POST': 84 | user = query_db('''select * from users where user_name = ?''', 85 | [request.form['username']], one=True) 86 | if user is None: 87 | error = 'Invalid username' 88 | elif not check_password_hash(user['pwd'], request.form['password']): 89 | error = 'Invalid password' 90 | else: 91 | session['user_id'] = user['user_name'] 92 | return redirect(url_for('reader')) 93 | return render_template('reader_login.html', error = error) 94 | 95 | 96 | @app.route('/register', methods=['GET', 'POST']) 97 | def register(): 98 | error = None 99 | if request.method == 'POST': 100 | if not request.form['username']: 101 | error = 'You have to enter a username' 102 | elif not request.form['password']: 103 | error = 'You have to enter a password' 104 | elif request.form['password'] != request.form['password2']: 105 | error = 'The two passwords do not match' 106 | elif get_user_id(request.form['username']) is not None: 107 | error = 'The username is already taken' 108 | else: 109 | db = get_db() 110 | db.execute('''insert into users (user_name, pwd, college, num, email) \ 111 | values (?, ?, ?, ?, ?) ''', [request.form['username'], generate_password_hash( 112 | request.form['password']), request.form['college'], request.form['number'], 113 | request.form['email']]) 114 | db.commit() 115 | return redirect(url_for('reader_login')) 116 | return render_template('register.html', error = error) 117 | 118 | @app.route('/logout') 119 | def logout(): 120 | session.pop('user_id', None) 121 | return redirect(url_for('index')) 122 | 123 | # 添加简单的安全性检查 124 | def manager_judge(): 125 | if not session['user_id']: 126 | error = 'Invalid manager, please login' 127 | return render_template('manager_login.html', error = error) 128 | 129 | def reader_judge(): 130 | if not session['user_id']: 131 | error = 'Invalid reader, please login' 132 | return render_template('reader_login.html', error = error) 133 | 134 | 135 | @app.route('/manager/books') 136 | def manager_books(): 137 | manager_judge() 138 | return render_template('manager_books.html', 139 | books = query_db('select * from books', [])) 140 | 141 | @app.route('/manager') 142 | def manager(): 143 | manager_judge() 144 | return render_template('manager.html') 145 | 146 | @app.route('/reader') 147 | def reader(): 148 | reader_judge() 149 | return render_template('reader.html') 150 | 151 | @app.route('/manager/users') 152 | def manager_users(): 153 | manager_judge() 154 | users = query_db('''select * from users''', []) 155 | return render_template('manager_users.html', users = users) 156 | 157 | @app.route('/manager/user/modify/', methods=['GET', 'POST']) 158 | def manger_user_modify(id): 159 | user_judge() 160 | error = None 161 | user = query_db('''select * from users where user_id = ?''', [id], one=True) 162 | if request.method == 'POST': 163 | if not request.form['username']: 164 | error = 'You have to input your name' 165 | elif not request.form['password']: 166 | db = get_db() 167 | db.execute('''update users set user_name=?, college=?, num=? \ 168 | , email=? where user_id=? ''', [request.form['username'], 169 | request.form['college'], request.form['number'], 170 | request.form['email'], id]) 171 | db.commit() 172 | return redirect(url_for('manager_user', id = id)) 173 | else: 174 | db = get_db() 175 | db.execute('''update users set user_name=?, pwd=?, college=?, num=? \ 176 | , email=? where user_id=? ''', [request.form['username'], 177 | generate_password_hash(request.form['password']), 178 | request.form['college'], request.form['number'], 179 | request.form['email'], id]) 180 | db.commit() 181 | return redirect(url_for('manager_user', id = id)) 182 | return render_template('manager_user_modify.html', user=user, error = error) 183 | 184 | @app.route('/manager/user/deleter/', methods=['GET', 'POST']) 185 | def manger_user_delete(id): 186 | manager_judge() 187 | db = get_db() 188 | db.execute('''delete from users where user_id=? ''', [id]) 189 | db.commit() 190 | return redirect(url_for('manager_users')) 191 | 192 | 193 | @app.route('/manager/books/add', methods=['GET', 'POST']) 194 | def manager_books_add(): 195 | manager_judge() 196 | error = None 197 | if request.method == 'POST': 198 | if not request.form['id']: 199 | error = 'You have to input the book ISBN' 200 | elif not request.form['name']: 201 | error = 'You have to input the book name' 202 | elif not request.form['author']: 203 | error = 'You have to input the book author' 204 | elif not request.form['company']: 205 | error = 'You have to input the publish company' 206 | elif not request.form['date']: 207 | error = 'You have to input the publish date' 208 | else: 209 | db = get_db() 210 | db.execute('''insert into books (book_id, book_name, author, publish_com, 211 | publish_date) values (?, ?, ?, ?, ?) ''', [request.form['id'], 212 | request.form['name'], request.form['author'], request.form['company'], 213 | request.form['date']]) 214 | db.commit() 215 | return redirect(url_for('manager_books')) 216 | return render_template('manager_books_add.html', error = error) 217 | 218 | @app.route('/manager/books/delete', methods=['GET', 'POST']) 219 | def manager_books_delete(): 220 | manager_judge() 221 | error = None 222 | if request.method == 'POST': 223 | if not request.form['id']: 224 | error = 'You have to input the book name' 225 | else: 226 | book = query_db('''select * from books where book_id = ?''', 227 | [request.form['id']], one=True) 228 | if book is None: 229 | error = 'Invalid book id' 230 | else: 231 | db = get_db() 232 | db.execute('''delete from books where book_id=? ''', [request.form['id']]) 233 | db.commit() 234 | return redirect(url_for('manager_books')) 235 | return render_template('manager_books_delete.html', error = error) 236 | 237 | @app.route('/manager/book/', methods=['GET', 'POST']) 238 | def manager_book(id): 239 | manager_judge() 240 | book = query_db('''select * from books where book_id = ?''', [id], one=True) 241 | reader = query_db('''select * from borrows where book_id = ?''', [id], one=True) 242 | name = query_db('''select user_name from borrows where book_id = ?''', [id], one=True) 243 | 244 | current_time = time.strftime('%Y-%m-%d',time.localtime(time.time())) 245 | if request.method == 'POST': 246 | db = get_db() 247 | db.execute('''update histroys set status = ?, date_return = ? where book_id=? 248 | and user_name=? and status=? ''', 249 | ['retruned', current_time, id, name[0], 'not return']) 250 | db.execute('''delete from borrows where book_id = ? ''' , [id]) 251 | db.commit() 252 | return redirect(url_for('manager_book', id = id)) 253 | return render_template('manager_book.html', book = book, reader = reader) 254 | 255 | @app.route('/manager/user/', methods=['GET', 'POST']) 256 | def manager_user(id): 257 | manager_judge() 258 | user = query_db('''select * from users where user_id = ?''', [id], one=True) 259 | books = None 260 | return render_template('manager_userinfo.html', user = user, books = books) 261 | 262 | 263 | @app.route('/manager/modify/', methods=['GET', 'POST']) 264 | def manager_modify(id): 265 | manager_judge() 266 | error = None 267 | book = query_db('''select * from books where book_id = ?''', [id], one=True) 268 | if request.method == 'POST': 269 | if not request.form['name']: 270 | error = 'You have to input the book name' 271 | elif not request.form['author']: 272 | error = 'You have to input the book author' 273 | elif not request.form['company']: 274 | error = 'You have to input the publish company' 275 | elif not request.form['date']: 276 | error = 'You have to input the publish date' 277 | else: 278 | db = get_db() 279 | db.execute('''update books set book_name=?, author=?, publish_com=?, publish_date=? where book_id=? ''', [request.form['name'], request.form['author'], request.form['company'], request.form['date'], id]) 280 | db.commit() 281 | return redirect(url_for('manager_book', id = id)) 282 | return render_template('manager_modify.html', book = book, error = error) 283 | 284 | @app.route('/reader/info', methods=['GET', 'POST']) 285 | def reader_info(): 286 | reader_judge() 287 | user = query_db('''select * from users where user_name=? ''', [g.user], one = True) 288 | return render_template('reader_info.html', user = user) 289 | 290 | 291 | @app.route('/reader/modify', methods=['GET', 'POST']) 292 | def reader_modify(): 293 | reader_judge() 294 | error = None 295 | user = query_db('''select * from users where user_name = ?''', [g.user], one=True) 296 | id = user[0] 297 | if request.method == 'POST': 298 | if not request.form['username']: 299 | error = 'You have to input your name' 300 | elif not request.form['password']: 301 | db = get_db() 302 | db.execute('''update users set user_name=?, college=?, num=? \ 303 | , email=? where user_id=? ''', [request.form['username'], 304 | request.form['college'], request.form['number'], 305 | request.form['email'], id]) 306 | db.commit() 307 | return redirect(url_for('reader_info')) 308 | else: 309 | db = get_db() 310 | db.execute('''update users set user_name=?, pwd=?, college=?, num=? \ 311 | , email=? where user_id=? ''', [request.form['username'], 312 | generate_password_hash(request.form['password']), 313 | request.form['college'], request.form['number'], 314 | request.form['email'], id]) 315 | db.commit() 316 | return redirect(url_for('reader_info')) 317 | return render_template('reader_modify.html', user=user, error = error) 318 | 319 | 320 | 321 | @app.route('/reader/query', methods=['GET', 'POST']) 322 | def reader_query(): 323 | reader_judge() 324 | error = None 325 | books = None 326 | if request.method == 'POST': 327 | if request.form['item'] == 'name': 328 | if not request.form['query']: 329 | error = 'You have to input the book name' 330 | else: 331 | books = query_db('''select * from books where book_name = ?''', 332 | [request.form['query']]) 333 | if not books: 334 | error = 'Invalid book name' 335 | else: 336 | if not request.form['query']: 337 | error = 'You have to input the book author' 338 | else: 339 | books = query_db('''select * from books where author = ?''', 340 | [request.form['query']]) 341 | if not books: 342 | error = 'Invalid book author' 343 | return render_template('reader_query.html', books = books, error = error) 344 | 345 | @app.route('/reader/book/', methods=['GET', 'POST']) 346 | def reader_book(id): 347 | reader_judge() 348 | error = None 349 | book = query_db('''select * from books where book_id = ?''', [id], one=True) 350 | reader = query_db('''select * from borrows where book_id = ?''', [id], one=True) 351 | count = query_db('''select count(book_id) from borrows where user_name = ? ''', 352 | [g.user], one = True) 353 | 354 | current_time = time.strftime('%Y-%m-%d',time.localtime(time.time())) 355 | return_time = time.strftime('%Y-%m-%d',time.localtime(time.time() + 2600000)) 356 | if request.method == 'POST': 357 | if reader: 358 | error = 'The book has already borrowed.' 359 | else: 360 | if count[0] == 3: 361 | error = 'You can\'t borrow more than three books.' 362 | else: 363 | db = get_db() 364 | db.execute('''insert into borrows (user_name, book_id, date_borrow, \ 365 | date_return) values (?, ?, ?, ?) ''', [g.user, id, 366 | current_time, return_time]) 367 | db.execute('''insert into histroys (user_name, book_id, date_borrow, \ 368 | status) values (?, ?, ?, ?) ''', [g.user, id, 369 | current_time, 'not return']) 370 | db.commit() 371 | return redirect(url_for('reader_book', id = id)) 372 | return render_template('reader_book.html', book = book, reader = reader, error = error) 373 | 374 | @app.route('/reader/histroy', methods=['GET', 'POST']) 375 | def reader_histroy(): 376 | reader_judge() 377 | histroys = query_db('''select * from histroys, books where histroys.book_id = books.book_id and histroys.user_name=? ''', [g.user], one = False) 378 | 379 | return render_template('reader_histroy.html', histroys = histroys) 380 | 381 | if __name__ == '__main__': 382 | init_db() 383 | app.run(debug=True) 384 | 385 | 386 | 387 | -------------------------------------------------------------------------------- /book.sql: -------------------------------------------------------------------------------- 1 | create table if not exists users ( 2 | user_id integer primary key autoincrement, 3 | user_name text not null, 4 | pwd text not null, 5 | college text, 6 | num text, 7 | email text 8 | ); 9 | 10 | create table if not exists books( 11 | book_id text primary key, 12 | book_name text not null, 13 | author text not null, 14 | publish_com text not null, 15 | publish_date text not null 16 | ); 17 | 18 | drop table if exists borrows; 19 | create table borrows( 20 | user_name text not null, 21 | book_id text not null, 22 | date_borrow text not null, 23 | date_return text not null, 24 | primary key (user_name, book_id) 25 | ); 26 | 27 | drop table if exists histroys; 28 | create table histroys( 29 | histroy_id integer primary key autoincrement, 30 | book_id text not null, 31 | user_name text not null, 32 | date_borrow text not null, 33 | date_return text, 34 | status text not null default 'not return' 35 | ); 36 | -------------------------------------------------------------------------------- /books.txt: -------------------------------------------------------------------------------- 1 | 9787208061644, 追风筝的人, 胡赛尼, 上海人民出版社, 2006-5-1 2 | 9787549529322, 看见, 柴静, 广西师范大学出版社, 2013-01-01 3 | 9787507423846, 梦的解析, 弗洛伊德, 中国城市出版社, 2011-1-1 4 | 9787530201244, 穆斯林的葬礼, 霍达, 北京十月文艺出版社, 1988-12-1 5 | 9787020068425, 再见,哥伦布, 菲利普·罗斯, 人民文学出版社, 2009-6-3 6 | -------------------------------------------------------------------------------- /static/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #CAECE9; 3 | font-family: 'Trebuchet MS', sans-serif; 4 | font-size: 14px; 5 | } 6 | 7 | a { 8 | color: #26776F; 9 | } 10 | 11 | a:hover { 12 | color: #333; 13 | } 14 | 15 | input[type="text"], 16 | input[type="password"] { 17 | background: white; 18 | border: 1px solid #BFE6E2; 19 | padding: 2px; 20 | font-family: 'Trebuchet MS', sans-serif; 21 | font-size: 14px; 22 | -moz-border-radius: 2px; 23 | -webkit-border-radius: 2px; 24 | color: #105751; 25 | } 26 | 27 | input[type="submit"] { 28 | background: #105751; 29 | border: 1px solid #073B36; 30 | padding: 1px 3px; 31 | font-family: 'Trebuchet MS', sans-serif; 32 | font-size: 14px; 33 | font-weight: bold; 34 | -moz-border-radius: 2px; 35 | -webkit-border-radius: 2px; 36 | color: white; 37 | } 38 | 39 | div.page { 40 | background: white; 41 | border: 1px solid #6ECCC4; 42 | width: 700px; 43 | margin: 30px auto; 44 | } 45 | 46 | div.page h1 { 47 | background: #6ECCC4; 48 | margin: 0; 49 | padding: 10px 14px; 50 | color: white; 51 | letter-spacing: 1px; 52 | text-shadow: 0 0 3px #24776F; 53 | font-weight: normal; 54 | } 55 | 56 | div.page div.navigation { 57 | background: #DEE9E8; 58 | padding: 4px 10px; 59 | border-top: 1px solid #ccc; 60 | border-bottom: 1px solid #eee; 61 | color: #888; 62 | font-size: 12px; 63 | letter-spacing: 0.5px; 64 | } 65 | 66 | div.page div.navigation a { 67 | color: #444; 68 | font-weight: bold; 69 | } 70 | 71 | div.page h2 { 72 | margin: 0 0 15px 0; 73 | color: #105751; 74 | text-shadow: 0 1px 2px #ccc; 75 | } 76 | 77 | div.page div.body { 78 | padding: 10px; 79 | } 80 | 81 | div.page div.footer { 82 | background: #eee; 83 | color: #888; 84 | padding: 5px 10px; 85 | font-size: 12px; 86 | } 87 | 88 | div.page div.followstatus { 89 | border: 1px solid #ccc; 90 | background: #E3EBEA; 91 | -moz-border-radius: 2px; 92 | -webkit-border-radius: 2px; 93 | padding: 3px; 94 | font-size: 13px; 95 | } 96 | 97 | div.page ul.messages { 98 | list-style: none; 99 | margin: 0; 100 | padding: 0; 101 | } 102 | 103 | div.page ul.messages li { 104 | margin: 10px 0; 105 | padding: 5px; 106 | background: #F0FAF9; 107 | border: 1px solid #DBF3F1; 108 | -moz-border-radius: 5px; 109 | -webkit-border-radius: 5px; 110 | min-height: 48px; 111 | } 112 | 113 | div.page ul.messages p { 114 | margin: 0; 115 | } 116 | 117 | div.page ul.messages li img { 118 | float: left; 119 | padding: 0 10px 0 0; 120 | } 121 | 122 | div.page ul.messages li small { 123 | font-size: 0.9em; 124 | color: #888; 125 | } 126 | 127 | div.page div.twitbox { 128 | margin: 10px 0; 129 | padding: 5px; 130 | background: #F0FAF9; 131 | border: 1px solid #94E2DA; 132 | -moz-border-radius: 5px; 133 | -webkit-border-radius: 5px; 134 | } 135 | 136 | div.page div.twitbox h3 { 137 | margin: 0; 138 | font-size: 1em; 139 | color: #2C7E76; 140 | } 141 | 142 | div.page div.twitbox p { 143 | margin: 0; 144 | } 145 | 146 | div.page div.twitbox input[type="text"] { 147 | width: 585px; 148 | } 149 | 150 | div.page div.twitbox input[type="submit"] { 151 | width: 70px; 152 | margin-left: 5px; 153 | } 154 | 155 | ul.flashes { 156 | list-style: none; 157 | margin: 10px 10px 0 10px; 158 | padding: 0; 159 | } 160 | 161 | ul.flashes li { 162 | background: #B9F3ED; 163 | border: 1px solid #81CEC6; 164 | -moz-border-radius: 2px; 165 | -webkit-border-radius: 2px; 166 | padding: 4px; 167 | font-size: 13px; 168 | } 169 | 170 | div.error { 171 | margin: 10px 0; 172 | background: #FAE4E4; 173 | border: 1px solid #DD6F6F; 174 | -moz-border-radius: 2px; 175 | -webkit-border-radius: 2px; 176 | padding: 4px; 177 | font-size: 13px; 178 | } 179 | .login_form {text-align:text} 180 | -------------------------------------------------------------------------------- /templates/#manager_user_modify.html#: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block title %} 用户信息修改 {% endblock %} 3 | {% block link %} 4 | 返回 5 | {% endblock %} 6 | {% block body %} 7 | {% if error %} 8 |
9 | Errror : {{error}} 10 |
11 | {% endif %} 12 |
13 |
14 |
用户名:
15 |
16 |
请输入新密码(不输入就是不修改):
17 |
18 |
学院:
19 |
20 |
学号:
21 |
22 |
邮箱:
23 |
24 |
25 |
26 |
27 | 28 | {% endblock %} 29 | -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block title %}主页{% endblock %} 3 | {% block link %} 4 | 管理员登录 | 5 | 读者登录 6 | {% endblock %} 7 | 8 | {% block body %} 9 |

欢迎使用

10 | {% endblock %} 11 | -------------------------------------------------------------------------------- /templates/layout.html: -------------------------------------------------------------------------------- 1 | 2 | {% block title %} 图书管理系统 {% endblock %} 3 | 4 |
5 |

图书管理系统

6 | 9 |
10 | {% block body %}{% endblock %} 11 |
12 | 15 |
16 | 17 | -------------------------------------------------------------------------------- /templates/manager.html: -------------------------------------------------------------------------------- 1 | {% extends 'layout.html' %} 2 | {% block title%} 功能导航 {% endblock %} 3 | {% block link%} 4 | 注销 [{{ g.user}}] | 5 | 图书管理 | 6 | 用户管理 7 | {% endblock%} 8 | -------------------------------------------------------------------------------- /templates/manager_book.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block title %} 图书主页 {% endblock %} 3 | 4 | {% block link %} 5 | 返回 | 6 | {% if book %} 7 | 修改 8 | {% endif%} 9 | {% endblock %} 10 | {% block body %} 11 |

图书信息

12 | {% if book %} 13 |
  • ISBN {{book.book_id}}
  • 14 |
  • 书名 {{book.book_name}}
  • 15 |
  • 作者 {{book.author}}
  • 16 |
  • 出版社 {{book.publish_com}}
  • 17 |
  • 出版日期 {{book.publish_date}}
  • 18 | {% endif %} 19 |

    借阅信息

    20 | {% if reader %} 21 |
  • 借阅者姓名 {{reader.user_name}}
  • 22 |
  • 借阅日期 {{reader.date_borrow}}
  • 23 |
  • 还书日期 {{reader.date_return}}
  • 24 |
    25 |
    26 | 27 |
    28 |
    29 | {% else %} 30 |
  • 31 | {% endif %} 32 | {% endblock %} 33 | -------------------------------------------------------------------------------- /templates/manager_books.html: -------------------------------------------------------------------------------- 1 | {% extends 'layout.html' %} 2 | {% block title%} 图书管理 {% endblock %} 3 | {% block link%} 4 | 返回 | 5 | 添加 | 6 | 删除 7 | {% endblock%} 8 | {% block body%} 9 |

    图书管理

    10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | {% for book in books%} 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | {% endfor %} 29 |
    ISBN 书名 作者 出版商 出版时间 查看信息
    {{book.book_id}} {{book.book_name}} {{book.author}} {{book.publish_com}} {{book.publish_date}} 点击进入
    30 | {% endblock%} 31 | -------------------------------------------------------------------------------- /templates/manager_books_add.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block title %} 增添书目 {% endblock %} 3 | {% block link %} 4 | 返回 5 | {% endblock %} 6 | {% block body %} 7 |

    增添书目

    8 | {% if error %} 9 |
    10 | Error : {{error}} 11 |
    12 | {% endif %} 13 |
    14 |
    15 |
    ISBN:
    16 |
    17 |
    书名:
    18 |
    19 |
    作者:
    20 |
    21 |
    出版社:
    22 |
    23 |
    出版日期:
    24 |
    25 |
    26 |
    27 | 28 |
    29 |
    30 | 31 | {% endblock %} 32 | -------------------------------------------------------------------------------- /templates/manager_books_delete.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block title %} 删除书目 {% endblock %} 3 | {% block link %} 4 | 返回 5 | {% endblock %} 6 | 7 | {% block body %} 8 |

    删除书目

    9 | {% if error %} 10 |
    11 | Errror : {{error}} 12 |
    13 | {% endif %} 14 |
    15 |
    16 |
    请输入书目ISBN:
    17 |
    18 |
    19 | 20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /templates/manager_index.html: -------------------------------------------------------------------------------- 1 | {% extends 'layout.html' %} 2 | {% block title%} 页面导航 {% endblock %} 3 | {% block link%} 4 | 注销 [{{ g.user}}] | 5 | 图书管理 | 6 | 用户管理 7 | {% endblock%} 8 | {% block body%} 9 | {% endblock%} 10 | -------------------------------------------------------------------------------- /templates/manager_login.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block title%} 管理员登录 {% endblock%} 3 | {% block link%} 4 | 返回 5 | {% endblock %} 6 | {% block body %} 7 |

    管理员登录

    8 | {% if error %} 9 |
    10 | Error : {{ error }} 11 |
    12 | {% endif %} 13 |
    14 |
    15 |
    用户名:
    16 |
    17 |
    密码:
    18 |
    19 |
    20 |
    21 | 22 |
    23 |
    24 | {% endblock %} 25 | -------------------------------------------------------------------------------- /templates/manager_modify.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block title %} 修改书目信息 {% endblock %} 3 | {% block link %} 4 | {% if book %} 5 | 返回 6 | {% endif %} 7 | {% endblock %} 8 | {% block body %} 9 |

    修改书目信息

    10 | {% if error %} 11 |
    12 | Error : {{error}} 13 |
    14 | {% endif %} 15 | {% if book %} 16 |
    17 |
    18 |
    书名:
    19 |
    20 |
    作者:
    21 |
    22 |
    出版社:
    23 |
    24 |
    出版日期:
    25 |
    26 |
    27 |
    28 | 29 |
    30 |
    31 | {% endif %} 32 | {% endblock %} 33 | -------------------------------------------------------------------------------- /templates/manager_user_modify.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block title %} 用户信息修改 {% endblock %} 3 | {% block link %} 4 | 返回 5 | {% endblock %} 6 | {% block body %} 7 | {% if error %} 8 |
    9 | Errror : {{error}} 10 |
    11 | {% endif %} 12 |
    13 |
    14 |
    用户名:
    15 |
    16 |
    请输入新密码(不输入就是不修改):
    17 |
    18 |
    学院:
    19 |
    20 |
    学号:
    21 |
    22 |
    邮箱:
    23 |
    24 |
    25 |
    26 |
    27 | 28 | {% endblock %} 29 | -------------------------------------------------------------------------------- /templates/manager_userinfo.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block title %} 用户主页 {% endblock %} 3 | 4 | {% block link %} 5 | 返回 | 6 | 修改 | 7 | 注销 8 | {% endblock %} 9 | {% block body %} 10 |

    用户信息

    11 | {% if user %} 12 |
  • 用户名 {{user.user_name}}
  • 13 |
  • 学院名 {{user.college}}
  • 14 |
  • 学号 {{user.num}}
  • 15 |
  • 邮箱 {{user.email}}
  • 16 | {% endif %} 17 | 18 | {% endblock %} 19 | -------------------------------------------------------------------------------- /templates/manager_users.html: -------------------------------------------------------------------------------- 1 | {% extends 'layout.html' %} 2 | {% block title%} 用户管理 {% endblock %} 3 | {% block link%} 4 | 返回 5 | {% endblock%} 6 | {% block body%} 7 |

    用户管理

    8 | 9 | 10 | 11 | 12 | 13 | {% for user in users%} 14 | 15 | 16 | 17 | 18 | {% endfor %} 19 |
    用户名 用户信息
    {{user.user_name}} 点击进入
    20 | {% endblock%} 21 | -------------------------------------------------------------------------------- /templates/reader.html: -------------------------------------------------------------------------------- 1 | {% extends 'layout.html' %} 2 | {% block title %} 欢迎使用 {% endblock %} 3 | {% block link %} 4 | 注销[{{g.user}}] | 5 | 查询 | 6 | 查看个人信息 | 7 | 查看阅读记录 8 | 9 | {% endblock %} 10 | 11 | {% block body %} 12 |

    欢迎使用

    13 | {% endblock %} 14 | -------------------------------------------------------------------------------- /templates/reader_book.html: -------------------------------------------------------------------------------- 1 | {% extends 'layout.html' %} 2 | 3 | {% block title %} 书目信息 {% endblock %} 4 | {% block link %} 5 | {% if book %} 6 | 返回 7 | {% endif %} 8 | {% endblock %} 9 | 10 | {% block body %} 11 | {% if error %} 12 |
    13 | Errror : {{error}} 14 |
    15 | {% endif %} 16 |

    书目信息

    17 | {% if book %} 18 |
  • ISBN {{book.book_id}}
  • 19 |
  • 书名 {{book.book_name}}
  • 20 |
  • 作者 {{book.author}}
  • 21 |
  • 出版社 {{book.publish_com}}
  • 22 |
  • 出版日期 {{book.publish_date}}
  • 23 | {% endif %} 24 |
    25 |

    借阅信息

    26 | {% if reader %} 27 |
  • 借阅者姓名 {{reader.user_name}}
  • 28 |
  • 借阅日期 {{reader.date_borrow}}
  • 29 |
  • 还书日期 {{reader.date_return}}
  • 30 | {% else %} 31 |
  • 32 | {% endif %} 33 |
    34 |
    35 | 36 |
    37 |
    38 | 39 | {% endblock %} 40 | -------------------------------------------------------------------------------- /templates/reader_histroy.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block title %} 阅读记录 {% endblock %} 3 | {% block link %} 4 | 返回 5 | {% endblock %} 6 | {% block body %} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | {% for histroy in histroys %} 15 | 16 | 17 | 18 | 19 | 20 | 21 | {% endfor %} 22 |
    书名 借书日期 还书日期 状态
    {{histroy.book_name}} {{histroy.date_borrow}} {{histroy.date_return}} {{histroy.status}}
    23 | 24 | {% endblock %} 25 | -------------------------------------------------------------------------------- /templates/reader_info.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block title %} 个人主页 {% endblock %} 3 | 4 | {% block link %} 5 | 返回 | 6 | 修改 7 | {% endblock %} 8 | {% block body %} 9 |

    用户信息

    10 | {% if user %} 11 |
  • 用户名 {{user.user_name}}
  • 12 |
  • 学院名 {{user.college}}
  • 13 |
  • 学号 {{user.num}}
  • 14 |
  • 邮箱 {{user.email}}
  • 15 | {% endif %} 16 | 17 | {% endblock %} 18 | -------------------------------------------------------------------------------- /templates/reader_login.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block title%} 读者登录 {% endblock%} 3 | {% block link%} 4 | 返回 | 5 | 注册 6 | {% endblock%} 7 | {% block body %} 8 |

    读者登录

    9 | {% if error %} 10 |
    11 | Error : {{error}} 12 |
    13 | {% endif%} 14 |
    15 |
    16 |
    用户名:
    17 |
    18 |
    密码:
    19 |
    20 |
    21 |
    22 | 23 |
    24 |
    25 | {% endblock %} 26 | -------------------------------------------------------------------------------- /templates/reader_modify.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block title %} 个人信息修改 {% endblock %} 3 | {% block link %} 4 | 返回 5 | {% endblock %} 6 | {% block body %} 7 | {% if error %} 8 |
    9 | Errror : {{error}} 10 |
    11 | {% endif %} 12 |
    13 |
    14 |
    用户名:
    15 |
    16 |
    请输入新密码(不输入就是不修改):
    17 |
    18 |
    学院:
    19 |
    20 |
    学号:
    21 |
    22 |
    邮箱:
    23 |
    24 |
    25 |
    26 |
    27 | 28 | {% endblock %} 29 | -------------------------------------------------------------------------------- /templates/reader_query.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block title%} 查询 {% endblock %} 3 | {% block link %} 4 | 返回 5 | {% endblock %} 6 | {% block body %} 7 |

    查询

    8 | {% if error %} 9 |
    10 | Errror : {{error}} 11 |
    12 | {% endif %} 13 |
    14 |
    15 |
    16 | 20 | 21 | 22 |
    23 |
    24 |
    25 | {% if books %} 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | {% for book in books %} 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | {% endfor %} 45 | {% endif %} 46 |
    ISBN 书名 作者 出版商 出版时间 查看信息
    {{book.book_id}} {{book.book_name}} {{book.author}} {{book.publish_com}} {{book.publish_date}} 点击进入
    47 | {% endblock %} 48 | 49 | -------------------------------------------------------------------------------- /templates/register.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block title %} 注册 {% endblock %} 3 | {% block link %} 4 | 返回 5 | {% endblock %} 6 | {% block body %} 7 | {% if error %} 8 |
    9 | Errror : {{error}} 10 |
    11 | {% endif %} 12 |
    13 |
    14 |
    用户名:
    15 |
    16 |
    密码:
    17 |
    18 |
    密码(重复):
    19 |
    20 |
    学院:
    21 |
    22 |
    学号:
    23 |
    24 |
    邮箱:
    25 |
    26 |
    27 |
    28 |
    29 | 30 | {% endblock %} 31 | -------------------------------------------------------------------------------- /venv/include/python2.7: -------------------------------------------------------------------------------- 1 | /usr/include/python2.7 -------------------------------------------------------------------------------- /venv/local/include: -------------------------------------------------------------------------------- 1 | /home/bayonetta/BookLibrary/venv/include --------------------------------------------------------------------------------