大家好,我是java1234_小锋老师,最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts)视频教程,持续更新中,计划月底更新完,感谢支持。今天讲解用户注册实现
视频在线地址:
2026版【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts+爬虫) 视频教程 (火爆连载更新中..)_哔哩哔哩_bilibili
课程简介:
本课程采用主流的Python技术栈实现,Mysql8数据库,Flask后端,Pandas数据分析,前端可视化图表采用echarts,以及requests库,snowNLP进行情感分析,词频统计,包括大量的数据统计及分析技巧。
实现了,用户登录,注册,爬取微博帖子和评论信息,进行了热词统计以及舆情分析,以及基于echarts实现了数据可视化,包括微博文章分析,微博IP分析,微博评论分析,微博舆情分析。最后也基于wordcloud库实现了词云图,包括微博内容词云图,微博评论词云图,微博评论用户词云图等功能。
用户注册实现
我们再来实现下注册功能。
首先提供下前端静态网页模版register.html,放到templates下
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>用户注册</title>
<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}" type="image/x-icon">
<link rel="stylesheet" href="/static/css/backend-plugin.min.css">
<link rel="stylesheet" href="/static/css/backend.css">
</head>
<body class=" ">
<!-- loader Start -->
<div id="loading">
<div id="loading-center">
</div>
</div>
<!-- loader END -->
<div class="wrapper">
<section class="login-content">
<div class="container h-100">
<div class="row align-items-center justify-content-center h-100">
<div class="col-md-5">
<div class="card p-3">
<div class="card-body">
<div class="auth-logo">
<img src="/static/picture/logo.png" class="img-fluid rounded-normal darkmode-logo"
alt="logo">
<img src="/static/picture/logo-dark.png" class="img-fluid rounded-normal light-logo"
alt="logo">
</div>
<h3 class="mb-3 font-weight-bold text-center">用户注册</h3>
<div class="mb-5">
<p class="line-around text-secondary mb-0"><span
class="line-around-1">微博舆情分析管理系统</span>
</p>
</div>
<form>
<div class="row">
<div class="col-lg-12">
<div class="form-group">
<label class="text-secondary">用户名:</label>
<input class="form-control" id="username" name="username" type="text"
placeholder="请输入用户名...">
</div>
</div>
<div class="col-lg-12 mt-2">
<div class="form-group">
<div class="d-flex justify-content-between align-items-center">
<label class="text-secondary">密码:</label>
</div>
<input class="form-control" id="password" name="password" type="password"
placeholder="请输入密码...">
</div>
</div>
<div class="col-lg-12 mt-2">
<div class="form-group">
<div class="d-flex justify-content-between align-items-center">
<label class="text-secondary">确认密码:</label>
</div>
<input class="form-control" id="password2" name="password2" type="password"
placeholder="请输入确认密码...">
</div>
</div>
</div>
<button type="button" onclick="submitForm()" class="btn btn-primary btn-block mt-2">登录
</button>
<div class="col-lg-12 mt-3">
<p class="mb-0 text-center"><font id="info" color="red"></font> 已有账号?
<a
href="/user/login">用户登录</a></p>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
</div>
<script>
function submitForm() {
let username = $("#username").val()
let password = $("#password").val()
let password2 = $("#password2").val()
if (username == "") {
$("#info").text("用户名不能为空!")
return false;
}
if (password == "") {
$("#info").text("密码不能为空!")
return false;
}
if (password2 == "") {
$("#info").text("确认密码不能为空!")
return false;
}
if (password != password2) {
$("#info").text("确认密码不正确!")
return false;
}
$.post('/user/register', {
'username': username,
'password': password,
'password2': password2
}, function (result) {
if (result.error) {
$("#info").text(result.info)
} else {
$("#info").text("注册成功!")
}
})
}
</script>
<!-- Backend Bundle JavaScript -->
<script src="/static/js/backend-bundle.min.js"></script>
<!-- Chart Custom JavaScript -->
<script src="/static/js/customizer.js"></script>
<script src="/static/js/sidebar.js"></script>
<!-- Flextree Javascript-->
<script src="/static/js/flex-tree.min.js"></script>
<script src="/static/js/tree.js"></script>
<!-- Table Treeview JavaScript -->
<script src="/static/js/table-treeview.js"></script>
<!-- SweetAlert JavaScript -->
<script src="/static/js/sweetalert.js"></script>
<!-- Vectoe Map JavaScript -->
<script src="/static/js/vector-map-custom.js"></script>
<!-- Chart Custom JavaScript -->
<script src="/static/js/chart-custom.js"></script>
<script src="/static/js/01.js"></script>
<script src="/static/js/02.js"></script>
<!-- slider JavaScript -->
<script src="/static/js/slider.js"></script>
<!-- Emoji picker -->
<script src="/static/js/index.js" type="module"></script>
<!-- app JavaScript -->
<script src="/static/js/app.js"></script>
</body>
</html>
userDao.py里实现add()注册添加用户方法以及判断用户名是否重复的getByUserName()方法:
def add(user: User):
"""
注册添加用户
:param user:
:return:
"""
con = None
try:
con = dbUtil.getCon()
cursor = con.cursor()
cursor.execute(
f"insert into t_user values(null,'{user.username}','{user.password}','{user.createtime}')")
return cursor.fetchone()
except Exception as e:
print(e)
con.rollback()
return None
finally:
dbUtil.closeCon(con)
def getByUserName(username):
"""
根据用户名查询用户信息
:param username:
:return:
"""
con = None
try:
con = dbUtil.getCon()
cursor = con.cursor()
sql = "SELECT username from t_user"
if username != None and username != '':
sql += f" where username='{username}'"
print(sql)
cursor.execute(sql)
return cursor.rowcount
except Exception as e:
print(e)
con.rollback()
return None
finally:
dbUtil.closeCon(con)
user.py里实现用户注册业务逻辑方法register()
@ub.route('/register', methods=['GET', 'POST'])
def register():
"""
用户注册
:return:
"""
if request.method == 'GET':
return render_template('register.html')
else:
username = request.values.get('username')
password = request.values.get('password')
password2 = request.values.get('password2')
if username is None or username.strip() == '':
return jsonify(error=True, info='用户名不能为空!')
if password is None or password.strip() == '':
return jsonify(error=True, info='密码不能为空!')
if password2 is None or password2.strip() == '':
return jsonify(error=True, info='确认密码不能为空!')
if password != password2:
return jsonify(error=True, info='确认密码不正确!')
# 检查用户名重复
if len(userDao.getByUserName(username)):
return jsonify(error=True, info='该用户名已存在!')
else:
user = User(username, MD5Utility.encrypt(password))
user.createtime = datetime.now()
if userDao.add(user) > 0:
return jsonify(success=True, info='OK')
else:
return jsonify(error=True, info='注册失败,请联系管理员!')
运行测试: