基于python的网络爬虫与数据可视化分析,基于python+selenium进行web端的测试

  基于python的网络爬虫与数据可视化分析,基于python+selenium进行web端的测试

  一、前言登录功能是每个系统的基础,本篇实现了基于代币的用户登录和请求权限控制。

  二、数据库模型模型文件夹下新建user.py,创建对象关系映射(对象关系映射)实体类

  # !/usr/bin/python3

  # -*-编码:utf-8 -*-

  @作者:胡国栋

  @版本:

  -

  @File : user.py

  @描述:用户表

  @CreateTime : 2020/3/7 14:45

  -

  @ModifyTime:

  导入摘要算法

  从关系导入功能

  从数据库导入数据库

  来自模特。基本模型导入基本模型

  类用户(基本模型):

  用户表

  __tablename__=t_user

  id=db .列(db .Integer,primary_key=True,autoincrement=True,comment=用户ID’)

  昵称=db .列(db .字符串(30),注释=用户昵称)

  用户名=数据库。列(db .字符串(30),注释=登录账号)

  user_type=db .列(db .布尔型,默认值=1,注释=用户类型(1系统用户)

  email=db .列(db .字符串(50),注释=用户邮箱)

  电话=db .列(db .字符串(20),注释=手机号)

  电话号码=db .列(db .字符串(11),注释=手机号码)

  性别=db .列(db .整数,默认值=1,注释=用户性别(1男2女3未知))

  头像=db .列(db .字符串(100),注释=头像路径)

  密码=db .列(db .字符串(50),注释=密码)

  盐=db .列(db .字符串(20),注释=盐加密)

  状态=db .列(db .整数,默认值=1,注释=帐号状态(1正常2禁用)

  部门标识=数据库。列(db .整数,注释=部门id’)

  del_flag=db .列(db .整数,默认值=1,注释=删除标志(1代表存在2代表删除))

  login_ip=db .列(db .字符串(50),注释=最后登陆IP’)

  登录日期=数据库。列(db .时间戳,注释=最后登陆时间,可空=假,

  onupdate=func.now())

  定义检查_密码(self,passwd):

  检查密码

  :参数密码:

  :返回:0/1

  # 创建讯息摘要5对象

  m=hashlib.md5()

  b=passwd.encode(编码=utf-8 )

  m。更新(二)

  str_md5=m.hexdigest()

  if self.password==str_md5:

  返回一

  否则:

  返回0

  三、创建蓝图1 .许可文件夹下新建蓝图文件user.py

  从权限导入*

  user=Blueprint(user ,__name__)

  app.py注册蓝图

  app。注册_蓝图(用户。user,url_prefix=/api/user)3。写一个测试方法

  @user.route(/test ,methods=[GET])

  定义测试():

  返回成功()4。浏览器输入http://127 .0 .0 .1:5000/API/用户/测试

  四、实现代币方法用代币校验身份,是前后端交互的常用方式。

  它有以下特性:

  会失效加密可以根据它拿到用户的信息

  关于代币的方法写在实用工具下的common.py下

  1.生成令牌:生成方式(内部配置的私钥有效期用户的编号用户名用户角色列表)

  定义创建令牌(用户标识,用户名,角色列表):

  生成代币

  :返回:令牌

  # 第一个参数是内部的私钥,这里写在共用的配置信息里了,如果只是测试可以写死

  # 第二个参数是有效期(秒)

  s=序列化程序(配置SECRET_KEY,expires_in=config .过期_英寸)

  # 接收用户编号转换与编码

  令牌=无

  尝试:

  token=s.dumps({id: user_id, name :用户名, role: role_list}).解码(“ascii”)

  例外情况为e:

  app.logger.error(获取代币失败:{}.格式(e))

  返回令牌2。校验令牌:校验接收到的令牌,如果成功返回用户信息,否则返回没有人

  定义验证令牌(令牌):

  校验代币

  :参数标记:

  :返回:用户信息或者没有

  # 参数为私有秘钥,跟上面方法的秘钥保持一致

  s=序列化程序(配置SECRET_KEY)

  尝试:

  # 转换为字典

  数据=s负载(令牌)

  返回数据

  例外情况为e:

  返回无3 .有很多接口是必须登录才能操作的,最好的方式就是在写一个装饰器,添加在需要的美国石油学会(美国石油协会)上

  定义登录_必需(*角色):

  定义装饰器(函数):

  @functools.wraps(func)

  定义包装(*参数,* *千瓦):

  尝试:

  # 在请求头上拿到代币

  令牌=请求。标题[授权]

  例外情况为e:

  # 没接收的到令牌,给前端抛出错误

  返回jsonify(code=Code .NO_PARAMETER.value,msg=缺少参数令牌)

  s=序列化程序(配置SECRET_KEY)

  尝试:

  用户=s负载(令牌)

  如果角色:

  # 获取代币中的权限列表如果在参数列表中则表示有权限,否则就表示没有权限

  用户角色=用户[角色]

  result=[x for x in user _ role if x in list(role)]

  如果没有结果:

  返回jsonify(code=Code .ERR_PERMISSOM.value,msg=权限不够)

  例外情况为e:

  返回jsonify(code=Code .LOGIN_TIMEOUT.value,msg=登录已过期)

  返回函数(*参数,* *千瓦)

  返回包装

  返回装饰者这样只需在方法上添加装饰器就能限制用户访问

  #限制只有管理可以操作

  @user.route(/xxx ,methods=[POST])

  @login_required(admin )

  定义xxx()

  返回xx五、用户登录点击前端页面的登录按钮,会请求登录接口

  佩尔米松文件夹下的user.py新建登录方法

  @user.route(/login ,methods=[POST])

  定义登录():

  用户登录

  :返回:令牌

  res_dir=request.get_json()

  如果资源目录为无:

  返回无参数()

  # 获取前端传过来的参数

  用户名=res_dir.get(用户名)

  password=res_dir.get(password )

  # 校验参数

  如果不是全部([用户名,密码]):

  返回jsonify(code=Code .NOT_NULL.value,msg=用户名和密码不能为空)

  尝试:

  user=User.query.filter_by(用户名=用户名)。首先()

  例外情况为e:

  app.logger.error(登录错误:{} 。格式(e))

  返回jsonify(code=Code .REQUEST_ERROR.value,msg=获取信息失败)

  如果用户为没有人或不是用户.检查_密码(密码)或user.del_flag==2或用户状态==2:

  返回jsonify(code=Code .ERR_PWD.value,msg=用户名或密码错误)

  # 获取用户信息,传入生成代币的方法,并接收返回的代币

  # 获取用户角色

  用户角色=角色。查询。join(User _ Role,Role.id==User_Role.role_id).加入(用户,

  用户角色.用户标识==用户标识).过滤器(

  User.id==user.id).全部()

  role _ list=[用户角色中我的一、角色_关键

  token=创建令牌(用户标识,用户用户名,角色列表)

  data={token: token, userId: user.id,用户名:用户.用户名,昵称:用户.昵称}

  # 记录登录互联网协议(互联网协议的缩写)将代币存入雷尔迪斯

  尝试:

  用户。登录_ip=请求。远程_地址

  user.update()

  雷迪斯。写(f token _ {用户。用户名} ,标记)

  例外情况为e:

  返回jsonify(code=Code .UPDATE_DB_ERROR.value,msg=登录失败)

  如果令牌:

  # 把代币返回给前端

  返回jsonify(code=Code .SUCCESS.value,msg=登录成功,数据=数据)

  否则:

  返回jsonify(code=Code .REQUEST_ERROR.value,msg=请求失败数据=令牌)六、用户注销佩尔米松文件夹下的user.py新建注销方法

  @user.route(/logout ,methods=[POST])

  @login_required()

  定义注销():

  注销方法:redis删除代币

  :返回:

  尝试:

  令牌=请求。标题[授权]

  用户=验证令牌(令牌)

  如果用户:

  key=ftoken_{user.get(name)}

  redis_token=Redis.read(key)

  if redis_token:

  Redis.delete(键)

  返回成功()

  否则:

  返回AUTH_ERR()

  例外情况为e:

  app.logger.error(f 注销失败)

  return REQUEST_ERROR()七、检查代币登录成功后,系统会请求一个检查令牌方法,主要是检查用户代币是否合法

  佩尔米松文件夹下的user.py新建检查令牌方法

  @user.route(/check_token ,methods=[POST])

  定义检查令牌():

  # 在请求头上拿到代币

  令牌=请求。标题[授权]

  用户=验证令牌(令牌)

  如果用户:

  key=ftoken_{user.get(name)}

  redis_token=Redis.read(key)

  if redis_token==token:

  返回成功(data=user.get(id ))

  否则:

  return OTHER_LOGIN()

  否则:

  返回AUTH_ERR()

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: