业务

下载配置镜像

image

pip3 install pip -U
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

"pip install pip -U" 是用于执行升级pip的命令;

登录

image

发送用户名和密码
去数据库判断是否正确
然后后端生成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的转换
image

用户登录后,存入cookie和session

编写路由

需要导入flask_login
image
从session中获取对象
image

image

需要一个
image
这个是验证表单
image

登录创建

去数据库判断数据是否正确
数据库密码,
image

image

image
需要存放一个对象

判断登录成功还是失败
成功去首页,不成功,去登录页面
image

获得复杂json
image

token

image
导入wtf
image

生成token
添加参数
image
image

# username = data["username"]
    # age = request.form.get('')
    # 将json变成字符串
    #   form = request.get_json() print("..." + str(form))

python摄像头

需要导入cv2
image

国内镜像

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ opencv-python


增删改查

image

查找
image
image

image

删除
image

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)
posted @ 2023-04-21 09:42  拿受用  阅读(38)  评论(0编辑  收藏  举报