目录
2、在templates/user 下新增center.html
修改
flask-14 Flask蓝图+数据持久化
实现密码加密和数据库查询
一、数据清理
删除flask-14教程创建的表
使用第三方工具等方式即可
二、修改对应文件
1、修改apps/user下的models.py
手机号码在数据库做了唯一判断,新增了isdelete字段和修改了password长度
from datetime import datetime
from ext import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(15), nullable=False)
password = db.Column(db.String(64), nullable=False)
phone = db.Column(db.String(11), unique=True)
isdelete = db.Column(db.Boolean, default=False)
rdatetime = db.Column(db.DateTime, default=datetime.now())
def __str__(self):
return self.username
2、在templates/user 下新增center.html
{% extends 'base.html' %}
{% block title %}
用户信息
{% endblock %}
{% block middle %}
<h1>所有用户信息如下:</h1>
{% if users %}
<span>当前用户人数:{{ users|length }}人</span>
<table border="1" cellspacing="0" width="70%">
<tr>
<th>序号</th>
<th>用户名</th>
<th>密码</th>
<th>手机号</th>
<th>注册时间</th>
<th>操作</th>
</tr>
{% for user in users %}
<tr>
<td>{{ loop.index }}</td>
<td>{{ user.username }}</td>
<td>{{ user.password }}</td>
<td>{{ user.phone }}</td>
<td>{{ user.rdatetime }}</td>
<td><a href="javascript:;" onclick="update('{{ user.username }}')">修改</a>
<a href="javascript:;" onclick="del('{{ user.username }}')">删除</a></td>
</tr>
{% endfor %}
</table>
{% else %}
<p style="color: red; font-size: 20px;">当前还没有任何用户,抓紧时间注册吧!!</p>
{% endif %}
{% endblock %}
{% block myjs %}
<script>
//删除函数
function del(username) {
// console.log(username)
// location 地址栏对象
location.href = '/del?username='+username
}
//修改函数
function update(username) {
location.href = '/update?username='+username
}
</script>
{% endblock %}
3、修改apps/user下的view.py
这里主要实现密码加密和数据库数据查询
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/12/16 10:03
# @Author : niubobo
# @File : view.py
# @Software: PyCharm
from flask import Blueprint, request, render_template, redirect,url_for
import hashlib
from apps.user.models import User
from ext import db
user_bp = Blueprint('user', __name__)
@user_bp.route('/')
def user_center():
# 查询数据库中的数据
users = User.query.all()
return render_template('user/center.html', users=users)
@user_bp.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'POST':
# 获取post提交得数据
username = request.form.get('username')
password = request.form.get('password')
repassword = request.form.get('repassword')
phone = request.form.get('phone')
if password == repassword:
# # 用户唯一
# for user in users:
# if user.username == username:
# return render_template('user/register.html', msg='用户名已存在')
# 与模型结合
# 1、找到模型类并创建对象
user = User()
# 2、给对象赋值
user.username = username
user.password = hashlib.sha256(password.encode('utf-8')).hexdigest()
user.phone = phone
# 添加
# 3、将user添加到session中(类似缓存)
db.session.add(user)
# 4、提交数据
db.session.commit()
return redirect(url_for('user.user_center'))
else:
return '两次密码不一致'
return render_template('user/register.html')
# return '用户注册'
4、修改base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>
{% block title %} 父模板的title{% endblock %}
</title>
<style>
#head{
height: 50px;
background-color: bisque;
}
#head ul{
list-style: none;
height: 50px;
}
#head ul li{
float: left;
width: 100px;
text-align: center;
font-size: 15px;
line-height: 50px;
}
#middle{
height: 100%;
background-color: azure;
}
#foot{
height: 50px;
line-height: 50px;
background-color: darkolivegreen;
}
</style>
{% block modle_style %}{% endblock %}
</head>
<body>
<div id="head">
<ul>
<li><a href="{{ url_for('user.user_center') }}">首页</a></li>
<li><a href="{{ url_for('user.register') }}">注册</a></li>
<li><a href="">超市</a></li>
<li><a href="">图书</a></li>
<li><a href="">会员</a></li>
</ul>
</div>
<div id="middle">
{% block middle %} 中间{% endblock %}
</div>
<div id="foot">
我是底部
</div>
{% block myjs %}{% endblock %}
</body>
</html>
三、创建数据库表
终端执行命令:
python app.py db init
python app.py db migrade
python app.py db upgrade
四、运行
1、启动服务
python app.py runserver