Commit adcaf3a2 by dong

fix20220308

parent 1d3f6d87
...@@ -993,6 +993,76 @@ class Role(BaseModel, db.Model): ...@@ -993,6 +993,76 @@ class Role(BaseModel, db.Model):
role = db.Column(db.String(10), unique=True, comment='权限值 000000 0位位职级123,后面为权限01') role = db.Column(db.String(10), unique=True, comment='权限值 000000 0位位职级123,后面为权限01')
info = db.Column(db.String(255), comment='权限说明') info = db.Column(db.String(255), comment='权限说明')
# 政府机构表(自关联多对多)
class GovOrganization(db.Model):
__tablename__ = "government_organization"
# 基本信息
id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='主键id', comment='主键id')
pnums = db.Column(db.Integer, doc='人数', comment='人数')
charge = db.Column(db.String(20), doc='机构负责人', comment='机构负责人')
charge_phone = db.Column(db.String(20), doc='负责人电话', comment='负责人电话')
function = db.Column(db.Text, doc='部门职能', comment='部门职能')
# name = db.Column(db.String(30), nullable=False, view_index=True, doc='新增时间', comment='新增时间')
name = db.Column(db.String(30), doc='新增时间', comment='新增时间')
add_person = db.Column(db.String(20), doc='新增人', comment='新增人')
add_time = db.Column(db.DateTime, doc='新增时间', comment='新增时间')
edit_person = db.Column(db.String(20), doc='编辑人', comment='编辑人')
edit_time = db.Column(db.DateTime, doc='编辑时间', comment='编辑时间')
# followed 我的下级,管制谁,followers 我的上级,谁管制我
# followed = db.relationship('Government', secondary=followers, primaryjoin=(followers.c.follower_id == id),
# secondaryjoin=(followers.c.followed_id == id),
# backref=db.backref('followers', lazy='dynamic'), lazy='dynamic')
# 政府部门(政府-部门 一对多)
class GovDepartment(db.Model):
__tablename__ = "government_department"
# 基本信息
id = db.Column(db.Integer, primary_key=True, autoincrement=True, doc='主键id', comment='主键id')
pnums = db.Column(db.Integer, doc='人数', comment='人数') # 人数
charge = db.Column(db.String(255), doc='部门负责人', comment='部门负责人') # 部门负责人
charge_phone = db.Column(db.String(255), doc='负责人电话', comment='负责人电话') # 负责人电话
function = db.Column(db.Text, doc='负责人电话', comment='负责人电话') # 部门职能
name = db.Column(db.String(255), nullable=False, doc='政府机构部门名称', comment='政府机构部门名称') # 政府机构部门名称
# gid = db.Column(db.Integer) # 政府id
goverment_org_id = db.Column(db.Integer, db.ForeignKey("government_organization.id"), doc='外键id,机构id', comment='外键id,机构id')
goverment = db.relationship('GovOrganization', backref=db.backref('government_departments')) # 政府1-N部门
# 项目列表 # 项目列表
# class Item(db.Model): # class Item(db.Model):
# __tablename_ = "item" # __tablename_ = "item"
...@@ -1071,38 +1141,9 @@ class Role(BaseModel, db.Model): ...@@ -1071,38 +1141,9 @@ class Role(BaseModel, db.Model):
# db.Column('follower_id', db.Integer, db.ForeignKey('government.id'), primary_key=True), # db.Column('follower_id', db.Integer, db.ForeignKey('government.id'), primary_key=True),
# db.Column('followed_id', db.Integer, db.ForeignKey('government.id'), primary_key=True) # db.Column('followed_id', db.Integer, db.ForeignKey('government.id'), primary_key=True)
# ) # )
#
#
# # 政府机构表(自关联多对多)
# class Government(db.Model):
# __tablename__ = "government"
# # 基本信息
# id = db.Column(db.Integer, primary_key=True, autoincrement=True)
# pnums = db.Column(db.Integer) # 人数
# charge = db.Column(db.String(255)) # 机构负责人
# charge_phone = db.Column(db.String(255)) # 负责人电话
# function = db.Column(db.Text) # 部门职能
# name = db.Column(db.String(255), nullable=False, view_index=True) # 政府机构单位名称
# # followed 我的下级,管制谁,followers 我的上级,谁管制我
# followed = db.relationship('Government', secondary=followers, primaryjoin=(followers.c.follower_id == id),
# secondaryjoin=(followers.c.followed_id == id),
# backref=db.backref('followers', lazy='dynamic'), lazy='dynamic')
#
#
# # 政府部门(政府-部门 一对多)
# class Section(db.Model):
# __tablename__ = "section"
# # 基本信息
# id = db.Column(db.Integer, primary_key=True, autoincrement=True)
# pnums = db.Column(db.Integer) # 人数
# charge = db.Column(db.String(255)) # 部门负责人
# charge_phone = db.Column(db.String(255)) # 负责人电话
# function = db.Column(db.Text) # 部门职能
# name = db.Column(db.String(255), nullable=False) # 政府机构部门名称
# # gid = db.Column(db.Integer) # 政府id
# goverment_id = db.Column(db.Integer, db.ForeignKey("government.id"))
# goverment = db.relationship('Government', backref=db.backref('sections')) # 政府1-N部门
#
# #
# # 政府组(政府1-N部门1-N组) # # 政府组(政府1-N部门1-N组)
# class Group(db.Model): # class Group(db.Model):
......
...@@ -5,13 +5,13 @@ from itsdangerous import SignatureExpired, BadSignature ...@@ -5,13 +5,13 @@ from itsdangerous import SignatureExpired, BadSignature
from flask import request, jsonify, current_app from flask import request, jsonify, current_app
from config import Config from config import Config
# from apps.models import User, Bstage # from apps.models import User, Bstage
from apps.models import User
import functools import functools
# from flask_httpauth import HTTPBasicAuth # from flask_httpauth import HTTPBasicAuth
# #
# auth = HTTPBasicAuth # auth = HTTPBasicAuth
# from models import User
class RegexConverter(BaseConverter): class RegexConverter(BaseConverter):
......
...@@ -106,4 +106,33 @@ def code_new(phone, c_num): ...@@ -106,4 +106,33 @@ def code_new(phone, c_num):
el = eval(str(response, encoding='utf-8')) el = eval(str(response, encoding='utf-8'))
return el return el
# print(send_code('15769202654', '9999'))
# 密码重置操作
def send_reset_password_code(phone, c_num):
client = AcsClient('LTAI4Fkgi7DUf6jCVW3KNGwT', 'ynr6TWWNOnpALn3YUICUaXwpp9w4er', 'cn-hangzhou')
request = CommonRequest()
request.set_accept_format('json')
request.set_domain('dysmsapi.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https') # https | http
request.set_version('2017-05-25')
request.set_action_name('SendSms')
request.add_query_param('RegionId', "cn-hangzhou")
request.add_query_param('PhoneNumbers', phone)
# 签名
request.add_query_param('SignName', "中研认知产业链在线")
# 模板
request.add_query_param('TemplateCode', "SMS_186575190")
request.add_query_param('TemplateParam', "{\"code\":\"" + c_num + "\"}")
response = client.do_action(request)
el = eval(str(response, encoding='utf-8'))
return el
# 密码重置操作 SMS_168827629
# 手机号码绑定 SMS_186575190
# 手机号码注册平台 SMS_187755198
# 手机号码登录平台 SMS_187752221
...@@ -51,108 +51,7 @@ def send_async_email(mail, app, msg): ...@@ -51,108 +51,7 @@ def send_async_email(mail, app, msg):
mail.send(msg) mail.send(msg)
@api_user.route("/phoneChange", methods=["POST"])
@login_required
def phone_change():
token = request.headers["token"]
user = verify_token(token)
user_id = user.id
try:
user_information = User.query.get(user_id)
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
req_dict = request.get_json()
mobile = req_dict.get("mobile")
sms_code = req_dict.get("sms_code")
user_information.mobile = mobile
sms_code = sms_code
print(sms_code)
# 校验手机号格式
if not re.match(r'^1[3456789]\d{9}$', user_information.mobile):
return jsonify(code=RET.PARAMERR, msg="手机号格式错误")
if not redis_store.get('sms_code_{}'.format(user_information.mobile)):
return jsonify(code=RET.DATAERR, msg="请获取验证码")
# 获取短信验证码
try:
real_sms_code = redis_store.get('sms_code_{}'.format(user_information.mobile)).decode()
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="redis数据库异常")
# 判断短信验证码是否失效
if not redis_store:
return jsonify(code=RET.NODATA, msg="短信验证码失效")
# 删除redis中的短信验证码,防止重复校验
try:
redis_store.delete("sms_code_{}".format(user_information.mobile))
except Exception as e:
current_app.logger.error(e)
# 判断用户填写短信验证码是否一致
if real_sms_code != sms_code:
return jsonify(code=RET.DATAERR, msg="短信验证码错误")
try:
exist = User.query.filter_by(mobile=mobile).first()
if exist:
return jsonify(code=RET.DATAEXIST, msg="手机号已存在")
user.mobile = mobile
db.session.commit()
return jsonify(code=RET.OK, msg="手机号更改成功")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
@api_user.route("/changepassword", methods=["POST"])
@login_required
def change_password():
token = request.headers["token"]
user = verify_token(token)
user_id = user.id
# 原密码是否正确
req_dic = request.get_json()
password = req_dic.get("password")
re_pas = req_dic.get("repassword")
new_pas = req_dic.get("newpass")
# 密码长度
if len(new_pas) < 6:
return jsonify(code=RET.DATAERR, msg="密码太短,不安全")
# 两次密码是否一致
if new_pas != re_pas:
return jsonify(code=RET.PARAMERR, msg="两次密码不一致")
# 判断密码长度是否8位,数字、字母、特殊字符同时存在,能使用用户名、连续性字母、数字、特殊字符等易猜测口令。
if len(new_pas) < 8:
return jsonify(code=RET.DATAERR, msg="密码长度最少为8位")
# 密码应设置为包含大小写字母、数字、特殊符号'!@#$%^&*()_+=-'
if not (re.search(r'\d+', new_pas) and re.search(r'[a-z]+', new_pas) and re.search(r'[A-Z]+',
new_pas) and re.search(
r'[!@#$%^&*()_+=-]+', new_pas)):
return jsonify(code=RET.DATAERR, msg="密码应设置为包含大小写字母、数字、特殊符号'!@#$%^&*()_+=-'")
# 两个密码是否都存在
if not all([new_pas, re_pas, password]):
return jsonify(code=RET.PARAMERR, msg="参数不完整")
try:
user_information = User.query.get(user_id)
if not check_password_hash(user_information.password_hash, password):
return jsonify(code=RET.DATAERR, msg="密码错误")
user_information.password = new_pas
db.session.commit()
return jsonify(code=RET.DBERR, msg="更改成功")
except Exception as e:
current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误")
# 给邮箱发验证码 # 给邮箱发验证码
...@@ -248,76 +147,76 @@ def change_email(): ...@@ -248,76 +147,76 @@ def change_email():
return jsonify(code=RET.DBERR, msg="数据库错误") return jsonify(code=RET.DBERR, msg="数据库错误")
@api_user.route("/detail", methods=["GET"]) # @api_user.route("/detail", methods=["GET"])
@login_required # @login_required
def detail(): # def detail():
token = request.headers["token"] # token = request.headers["token"]
user = verify_token(token) # user = verify_token(token)
user_id = user.id # user_id = user.id
try: # try:
user_information = User.query.get(user_id) # user_information = User.query.get(user_id)
except Exception as e: # except Exception as e:
current_app.logger.error(e) # current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误") # return jsonify(code=RET.DBERR, msg="数据库错误")
#
data = { # data = {
"flag": user.flag, # "flag": user.flag,
"real_name": user_information.real_name, # 名字 # "real_name": user_information.real_name, # 名字
"age": user_information.age, # 年龄 # "age": user_information.age, # 年龄
"sex": user_information.sex, # 性别 # "sex": user_information.sex, # 性别
"mobile": user_information.mobile, # 手机号 # "mobile": user_information.mobile, # 手机号
"username": user_information.name, # 用户名 # "username": user_information.name, # 用户名
"email": user_information.email, # 邮箱 # "email": user_information.email, # 邮箱
"section": user_information.section if user_information.section else "-", # 部门 # "section": user_information.section if user_information.section else "-", # 部门
"position": user_information.position if user_information.position else "-", # 职务 # "position": user_information.position if user_information.position else "-", # 职务
"level": user_information.level if user_information.level else "-", # 职级 # "level": user_information.level if user_information.level else "-", # 职级
"unit": user_information.unit if user_information.unit else "-", # 所在机构 # "unit": user_information.unit if user_information.unit else "-", # 所在机构
"funct": user_information.function if user_information.function else "-", # 工作职能 # "funct": user_information.function if user_information.function else "-", # 工作职能
} # }
return jsonify(code=RET.OK, msg="查找成功", data=data) # return jsonify(code=RET.OK, msg="查找成功", data=data)
@api_user.route("/personal", methods=["POST"]) # @api_user.route("/personal", methods=["POST"])
@login_required # @login_required
def personal(): # def personal():
token = request.headers["token"] # token = request.headers["token"]
user = verify_token(token) # user = verify_token(token)
user_id = user.id # user_id = user.id
#
req_dict = request.get_json() # req_dict = request.get_json()
real_name = req_dict.get("real_name") # real_name = req_dict.get("real_name")
age = req_dict.get("age") # age = req_dict.get("age")
sex = req_dict.get("sex") # sex = req_dict.get("sex")
name = req_dict.get("name") # name = req_dict.get("name")
#
try: # try:
user_information = User.query.get(user_id) # user_information = User.query.get(user_id)
#
# 姓名 # # 姓名
if real_name: # if real_name:
user_information.real_name = real_name # user_information.real_name = real_name
#
# 年龄 # # 年龄
if age: # if age:
user_information.age = age # user_information.age = age
#
# 性别 1 - 男 2 - 女 # # 性别 1 - 男 2 - 女
if sex: # if sex:
user_information.sex = sex # user_information.sex = sex
#
# 用户名 # # 用户名
if name: # if name:
user = User.query.filter_by(name=name).filter(User.id != user_id).first() # user = User.query.filter_by(name=name).filter(User.id != user_id).first()
if user: # if user:
return jsonify(code=RET.DATAEXIST, msg="用户名已经存在") # return jsonify(code=RET.DATAEXIST, msg="用户名已经存在")
user_information.name = name # user_information.name = name
db.session.commit() # db.session.commit()
except Exception as e: # except Exception as e:
db.session.rollback() # 回滚数据库 # db.session.rollback() # 回滚数据库
current_app.logger.error(e) # current_app.logger.error(e)
return jsonify(code=RET.DBERR, msg="数据库错误") # return jsonify(code=RET.DBERR, msg="数据库错误")
#
return jsonify(code=RET.OK, msg="修改成功") # return jsonify(code=RET.OK, msg="修改成功")
# 企业的收藏加个下拉列表来判断来自哪个表--是全国企业还是山西企业。返回值里面要带有status还未添加 # 企业的收藏加个下拉列表来判断来自哪个表--是全国企业还是山西企业。返回值里面要带有status还未添加
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment