业务
下载配置镜像
pip3 install pip -U
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
"pip install pip -U" 是用于执行升级pip的命令;
登录
发送用户名和密码
去数据库判断是否正确
然后后端生成token,返回给前端,前端将其存入到本地中去localStorage
1.前端发送用户名,密码,密码可以加密,不让其在传输过程中传送
2.后端收到信息,先判断是否为空,不为空,就去数据库中查询,然后生成token,返回给前端
3.前端将这个token存在本地浏览器中去localStorage
创建和验证token
from flask import Flask, request
import jwt
app = Flask(__name__)
app.config['SECRET_KEY'] = 'this is a secret key'
# Create token with user ID and username
def create_token(user_id, username):
payload = {
'user_id': user_id,
'username': username
}
token = jwt.encode(payload, app.config['SECRET_KEY'], algorithm='HS256')
return token
# Decode and verify token
def decode_token(token):
try:
payload = jwt.decode(token, app.config['SECRET_KEY'], algorithms=['HS256'])
return payload
except jwt.InvalidTokenError:
return None
# Sample route to test token creation and decoding
@app.route('/test', methods=['POST'])
def test():
user_id = request.form['user_id']
username = request.form['username']
token = create_token(user_id, username)
decoded_payload = decode_token(token)
return f'Token: {token}, Decoded Payload: {decoded_payload}'
localStorage 是一种在现代 Web 浏览器中用于存储客户端数据的 API。它是 HTML5 标准的一部分,允许网页和应用程序在用户的浏览器中存储键值对数据,从而实现本地存储。
与传统的 cookie 不同,localStorage 具有以下优点:
更高的存储限制:localStorage 的存储容量通常比 cookie 大得多,可以存储更多的数据。
本地存储:localStorage 存储在用户的浏览器中,不会被发送到服务器,因此可以在离线状态下使用。
更好的性能:相比于 cookie,localStorage 读写数据的速度更快,因为它并不涉及与服务器的通信。
请注意,localStorage 中存储的数据仅限于字符串类型。如果需要存储其他类型的数据,需要将它们转换为字符串,或使用 JSON 等格式进行序列化和反序列化。
@app.route('/api/login', methods=['GET', 'POST'])
def loginDef():
# 判断用户是否登录
# if current_user.is_authenticated:
# data = {'msg': '/main'}
# return jsonify(data)
# 获得字符串
form = request.get_json()
data_dict = json.loads(str(form).replace("'", "\""))
dataObj = data_dict["data"]
# 让密码进行加密
psw = pasUtil(dataObj["password"])
count = User.query.count()
user = User.query.filter_by(username=dataObj["username"]).first()
print(user)
# 存储user_id方便后续使用
if user is None:
return jsonify({'access_token': 'empty'})
if user.username == dataObj["username"] and psw == user.password:
# 把userid,存到session里面了
session['user_id'] = user.id
# 创建token
token = create_access_token(identity=user.username + psw)
# login_user(user)
data = {'access_token': token}
else:
data = {"access_token": "empty"}
# # if current_user.is_authenticated:
# # pass
#
# print(str(data_dict))
# print(psw)
return jsonify(data)
handleLogin() {
this.$refs.loginForm.validate(valid => {
if (valid) {
// 登录表单验证成功后的处理逻辑
// 发送 POST 请求
// alert(this.loginForm)
// console.log(this.loginForm)
axios.post('/api/login', {data: this.loginForm})
.then(response => {
// 接收后端返回的JSON数据
const data = response.data
// alert(data)
//根据key值,获取到json的值
// alert(data.msg)
// eslint-disable-next-line no-empty
if(data.access_token === "empty"){
this.showDialog("用户名或者密码错误")
}else{
//30 * 60 * 1000 当前时间戳 + 30分钟
const expirationTime = new Date().getTime() + (2); //
const token = {
access_token: data.access_token,
expires_at: expirationTime
};
localStorage.setItem('access_token', JSON.stringify(token));
// setTimeout(() => {
// localStorage.removeItem('access_token');
// }, 120000);
// localStorage.setItem("access_token", data.access_token);
// 添加 Authorization 头
axios.defaults.headers.common["Authorization"] = "Bearer " + localStorage.getItem("access_token");
router.push({ name: 'Main' })
return response.data
}
// alert(data)
// console.log(data);
// alert(data.url)
// 跳转到指定页面,例如跳转到 /success 页面
})
.catch(error => {
console.error(error)
})
// axios({
// method: 'post',
// url: '/api/login',
// data: {
// loginForm:this.loginForm
// }
// }).then(
// )
}
})
},
json的转换
用户登录后,存入cookie和session
编写路由
需要导入flask_login
从session中获取对象
需要一个
这个是验证表单
登录创建
去数据库判断数据是否正确
数据库密码,
需要存放一个对象
判断登录成功还是失败
成功去首页,不成功,去登录页面
获得复杂json
token
导入wtf
生成token
添加参数
# username = data["username"]
# age = request.form.get('')
# 将json变成字符串
# form = request.get_json() print("..." + str(form))
python摄像头
需要导入cv2
国内镜像
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ opencv-python
增删改查
查找
删除
is_delete
数据类型,数据库bit
python是Boolea
查询可以用ture,false,但是修改不能
@app.route('/api/deleteLogicImage')
def deleteLogicImage():
try:
id = request.args.get('id')
print('这个图片的id是' + id)
images = Images.query.filter_by(id=id).first()
# print(images.file_name)
# images.file_name = 'images.file_name'
sql = 'update images set is_delete = 1 where id=' + id
conn = engine.connect()
image = conn.execute(text(sql))
print(text(sql))
result = {"msg": "1"}
except Exception as e:
result = {"msg": "0"}
return jsonify(result)