资源简介
系统源码,可直接实现。对应文档设计在个人上传的另一资源中
代码片段和文件信息
import time
from datetime import datetime
#日期相关操作,和time包连用表示、计算借还书日期
from sqlite3 import dbapi2 as sqlite3
#使用SQLite时,它的功能直接被集成在其中,应用会直接访问包含数据的文件
#SQLITE功能简约,小型化,追求最大磁盘效率;MYSQL功能全面,综合化,追求最大并发效率。如果只是单机上用的,数据量不是很大,
# 需要方便移植或者需要频繁读/写磁盘文件的话,就用SQLite比较合适;如果是要满足多用户同时访问,或者是网站访问量比较大是使用MYSQL比较合适.
from flask import Flask request session url_for redirect render_template abort g flash _app_ctx_stack
from hashlib import md5
#这是加密函数,将传进来的函数加密
from werkzeug import check_password_hash generate_password_hash
#数据库中直接存放明文密码是很危险的Werkzeug库中的security能够方便的实现散列密码的计算
#security库中 generate_password_hash(passwordmethod...)函数将原始密码作为输入以字符串形式输出密码的散列值
#check_password_hash(hashpassword)函数检查给出的hash密码与明文密码是否相符
#CONFIGURATION
DATAbase = ‘book.db‘
DEBUG = True
SECRET_KEY = ‘development key‘
MANAGER_NAME = ‘admin‘
MANAGER_PWD = ‘123456‘
# create our little application :
app = Flask(__name__)
app.config.from_object(__name__)
#设置一个名为 FLASKR_SETTINGS 环境变量来设定一个配置文件载入后是否覆盖默认值。
#静默开关告诉 Flask 不去关心这个环境变量键值是否存在。
app.config.from_envvar(‘FLASKR_SETTINGS‘ silent=True)
#数据库连接
def get_db():
top = _app_ctx_stack.top
if not hasattr(top ‘sqlite_db‘):
top.sqlite_db = sqlite3.connect(app.config[‘DATAbase‘])
top.sqlite_db.row_factory = sqlite3.Row
return top.sqlite_db
#这个装饰器的作用就是向请求上下文中注册一个函数,当上下文销毁时调用。
@app.teardown_appcontext
def close_database(exception):
top = _app_ctx_stack.top
if hasattr(top ‘sqlite_db‘):
top.sqlite_db.close()
#初始化数据库
def init_db():
with app.app_context():
db = get_db()
with app.open_resource(‘book.sql‘ mode=‘r‘) as f:
db.cursor().executescript(f.read())
db.commit()
#访问数据库
def query_db(query args=() one=False):
cur = get_db().execute(query args)
rv = cur.fetchall()
return (rv[0] if rv else None) if one else rv
#通过用户名(设置唯一,不可重名)给读者id
def get_user_id(username):
rv = query_db(‘select user_id from users where user_name = ?‘ [username] one=True)
return rv[0] if rv else None
@app.before_request
def before_request():
g.user = None
if ‘user_id‘ in session:
g.user = session[‘user_id‘]
@app.route(‘/‘)
def index():
return render_template(‘index.html‘)
@app.route(‘/manager_login‘ methods=[‘GET‘ ‘POST‘])
def manager_login():
error = None
if request.method == ‘POST‘:
if request.form[‘username‘] != app.config[‘MANAGER_NAME‘]:
error = ‘Invalid username‘
elif request.form[‘password‘] != app.config[‘MANAGER_PWD‘]:
error = ‘Invalid password‘
else:
session[‘user_id‘] = app.config[‘MANAGER_NAME‘]
return redirect(url_for(‘manager‘))
return render_template(‘manager_login.html‘ error = error)
#读者登录
@app.route(‘/reader_login‘ methods=[‘GET‘ ‘POST‘])
def reader_login():
error = None
if request.method == ‘POST‘:
user = query_db(‘‘‘select * from users where user_name = ?‘‘‘
[request.form[‘username‘]] one=True)
if user is None:
error = ‘Invalid username‘
elif not check_password_hash(user[‘pwd‘] request.form[‘password‘]):
error = ‘Invalid password‘
else:
session[‘user_id‘] = user[‘user_n
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-01-24 12:30 BookLibrary-master\
文件 15601 2018-10-22 16:55 BookLibrary-master\book.py
文件 883 2018-10-22 11:42 BookLibrary-master\book.sql
目录 0 2019-01-24 12:30 BookLibrary-master\static\
文件 3110 2014-03-27 12:28 BookLibrary-master\static\st
目录 0 2019-01-24 12:30 BookLibrary-master\templates\
文件 280 2018-10-08 15:37 BookLibrary-master\templates\index.html
文件 434 2018-10-21 13:27 BookLibrary-master\templates\layout.html
文件 293 2014-03-27 12:28 BookLibrary-master\templates\manager.html
文件 931 2014-03-27 12:28 BookLibrary-master\templates\manager_book.html
文件 1063 2014-03-27 12:28 BookLibrary-master\templates\manager_books.html
文件 822 2014-03-27 12:28 BookLibrary-master\templates\manager_books_add.html
文件 513 2014-03-27 12:28 BookLibrary-master\templates\manager_books_delete.html
文件 323 2014-03-27 12:28 BookLibrary-master\templates\manager_index.html
文件 604 2014-03-27 12:28 BookLibrary-master\templates\manager_login.html
文件 937 2014-03-27 12:28 BookLibrary-master\templates\manager_modify.html
文件 946 2014-03-27 12:28 BookLibrary-master\templates\manager_user_modify.html
文件 554 2014-03-27 12:28 BookLibrary-master\templates\manager_userinfo.html
文件 583 2014-03-27 12:28 BookLibrary-master\templates\manager_users.html
文件 416 2018-10-11 14:34 BookLibrary-master\templates\reader.html
文件 977 2014-03-27 12:28 BookLibrary-master\templates\reader_book.html
文件 706 2014-03-27 12:28 BookLibrary-master\templates\reader_histroy.html
文件 446 2014-03-27 12:28 BookLibrary-master\templates\reader_info.html
文件 681 2014-03-27 12:28 BookLibrary-master\templates\reader_login.html
文件 923 2014-03-27 12:28 BookLibrary-master\templates\reader_modify.html
文件 1382 2014-03-27 12:28 BookLibrary-master\templates\reader_query.html
文件 932 2014-03-27 12:28 BookLibrary-master\templates\register.html
相关资源
- pip-10.0.1.tar.gz
- Data Science from Scratch 2nd Edition
- shape_predictor_68_face_landmarks.dat.bz2 68个标
- 爬取豆瓣电影TOP250程序,包含非常详
- 2018年最新 统计用全国行政区划数据库
- 中文维基百科语料库百度网盘网址.
- MSCNN_dehaze.rar
- 爬取豆瓣排行榜电影数据(含GUI界面
- 字典文本资源
- Brainfuck / OoK 解码脚本
- 安卓期末项目--记账本app.zip
- 案例实战信用卡欺诈检测数据集
- 招商策略_抱团启示录那些年我们一起
- sip-4.19.zip
- 树莓派3b+学习使用教程
- numpy 中文学习手册
- pytorch-1.4.0-py3.7_cpu_0.tar.bz2
- 机器学习实战 高清完整版PDF
- 泰坦尼克号0.81准确率实验报告.docx
-
abaqus sc
ripting reference manual.pdf - 网页版聊天程序--网络程序设计课程大
- Give Me Some Credit
-
ba
semap安装出错时,正确得pyproj文件 - 微信头像拼接工具
- 统计思维:程序员数学之概率统计第
- 基于open cv的人脸识别
- Django web 开发中文 完整版本
- 影视领域可视化数据挖掘综述
- pyexiv2安装包
- dlib-19.4.0-cp35.whl Windows64位 不用boos
评论
共有 条评论