- 用户信息管理
- 人工智能
- 人工智能
- 人工智能
- 人工智能
- 人工智能
- 人工智能
- 人工智能
- 人工智能
- 人工智能
- 人工智能
- 人工智能
- 人工智能
aaaa
Flask框架作为当下最流行的web框架,其功能和特点博主在初识Flask框架博客中早已有过介绍,这里会用Flask框架来实现CRUD增删改查。
先来看看效果图:
主页面:
用户管理页面和职业管理页面:
可以在此页面进行用户和职位信息的增删改查。
以下是具体实现的代码:
config.py——配置文件,在app.py中引用
DEBUG = True
SECRET_KEY = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
PAGE_SIZE = 10
SERVER_ADDR = '10.0.14.204'
SERVER_PORT = 80
app.py 运行文件
from flask import Flask, render_template,request,session, url_for,Response
import config
from config_class import *
from datetime import timedelta
from controller.usercontroller import usercontroller
from filter.sessionfilter import sessionfilter
from controller.jobcontroller import jobtaskcontroller
from controller.pycontroller import pytaskcontroller
from controller.shopcontroller import shoptaskcontroller
import hashlib
app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'AAAGGGGCCFDDDFFFDDDD'
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(minutes=30) #设置session的保存时间。
# 是使用config py文件定义配置
app.config.from_object(config)
# 是使用class定义配置
app.config.from_object(DebugConfig)
app.register_blueprint(usercontroller) # 声明
app.register_blueprint(sessionfilter) # 声明
app.register_blueprint(jobtaskcontroller)
app.register_blueprint(pytaskcontroller)
app.register_blueprint(shoptaskcontroller)
@app.route('/') # URL路由
def index():
print(session.get('user'))
return render_template('index.html')
if __name__ == '__main__':
app.run(host=app.config['SERVER_ADDR'], port=app.config['SERVER_PORT'], debug=True)
usercontroller.py
from flask import Blueprint, Flask, render_template,request,session, url_for,Response, jsonify
import hashlib
from service.userservice import UserService
from entity.user import User
import json
from filter.sessionfilter import sessionFilter
import os
usercontroller = Blueprint('usercontroller', __name__)
userService = UserService()
@usercontroller.route("/login.do", methods=['POST', 'GET'])
def login():
userName = request.form.get('userName') # 表单提交的数据使用request.form[]
userPwd = request.form.get('userPwd')
result = userService.findUserByUserName(userName)
print(result)
if result and result[0][2] == userPwd:
userItem = {}
userItem['userId'] = result[0][0]
userItem['userName'] = result[0][1]
session['user'] = userItem
print(hashlib.md5('123456'.encode(encoding='utf-8')).hexdigest())
# 登录成功,则保存Cookies信息
resp = Response(render_template('main.html', messasge='登录成功'))
resp.set_cookie('userName', userName, max_age=7*24*3600)
resp.set_cookie('userPwd', userPwd, max_age=7*24*3600)
return resp
pass
elif result and result[2] != userPwd:
return render_template('login.html', message='用户名或密码错误')
pass
return render_template('login.html')
pass
@usercontroller.route('/logout.do', methods=['POST', 'GET'])
def logout():
session.clear()
print('==========', session.get('user'))
resp = Response(render_template('login.html'))
resp.delete_cookie('userName')
resp.delete_cookie('userPwd')
return resp
pass
@usercontroller.route('/goregist.do')
def goRegist():
return render_template('regist.html')
pass
@usercontroller.route('/regist.do', methods=['POST', 'GET'])
def regist():
userData = request.get_data()
userDict = json.loads(userData)
user = User()
user.userId = userDict.get('userId')
user.userName = userDict.get('userName') # 表单提交的数据使用request.form[]
user.userPwd = userDict.get('userPwd')
user.userSex = userDict.get('userSex')
user.userBirth = userDict.get('userBirth')
user.userPic = userDict.get('userPic')
user.userIntro = userDict.get('userIntro')
result = userService.createUser(user)
if result > 0:
return render_template('login.html', message='注册成功')
pass
else:
return render_template('regist.html', message='注册失败')
pass
pass
# 查询用户,并且显示
@usercontroller.route('/gouserinfo.do', methods=['POST', 'GET'])
def goUserInfo():
userName = request.form.get('userName')
userSex = request.form.get('userSex')
user = User()
user.userName = userName
user.userSex = userSex
userList = userService.findUserList(user)
return render_template('systeminfo/userinfo.html', userList = userList, user=user)
pass
# 删除用户,并且显示
@usercontroller.route('/removeruser.do', methods=['POST', 'GET'])
def goRemoveUser():
userId = request.args.get('userId')
userName = request.form.get('userName')
userSex = request.form.get('userSex')
user = User()
user.userName = userName
user.userSex = userSex
result = userService.removeUser(userId)
userList = userService.findUserList(user)
return render_template('systeminfo/userinfo.html', userList = userList, message='删除成功' if result >0 else '删除失败')
pass
@usercontroller.route('/gomodifyuser.do', methods=['POST', 'GET'])
def goModifyUser():
userId = request.args.get('userId')
user = userService.findUserByUserId(userId)
return render_template('systeminfo/modifyuser.html', user=user)
pass
@usercontroller.route('/gomodifysubmit.do', methods=['POST', 'GET'])
def goSubmitModifyUser():
userId = request.form.get('userId')
userName = request.form.get('userName')
userSex = request.form.get('userSex')
user = User()
user.userName = userName
user.userSex = userSex
user.userId = userId
result = userService.updateUser(user)
userList = userService.findUserList(user)
return render_template('systeminfo/userinfo.html', userList=userList, message='修改成功' if result > 0 else '修改失败')
pass
@usercontroller.route('/checkusername.do', methods=['POST', 'GET'])
def checkUserName():
userData = request.get_data()
userDict = json.loads(userData)
user = userService.findUserByUserName(userDict.get('userName'))
dicts = {}
if user:
dicts = {'code':1}
pass
else:
dicts = {'code':0}
pass
return json.dumps(dicts)
pass
@usercontroller.route('/goajaxuserinfo.do', methods=['POST', 'GET'])
@sessionFilter
def goAjaxUserInfo():
return render_template("systeminfo/userinfo.html")
pass
@usercontroller.route('/ajaxuserinfo.do', methods=['POST', 'GET'])
def getUserInfo():
userData = request.get_data()
userDict = json.loads(userData)
tData = {}
user = User()
user.userName = userDict.get('userName')
user.userSex = userDict.get('userSex')
currentPage = int(userDict.get('currentPage'))
pageSize = int(userDict.get('pageSize'))
opr = userDict.get('opr')
userId = int(userDict.get('userId'))
user.userId = userId
delResult = 0
if opr == 'del':
delResult = userService.removeUser(userId)
pass
elif opr == 'update':
tUser = userService.findUserByUserId(userId)
tData['userId'] = tUser.userId
tData['userName'] = tUser.userName
tData['userSex'] = tUser.userSex
returnData = {'code': 1, 'userData': tData, 'pageSize': pageSize, 'currentPage': currentPage, 'opr':'update'}
return json.dumps(returnData)
elif opr == 'submitUpdate':
userService.updateUser(user)
pass
result = userService.findPageUserList(user, pageSize, currentPage)
counts = userService.countUsers(user)
totalPage = 0
if(counts%pageSize == 0):
totalPage = counts//pageSize
else:
totalPage = counts // pageSize + 1
pass
returnData = {'code':1, 'userData':result, 'pageSize':pageSize, 'currentPage':currentPage, 'totalPage':totalPage, 'delcode':delResult, 'opr':'search','counts':counts}
return json.dumps(returnData)
pass
@usercontroller.route('/upload.do', methods=['POST', 'GET'], strict_slashes=False)
def uploadFile():
# 后缀需要检查的
file = request.files.get('upload')
file.save(os.path.dirname(__file__) + os.sep + '..' + os.sep + 'static' + os.sep + 'uploads' + os.sep + file.filename)
return json.dumps({'url': os.sep + 'static' + os.sep + 'uploads' + os.sep + file.filename})
userserver.py 前后端的连接
from dao.userdao import UserDao
from entity.user import User
class UserService:
def findUserByUserName(self, userName):
userDao = UserDao()
return userDao.findUserByUserName(userName)
pass
def createUser(self, user):
userDao = UserDao()
return userDao.createUser(user)
pass
def findUserList(self, user):
userDao = UserDao()
userlist = []
result = userDao.findUserList(user)
for temp in result:
tuser = User()
tuser.userId = temp[0]
tuser.userName = temp[1]
tuser.userSex = temp[4]
userlist.append(tuser)
pass
return userlist
pass
def removeUser(self, userId):
userDao = UserDao()
return userDao.removeUser(userId)
pass
def findUserByUserId(self, userId):
userDao = UserDao()
result = userDao.findUserByUserId(userId)
user = None
if result:
user = User()
user.userId = result[0][0]
user.userName = result[0][1]
user.userSex = result[0][2]
pass
return user
pass
# 修改用户信息
def updateUser(self, user):
userDao = UserDao()
return userDao.updateUser(user)
pass
def findPageUserList(self, user, pageSize, currentPage):
userDao = UserDao()
return userDao.findPageUserList(user, pageSize, currentPage)
pass
def countUsers(self, user):
userDao = UserDao()
return userDao.countUsers(user)[0]
pass
pass
user.py 用户实体类封装
class User():
def __init__(self):
self.__userId = None
self.__userName = None
self.__userPwd = None
self.__userSex = None
self.__userPic = None
self.__userBirth = None
self.__userIntro = None
self.__userDeptId = None
self.__userDeptName = None
self.__userRole = None
pass
@property
def userId(self):
return self.__userId
pass
@userId.setter
def userId(self, userId):
self.__userId = userId
pass
@property
def userName(self):
return self.__userName
pass
@userName.setter
def userName(self, userName):
self.__userName = userName
pass
@property
def userPwd(self):
return self.__userPwd
pass
@userPwd.setter
def userPwd(self, userPwd):
self.__userPwd = userPwd
pass
@property
def userSex(self):
return self.__userSex
pass
@userSex.setter
def userSex(self, userSex):
self.__userSex = userSex
pass
@property
def userPic(self):
return self.__userPic
pass
@userPic.setter
def userPic(self, userPic):
self.__userPic = userPic
pass
@property
def userBirth(self):
return self.__userBirth
pass
@userBirth.setter
def userBirth(self, userBirth):
self.__userBirth = userBirth
pass
@property
def userIntro(self):
return self.__userIntro
pass
@userIntro.setter
def userIntro(self, userIntro):
self.__userIntro = userIntro
pass
@property
def userDeptId(self):
return self.__userDeptId
pass
@userDeptId.setter
def userDeptId(self, userDeptId):
self.__userDeptId = userDeptId
pass
@property
def userDeptName(self):
return self.__userDeptName
pass
@userDeptName.setter
def userDeptName(self, userDeptName):
self.__userDeptName = userDeptName
pass
@property
def userRole(self):
return self.__userRole
pass
@userRole.setter
def userRole(self, userRole):
self.__userRole = userRole
pass
pass
sessionfilter.py 判断登录用户是否存在,做出相应的处理
from flask import Blueprint, Flask, render_template,request,session, url_for,Response, jsonify
sessionfilter = Blueprint('sessionfilter', __name__)
def sessionFilter(func):
def inner(*args, **kw):
user = session.get('user')
if not user:
return render_template("login.html")
pass
return func(*args, **kw)
pass
return inner
pass
js/userregist.js 含有富文本编辑器,属于ajax的异步文件上传
function ajaxUploadFile(){
//创建FormData对象,初始化为form表单中的数据。需要添加其他数据可使用formData.append("property", "value");
var formData = new FormData($('#regForm')[0]); // $('#regForm')[0] == document.getElementById('regForm')== document.forms[0] == document.regForm
//ajax异步上传
$.ajax({
url: "/upload.do",
type: "POST",
data: formData, // 1、json对象{} 2、json String 3、formData对象
xhr: function () { //获取ajaxSettings中的xhr对象,为它的upload属性绑定progress事件的处理函数
myXhr = $.ajaxSettings.xhr();
if (myXhr.upload) { //检查upload属性是否存在
//绑定progress事件的回调函数 给
myXhr.upload.addEventListener('progress', progressHandlingFunction, false);
}
return myXhr; //xhr对象返回给jQuery使用
},
success: function (result) {
result = JSON.parse(result);
$("#userImg").attr("src", result.url); // 前端显示上传完成的图片
document.regForm.picPath.value = result.url;
// $("#result").html(result);
},
contentType: false, //必须false才会自动加上正确的Content-Type
processData: false //必须false才会避开jQuery对 formdata 的默认处理
});
}
//上传进度回调函数:
function progressHandlingFunction(e) {
if (e.lengthComputable) {
$('#progress').attr({ value: e.loaded, max: e.total }); //更新数据到进度条
var percent = e.loaded / e.total * 100;
$('#progress').html(e.loaded + "/" + e.total + " bytes. " + percent.toFixed(2) + "%");
$('#progress').css('width', percent.toFixed(2) + "%");
}
}
function submitRegist() {
// 提交之前先对表单进行验证
var bootstrapValidator = $("#regForm").data("bootstrapValidator");
bootstrapValidator.validate();
if(bootstrapValidator.isValid()) {
var a = document.regForm.userName.value
$.ajax({
type: 'post', // 传数据的方式
url: '/regist.do',
dataType: 'json', // xml、json、script、html
data: JSON.stringify({
'userName': document.regForm.userName.value, // $('#userName') == document.getElementById('userName')
'userPwd': document.regForm.userPwd.value,
'userPic': document.regForm.picPath.value,
'userBirth': document.regForm.userBirth.value,
'userSex': document.regForm.userSex.value,
'userIntro': userEditor.getData() // 重用一个ajax请求实现增加删除修改查询 CRUD
}),
error: function (xhr, err) {
alert('请求失败,请检查,' + err + '!')
},
success: function (data, textStatus) { // success对应的回调函数的第一个参数,是服务器返回的数据
if (data.result > 0) {
alert("注册成功,请登录")
$('#modal-info').modal('hide')
} else {
alert("注册失败")
}
}
});
}
}
$(document).ready(function() {
$('#regForm').bootstrapValidator({
message: 'This value is not valid',
feedbackIcons: {
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields: {
userName: {
message: '用户名验证失败',
validators: {
notEmpty: {
message: '用户名不能为空'
},
stringLength: {
min: 6,
max: 18,
message: '用户名长度必须在6到18位之间'
},
regexp: {
regexp: /^[a-zA-Z]\w{5,17}$/,
message: '用户名必须是字母开头,必须由数字、字母组成'
}
}
},
userPwd: {
validators: {
notEmpty: {
message: '密码不能为空'
},
stringLength: {
min: 6,
max: 18,
message: '密码长度必须在6到18位之间'
},
identical: {
field: 'reUserPwd',
message: '两次密码必须一致'
},
different: {
field: 'userName',
message: '密码不能与用户名相同'
},
regexp: {
regexp: /^\w+$/,
message: '密码必须由字符组成'
}
}
},
reUserPwd: {
validators: {
notEmpty: {
message: '确认密码不能为空'
},
stringLength: {
min: 6,
max: 18,
message: '密码长度必须在6到18位之间'
},
identical: {
field: 'userPwd',
message: '两次密码必须一致'
},
different: {
field: 'userName',
message: '密码不能与用户名相同'
},
regexp: {
regexp: /^\w+$/,
message: '密码必须由字符组成'
}
}
},
}
});
});
userdao.py
from .basedao import BaseDao
class UserDao(BaseDao):
def findUserByUserName(self, userName):
try:
sql = "select * from job_user where user_name=%s"
self.getConnection()
self.execute(sql, (userName,))
result = self.fetch()
finally:
self.close()
return result
pass
def createUser(self, user):
try:
param = [user.userName, user.userPwd]
sql = "insert into job_user (user_name, user_pwd) values(%s, %s)"
value = "(%s, %s"
if user.userSex:
sql += ",user_sex"
value += ",%s"
param.append(user.userSex)
self.getConnection()
result = self.execute(sql, (user.userName, user.userPwd))
self.commit() # 执行了sql语句之后要commit
return result
finally:
self.close()
pass
pass
def findUserList(self, user):
try:
params = []
# sql语句和params就需要是动态
sql = "select * from job_user where 1=1 " # where 1=1是为了便于增加and
if user.userName:
sql += " and user_name like %s " # 模糊查询
params.append('%'+user.userName + '%')
pass
if user.userSex:
sql += " and user_sex=%s"
params.append(user.userSex)
pass
self.getConnection()
self.execute(sql, params)
result = self.fetch()
finally:
self.close()
return result
pass
def removeUser(self, userId):
try:
sql = "delete from job_user where user_id=%s"
self.getConnection()
result = self.execute(sql, (userId, ))
self.commit() # 执行了sql语句之后要commit
return result
finally:
self.close()
pass
pass
def findUserByUserId(self, userId):
try:
sql = "select * from job_user where user_id=%s"
self.getConnection()
self.execute(sql, (userId,))
result = self.fetch()
finally:
self.close()
return result
pass
def updateUser(self, user):
try:
sql = "update job_user set user_sex=%s where user_id=%s"
self.getConnection()
result = self.execute(sql, (user.userSex, user.userId))
self.commit() # 执行了sql语句之后要commit
return result
finally:
self.close()
pass
pass
def findPageUserList(self, user, pageSize, currentPage):
try:
params = []
# sql语句和params就需要是动态
sql = "select * from job_user where 1=1 " # where 1=1是为了便于增加and
if user.userName:
sql += " and user_name like %s " # 模糊查询
params.append('%' + user.userName + '%')
pass
if user.userSex:
sql += " and user_sex=%s"
params.append(user.userSex)
pass
startRow = (currentPage - 1)*pageSize
sql += "limit %s, %s"
params.append(startRow)
params.append(pageSize)
self.getConnection()
self.execute(sql, params)
result = self.fetch()
finally:
self.close()
return result
pass
def countUsers(self, user):
params = []
# sql语句和params就需要是动态
sql = "select count(*) from job_user where 1=1 " # where 1=1是为了便于增加and
if user.userName:
sql += " and user_name like %s " # 模糊查询
params.append('%' + user.userName + '%')
pass
if user.userSex:
sql += " and user_sex=%s"
params.append(user.userSex)
pass
self.getConnection()
self.execute(sql, params)
result = self.fetchOne()
return result
pass
pass
userdata.js文件
function getUserData(currentPage, pageSize, opr, userId) {
var userName = document.searchForm.userName.value
var userSex = document.searchForm.userSex.value
if(opr == 'del'){
if(!confirm('确定要删除吗?')){
return false
}
}else if(opr == 'submitUpdate'){
userName = document.userForm.userName.value
userSex = document.userForm.userSex.value
userId = document.userForm.userId.value
currentPage = document.userForm.currentPage.value
pageSize = document.userForm.pageSize.value
}
$.ajax({
type: 'post', // 传数据的方式
url: '/ajaxuserinfo.do',
dataType: 'json', // xml、json、script、html
data:JSON.stringify({
'userName': userName, // $('#userName') == document.getElementById('userName')
'userSex' : userSex,
'userId': userId,
'pageSize': pageSize,
'currentPage': currentPage,
'opr': opr
}),
error: function(xhr, err){
alert('请求失败,请检查,' + err + '!')
},
success: function(data, textStatus){ // success对应的回调函数的第一个参数,是服务器返回的数据
if(data.code == 1 && opr != 'update'){
var htmlText = ""
for(var i =0;i ' +
' \n' +
' ' + data.userData[i][0] + ' \n' +
' ' + data.userData[i][1] + ' \n' +
' ' + data.userData[i][4] + ' \n' +
' \n' +
' ' +
' '+
' \n' +
' \n'
}
pageText = ''+ '当前第' + data.currentPage + '页 总共有' + data.totalPage + '页 ';
if(data.currentPage <= 1) {
pageText += '首页 上一页 ';
}else{
pageText += '首页 ' +
'上一页 ';
}
if(data.currentPage >= data.totalPage){
pageText += '下一页 尾页 ';
}else {
pageText += '下一页 ' +
'尾页 ';
}
pageText +='总共有'+ data.counts + '条 '
$('#dataBody').empty()
$('#dataBody').append(htmlText)
$('#dataBody').append(pageText)
document.searchForm.currentPage.value = data.currentPage
document.searchForm.pageSize.value=data.pageSize
}else if(data.code == 1 && opr == 'update'){
document.userForm.userName.value = data.userData.userName
document.userForm.userSex.value = data.userData.userSex
document.userForm.userId.value = data.userData.userId
document.userForm.currentPage.value = data.currentPage
document.userForm.pageSize.value = data.pageSize
$('#modal-default').modal()
}
}
});
}
$(document).ready(
function(){
getUserData(1, 10, 'search', 0)
}
)
然后是前端页面代码:
top.html
智能职位数据分析平台
Job
Hutter
职位数据分析平台
left.html
main.html
{% include 'top.html' %}
{% include 'left.html' %}
{% include 'footer.html' %}
footer.html
index.html 登录之后的页面,其中含有注册弹窗
职位分析系统主页
左广告
右广告
login.html 登录界面
登录