def update_user(uid): form = UpdateUserInfoForm().validate_for_api() user = manager.user_model.get(id=uid) if user is None: raise NotFound("用户不存在") if user.email != form.email.data: exists = manager.user_model.get(email=form.email.data) if exists: raise ParameterError("邮箱已被注册,请重新输入邮箱") with db.auto_commit(): user.email = form.email.data group_ids = form.group_ids.data # 清空原来的所有关联关系 manager.user_group_model.query.filter_by(user_id=user.id).delete( synchronize_session=False) # 根据传入分组ids 新增关联记录 user_group_list = list() # 如果没传分组数据,则将其设定为 guest 分组 if len(group_ids) == 0: group_ids = [ manager.group_model.get(level=GroupLevelEnum.GUEST.value).id ] for group_id in group_ids: user_group = manager.user_group_model() user_group.user_id = user.id user_group.group_id = group_id user_group_list.append(user_group) db.session.add_all(user_group_list) return Success("操作成功")
def init(force=False): db.create_all() if force: db.drop_all() db.create_all() elif (manager.user_model.get(one=False) or manager.user_group_model.get(one=False) or manager.group_model.get(one=False)): exit("表中存在数据,初始化失败") with db.auto_commit(): # 创建一个超级管理员分组 root_group = manager.group_model() root_group.name = "Root" root_group.info = "超级用户组" root_group.level = GroupLevelEnum.ROOT.value db.session.add(root_group) # 创建一个超级管理员 root = manager.user_model() root.username = "******" db.session.add(root) db.session.flush() root.password = "******" # root用户 and 超级管理员分组 对应关系写入user_group表中 user_group = manager.user_group_model() user_group.user_id = root.id user_group.group_id = root_group.id db.session.add(user_group) # 添加 默认游客组 guest_group = manager.group_model() guest_group.name = "Guest" guest_group.info = "游客组" guest_group.level = GroupLevelEnum.GUEST.value db.session.add(guest_group) # 初始化权限 manager.sync_permissions()
def fake(): with db.auto_commit(): # 添加书籍 book1 = Book() book1.title = "深入理解计算机系统" book1.author = "Randal E.Bryant" book1.summary = """ 从程序员的视角,看计算机系统!\n 本书适用于那些想要写出更快、更可靠程序的程序员。 通过掌握程序是如何映射到系统上,以及程序是如何执行的,读者能够更好的理解程序的行为为什么是这样的,以及效率低下是如何造成的。 粗略来看,计算机系统包括处理器和存储器硬件、编译器、操作系统和网络互连环境。 而通过程序员的视角,读者可以清晰地明白学习计算机系统的内部工作原理会对他们今后作为计算机科学研究者和工程师的工作有进一步的帮助。 它还有助于为进一步学习计算机体系结构、操作系统、编译器和网络互连做好准备。\n 本书的主要论题包括:数据表示、C程序的机器级表示、处理器结构,程序优化、存储器层次结构、链接、异常控制流、虚拟存储器和存储器管理、系统级I/O、网络编程和并发编程。书中所覆盖的内容主要是这些方面是如何影响应用和系统程序员的。 """ book1.image = "https://img3.doubanio.com/lpic/s1470003.jpg" db.session.add(book1) book2 = Book() book2.title = "C程序设计语言" book2.author = "(美)Brian W. Kernighan" book2.summary = """ 在计算机发展的历史上,没有哪一种程序设计语言像C语言这样应用广泛。 本书原著即为C语言的设计者之一Dennis M.Ritchie和著名计算机科学家Brian W.Kernighan合著的一本介绍C语言的权威经典著作。 我们现在见到的大量论述C语言程序设计的教材和专著均以此书为蓝本。 原著第1版中介绍的C语言成为后来广泛使用的C语言版本——标准C的基础。 人们熟知的“hello,World"程序就是由本书首次引入的,现在,这一程序已经成为众多程序设计语言入门的第一课。\n 原著第2版根据1987年制定的ANSIC标准做了适当的修订.引入了最新的语言形式,并增加了新的示例,通过简洁的描述、典型的示例,作者全面、系统、准确地讲述了C语言的各个特性以及程序设计的基本方法。 对于计算机从业人员来说,《C程序设计语言》是一本必读的程序设计语 言方面的参考书。 """ book2.image = "https://img3.doubanio.com/lpic/s1106934.jpg" db.session.add(book2)
def remove_auths(): form = RemoveAuths().validate_for_api() with db.auto_commit(): db.session.query(manager.auth_model) \ .filter(manager.auth_model.auth.in_(form.auths.data), manager.auth_model.group_id == form.group_id.data) \ .delete(synchronize_session=False) return Success(msg='删除权限成功')
def change_user_password(id): form = ResetPasswordForm().validate_for_api() user = find_user(id=id) if user is None: raise NotFound(msg='用户不存在') with db.auto_commit(): user.reset_password(form.new_password.data) return Success(msg='密码修改成功')
def trans2active(id): user = manager.user_model.get(id=id) if user is None: raise NotFound(msg='用户不存在') if user.is_active: raise Forbidden(msg='当前用户已处于激活状态') with db.auto_commit(): user.active = UserActive.ACTIVE.value return Success(msg='操作成功')
def _register_user(form: RegisterForm): with db.auto_commit(): # 注意:此处使用挂载到manager上的user_model,不可使用默认的User user = manager.user_model() user.nickname = form.nickname.data if form.email.data and form.email.data.strip() != "": user.email = form.email.data user.password = form.password.data user.group_id = form.group_id.data db.session.add(user)
def update(): form = UpdateInfoForm().validate_for_api() user = get_current_user() if user.email != form.email.data: exists = manager.user_model.get(email=form.email.data) if exists: raise ParameterException(msg='邮箱已被注册,请重新输入邮箱') with db.auto_commit(): user.email = form.email.data return Success(msg='操作成功')
def dispatch_auths(): form = DispatchAuths() form.validate_for_api() with db.auto_commit(): for auth in form.auths.data: one = manager.auth_model.get(group_id=form.group_id.data, auth=auth) if not one: meta = find_auth_module(auth) manager.auth_model.create(group_id=form.group_id.data, auth=meta.auth, module=meta.module) return Success(msg='添加权限成功')
def wx_register_user(form): with db.auto_commit(): # 注意:此处使用挂载到manager上的user_model,不可使用默认的User user = manager.user_model() user.openid = form['openid'] user.username = '******' # if form.email.data and form.email.data.strip() != "": # user.email = '*****@*****.**' # user.password = form.password.data # user.group_id = form.group_id.data db.session.add(user)
def remove_auths(): form = RemoveAuths().validate_for_api() with db.auto_commit(): db.session.query(manager.group_permission_model).filter( manager.group_permission_model.permission_id.in_( form.permission_ids.data), manager.group_permission_model.group_id == form.group_id.data, ).delete(synchronize_session=False) return Success("删除权限成功")
def main(): app = create_app() with app.app_context(): with db.auto_commit(): # 创建一个超级管理员 user = Love_user() user.Username = "******" user.Address = "贵阳" user.Sex = "男" user.Province = "贵阳" user.Openid db.session.add(user)
def dispatch_auths(): form = DispatchAuths().validate_for_api() with db.auto_commit(): for permission_id in form.permission_ids.data: one = manager.group_permission_model.get( group_id=form.group_id.data, permission_id=permission_id) if not one: manager.group_permission_model.create( group_id=form.group_id.data, permission_id=permission_id, ) return Success("添加权限成功")
def main(): app = create_app() with app.app_context(): with db.auto_commit(): # 创建一个超级管理员 user = User() user.username = '******' user.password = '******' user.email = '*****@*****.**' # admin 2 的时候为超级管理员,普通用户为 1 user.admin = 2 db.session.add(user)
def delete_user(uid): user = manager.user_model.get(id=uid) if user is None: raise NotFound("用户不存在") groups = manager.group_model.select_by_user_id(uid) # 超级管理员分组的用户仅有一个分组 if groups[0].level == GroupLevelEnum.ROOT.value: raise Forbidden("无法删除此用户") with db.auto_commit(): manager.user_group_model.query.filter_by(user_id=uid).delete( synchronize_session=False) user.hard_delete() return Success("操作成功")
def main(): app = create_app() with app.app_context(): with db.auto_commit(): # 创建一个超级管理员 user = User() user.nickname = 'super1' user.password = '******' user.email = '*****@*****.**' # admin 2 的时候为超级管理员,普通用户为 1 user.admin = 2 user.hotel_id = 1 db.session.add(user)
def update_user(id): form = UpdateUserInfoForm().validate_for_api() user = manager.user_model.get(id=id) if user is None: raise NotFound(msg='用户不存在') if user.email != form.email.data: exit = manager.user_model.get(email=form.email.data) if exit: raise ParameterException(msg='邮箱已被注册,请重新输入邮箱') with db.auto_commit(): user.email = form.email.data user.group_id = form.group_id.data return Success(msg='操作成功')
def create_group(): form = NewGroup().validate_for_api() exist = manager.group_model.get(name=form.name.data) if exist: raise Forbidden(msg='分组已存在,不可创建同名分组') with db.auto_commit(): group = manager.group_model.create(name=form.name.data, info=form.info.data) db.session.flush() for auth in form.auths.data: meta = find_auth_module(auth) if meta: manager.auth_model.create(auth=meta.auth, module=meta.module, group_id=group.id) return Success(msg='新建分组成功')
def delete_group(gid): exist = manager.group_model.get(id=gid) if not exist: raise NotFound("分组不存在,删除失败") guest_group = manager.group_model.get(level=GroupLevelEnum.GUEST.value) root_group = manager.group_model.get(level=GroupLevelEnum.ROOT.value) if gid in (guest_group.id, root_group.id): raise Forbidden("不可删除此分组") if manager.user_model.select_page_by_group_id(gid, root_group.id): raise Forbidden("分组下存在用户,不可删除") with db.auto_commit(): # 删除group id 对应的关联记录 manager.group_permission_model.query.filter_by(group_id=gid).delete( synchronize_session=False) # 删除group exist.delete() return Success("删除分组成功")
def _register_user(form: RegisterForm): with db.auto_commit(): user = manager.user_model() user.username = form.username.data if form.email.data and form.email.data.strip() != "": user.email = form.email.data db.session.add(user) db.session.flush() user.password = form.password.data group_ids = form.group_ids.data # 如果没传分组数据,则将其设定为 id 2 的 guest 分组 if len(group_ids) == 0: group_ids = [2] for group_id in group_ids: user_group = manager.user_group_model() user_group.user_id = user.id user_group.group_id = group_id db.session.add(user_group)
def create_group(): form = NewGroup().validate_for_api() exists = manager.group_model.get(name=form.name.data) if exists: raise Forbidden("分组已存在,不可创建同名分组") with db.auto_commit(): group = manager.group_model.create( name=form.name.data, info=form.info.data, ) db.session.flush() group_permission_list = list() for permission_id in form.permission_ids.data: gp = manager.group_permission_model() gp.group_id = group.id gp.permission_id = permission_id group_permission_list.append(gp) db.session.add_all(group_permission_list) return Success("新建分组成功")
def update(): form = UpdateInfoForm().validate_for_api() user = get_current_user() email = form.email.data nickname = form.nickname.data avatar = form.avatar.data if email and user.email != email: exists = manager.user_model.get(email=form.email.data) if exists: raise ParameterError("邮箱已被注册,请重新输入邮箱") with db.auto_commit(): if email: user.email = form.email.data if nickname: user.nickname = form.nickname.data if avatar: user._avatar = form.avatar.data return Success("操作成功")
def upload_to_ali(): image = request.files.get("image", None) if not image: raise ParameterError("没有找到图片") if image and allowed_file(image.filename): url = upload_image_bytes(image.filename, image) if url: res = {"url": url} with db.auto_commit(): exist = OSS.get(url=url) if not exist: data = {"url": url} one = OSS.create(**data) db.session.flush() res["id"] = one.id else: res["id"] = exist.id return jsonify(res) return Failed("上传图片失败,请检查图片路径")
def upload_to_ali(): image = request.files.get('image', None) if not image: raise ParameterException(msg='没有找到图片') if image and allowed_file(image.filename): url = upload_image_bytes(image.filename, image) if url: res = {'url': url} with db.auto_commit(): exist = Image.get(url=url) if not exist: data = {'from': LocalOrCloud.CLOUD.value, 'url': url} one = Image.create(**data) db.session.flush() res['id'] = one.id else: res['id'] = exist.id return jsonify(res) return Failed(msg='上传图片失败,请检查图片路径')
def upload_multiple_to_ali(): imgs = [] for item in request.files: img = request.files.get(item, None) if not img: raise ParameterException(msg='没接收到图片,请检查图片路径') if img and allowed_file(img.filename): url = upload_image_bytes(img.filename, img) if url: # 每上传成功一次图片需记录到数据库 with db.auto_commit(): exist = Image.get(url=url) if not exist: data = {'from': LocalOrCloud.CLOUD.value, 'url': url} res = Image.create(**data) db.session.flush() imgs.append({'key': item, 'url': url, 'id': res.id}) else: imgs.append({'key': item, 'url': url, 'id': exist.id}) return jsonify(imgs)
def upload_multiple_to_ali(): imgs = [] for item in request.files: img = request.files.get(item, None) if not img: raise ParameterError("没接收到图片,请检查图片路径") if img and allowed_file(img.filename): url = upload_image_bytes(img.filename, img) if url: # 每上传成功一次图片需记录到数据库 with db.auto_commit(): exist = OSS.get(url=url) if not exist: data = {"url": url} res = OSS.create(**data) db.session.flush() imgs.append({"key": item, "url": url, "id": res.id}) else: imgs.append({"key": item, "url": url, "id": exist.id}) return jsonify(imgs)
def bind_mini(): form = BindMiniForm().validate_for_api() user = manager.user_model.verify(form.username.data, form.password.data) appid = current_app.config.get('APP_ID') secret = current_app.config.get('APP_SECRET') code = form.code.data url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appid + '&secret=' + secret + '&js_code=' + code + \ '&grant_type=authorization_code' res = requests.get(url) if 'openid' not in res.json().keys(): return Failed('小程序用户异常') openid = res.json()['openid'] if manager.user_model.query.filter_by(openid=openid).first(): return Failed('小程序已经与其他账号绑定') if user.openid: return Failed('当前账号已经被其他用户绑定') with db.auto_commit(): user.openid = openid return Success('绑定成功')
def initial_data(): from app.app import create_app from lin.db import db app = create_app() with app.app_context(): data = Poem.query.limit(1).all() if data: return with db.auto_commit(): # 添加诗歌 img_url = 'http://yanlan.oss-cn-shenzhen.aliyuncs.com/gqmgbmu06yO2zHD.png' poem1 = Poem() poem1.title = '生查子·元夕' poem1.author = '欧阳修' poem1.dynasty = '宋代' poem1._content = """去年元夜时/花市灯如昼/月上柳梢头/人约黄昏后|今年元夜时/月与灯依旧/不见去年人/泪湿春衫袖""" poem1.image = img_url db.session.add(poem1) poem2 = Poem() poem2.title = '临江仙·送钱穆父' poem2.author = '苏轼' poem2.dynasty = '宋代' poem2._content = """一别都门三改火/天涯踏尽红尘/依然一笑作春温/无波真古井/有节是秋筠|惆怅孤帆连夜发/送行淡月微云/尊前不用翠眉颦/人生如逆旅/我亦是行人""" poem2.image = img_url db.session.add(poem2) poem3 = Poem() poem3.title = '春望词四首' poem3.author = '薛涛' poem3.dynasty = '唐代' poem3._content = """花开不同赏/花落不同悲/欲问相思处/花开花落时/揽草结同心/将以遗知音/春愁正断绝/春鸟复哀吟/风花日将老/佳期犹渺渺/不结同心人/空结同心草/那堪花满枝/翻作两相思/玉箸垂朝镜/春风知不知""" poem3.image = img_url db.session.add(poem3) poem4 = Poem() poem4.title = '长相思' poem4.author = '纳兰性德' poem4.dynasty = '清代' poem4._content = """山一程/水一程/身向榆关那畔行/夜深千帐灯|风一更/雪一更/聒碎乡心梦不成/故园无此声""" poem4.image = img_url db.session.add(poem4) poem5 = Poem() poem5.title = '离思五首·其四' poem5.author = '元稹' poem5.dynasty = '唐代' poem5._content = """曾经沧海难为水/除却巫山不是云/取次花丛懒回顾/半缘修道半缘君""" poem5.image = img_url db.session.add(poem5) poem6 = Poem() poem6.title = '浣溪沙' poem6.author = '晏殊' poem6.dynasty = '宋代' poem6._content = """一曲新词酒一杯/去年天气旧亭台/夕阳西下几时回|无可奈何花落去/似曾相识燕归来/小园香径独徘徊""" poem6.image = img_url db.session.add(poem6) poem7 = Poem() poem7.title = '浣溪沙' poem7.author = '纳兰性德' poem7.dynasty = '清代' poem7._content = """残雪凝辉冷画屏/落梅横笛已三更/更无人处月胧明|我是人间惆怅客/知君何事泪纵横/断肠声里忆平生""" poem7.image = img_url db.session.add(poem7) poem8 = Poem() poem8.title = '蝶恋花·春景' poem8.author = '苏轼' poem8.dynasty = '宋代' poem8._content = """花褪残红青杏小/燕子飞时/绿水人家绕/枝上柳绵吹又少/天涯何处无芳草|墙里秋千墙外道/墙外行人/墙里佳人笑/笑渐不闻声渐悄/多情却被无情恼""" poem8.image = img_url db.session.add(poem8) return app
# 书籍相关 def delete_books(): # q = ('%'+'韩寒'+'%').encode('utf-8') # books = Book.query.filter(or_(Book.title.ilike(q), Book._author.ilike(q))).all() books = Book.query.all() for book in books: book.hard_delete() # book.delete() def get_books(): start = 40 count = 10 books = Book.query.filter().offset(start).limit(count).all() pprint(books) # 期刊相关 def get_classic(): models = db.session.query( Classic.type, func.count(Classic.type).label('nums') ).group_by('type').order_by(desc('nums')).all() pprint(models) with app.app_context(): get_classic() with db.auto_commit(): pass
def set_avatar(): form = AvatarUpdateForm().validate_for_api() user = get_current_user() with db.auto_commit(): user.avatar = form.avatar.data return Success(msg='更新头像成功')