_init_初始化函数对admin初始化
from apps.admin.views import bp
import apps.admin.hooks
view管理员的视图函数
from io import BytesIO
from datetime import timedelta
from flask import Blueprint, render_template, request, session, redirect, url_for, make_response, flash
from apps.admin.models import *
from utils.captcha import create_validate_code
from apps.admin.decorators import login_required
from apps.admin.forms import *
bp = Blueprint("admin",__name__,url_prefix='/admin')
#登录界面
@bp.route("/login/",methods=['GET','POST'])
def login():
error = None
if request.method == 'GET':
return render_template('admin/login.html')
else:
username = request.form.get('username')
pwd = request.form.get('password')
online = request.form.get('online')
captcha = request.form.get('captcha')
if session.get('image') != captcha:
return render_template('admin/login.html', message="验证码不对!")
users = UserModel.query.filter_by(Account=username).first()
if users:
if username ==users.Account and pwd==users.Password:
session['user_id'] = users.uid
if online:
session.permanent = True
bp.permanent_session_lifetime = timedelta(days=14)
return redirect(url_for('admin.index'))
else:
error ='用户名或密码错误'
return render_template('admin/login.html',message=error)
else:
error='查无此户'
return render_template('admin/login.html',message=error)
@bp.route('/')
@login_required
def index():
return render_template('readerinfor.html')
#调用验证码
@bp.route('/code/')
def get_code():
# 把strs发给前端,或者在后台使用session保存
code_img, strs = create_validate_code()
buf=BytesIO()
code_img.save(buf, 'JPEG', quality=70)
buf_str = buf.getvalue()
# buf.seek(0)
response = make_response(buf_str)
response.headers['Content-Type'] = 'image/jpeg'
# 将验证码字符串储存在session中
session['image'] = strs
return response
#注册界面
@bp.route('/register',methods=['POST','GET'])
def register():
error = None
if request.method == "GET":
return render_template('admin/register_admin.html')
else:
username = request.form.get('username')
password = request.form.get('password')
password2 = request.form.get('password2')
Email = request.form.get('email')
if not username or not password or not password2:
error='输入错误,请重新输入'
return render_template('admin/register_admin.html', messge=error)
if password == password2:
user=UserModel(Account=username,Password=password,Email=Email)#定义user对象,并对其属性赋值
db.session.add(user)#插入数据库
db.session.commit()#提交事务
return render_template('admin/login.html',message='注册成功,请登录')
#图书信息添加
@bp.route('/addbook',methods=['POST','GET'])
def addbook():
if request.method == 'GET':
return render_template('admin/addbook.html')
else:
Number = request.form.get('number')
Name = request.form.get("bookname")
Author = request.form.get('author')
Remark = request.form.get("remark")
Publicationdate = request.form.get("pdate")
Location = request.form.get("address")
try:
book = BookModel(Number=Number, Name=Name, Author=Author, Remark=Remark, Publicationdate=Publicationdate,
Location=Location)
db.session.add(book)
db.session.commit()
except:
db.session.rollback()
return render_template('readerinfor.html')
#图书修改
@bp.route('/changebook',methods=['GET','POST'])
def changebook():
return render_template('changebookinfor.html')
#图书删除
@bp.route('/deletebook',methods=['GET','POST'])
def deletebook():
books = BookModel()
if request.method == 'GET':
return render_template("admin/deletebook.html")
else:
Names = request.form.get('bookname')
if Names:
try:
Books = BookModel.query.filter_by(Name=Names).first()
db.session.delete(Books)
db.session.commit()
print('删除成功')
except:
db.session.rollback()
print('删除失败')
return render_template('admin/querybook.html', books=Books)
else:
Books = BookModel.query.all()
return render_template('admin/deletebook.html', books=Books)
#查询图书
@bp.route('/querybook',methods=['POST','GET'])
def querybook():
if request.method == 'GET':
return render_template('admin/querybook.html')
else:
Names = request.form.get('bookname')
if Names:
Names = request.form.get('bookname')
Books = BookModel.query.filter_by(Name=Names).all()
return render_template('admin/querybook.html', books=Books)
else:
Books = BookModel.query.all()
return render_template('admin/querybook.html', books=Books)
#图书借阅信息界面
@bp.route('/borrowrecord',methods=['POST','GET'])
def borrowrecord():
if request.method == 'GET':
borrowRecord = RecordModel.query.all()
return render_template("admin/borrowrecord.html",records=borrowRecord)
#读者信息界面
@bp.route('/readerinfor',methods=['POST','GET'])
def readerinfo():
readers = ReaderModel.query.all()
return render_template('readerinfor.html',readers=readers)
form规范输入函数
from wtforms import Form
from wtforms import StringField,BooleanField
from wtforms.validators import InputRequired,Length,Email
class LoginForm(Form):
Account= StringField(
label='用户名',
validators=[
InputRequired('用户名为必填项'),
Length(4, 20, '密码长度为4到20')
]
)
Password = StringField(
label='密码',
validators=[
InputRequired('密码为必填项'),
Length(6, 9, '密码长度为6到9')
]
)
hook.py
""" 请求进入视图函数之前判断用户是否登录,若已登录,则将当前用户的信息添加到g对象里面 """
from flask import session,g
import config
from apps.admin.views import bp
from apps.admin.models import *
@bp.before_request
def before_request():
""" 请求进入视图函数之前判断用户是否登录,若已登录,则将当前用户的信息添加到g对象里面 """
if config.ADMIN_USER_ID in session:
user_id = session.get(config.ADMIN_USER_ID)
user = UserModel.query.filter(UserModel.uid == user_id).first()
if user:
g.admin_user = user
decorators.py限制登录修饰器
from functools import wraps
from flask import session,redirect,url_for
from apps.admin.models import *
#登录限制装饰器
def login_required(f):
@wraps(f)
def wrapper(*args, **kwargs):
if session.get('user_id'):
return f(*args, **kwargs)
else:
return redirect(url_for('admin.login'))
return wrapper
大家早点做完早放假!!!最近买了自己的服务器http://59.110.54.135/欢迎大家访问我的个人博客