• 基于Python-Flask的权限管理7:岗位管理


    一、前言

    岗位管理主要管理用户岗位信息。

    一、后端实现

    1.ORM类

    from models.BaseModel import BaseModel
    from db import db
    
    
    class Post(BaseModel):
        """
        菜单权限表
        """
        __tablename__ = "t_post"
        id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment="岗位ID")
        post_code = db.Column(db.String(50), comment="岗位编码")
        post_name = db.Column(db.String(50), comment="岗位名称")
        post_sort = db.Column(db.Integer, comment="显示顺序")
        status = db.Column(db.Integer, default=1, comment="状态(1正常 2停用)")

    2.permission下新建post.py并注册蓝图

    from permission import *
    
    
    post = Blueprint('post', __name__)

    app.register_blueprint(post.post, url_prefix='/api/post')

    3.增删改查方法的实现

    # !/usr/bin/python3
    # -*- coding: utf-8 -*-
    
    from permission import *
    
    
    post = Blueprint('post', __name__)
    
    
    @post.route('/index', methods=["POST"])
    def index():
        '''
        获取岗位
        :return:
        '''
        res_dir = request.get_json()
        if res_dir is None:
            return NO_PARAMETER()
        post_name = res_dir.get("post_name")
        page = res_dir.get("page")
        page_size = res_dir.get("page_size")
        status = res_dir.get("status")
        order_column_name = res_dir.get("order_column_name")
        order_type = res_dir.get("order_type")
        try:
            model = Post.query
            if post_name:
                model = model.filter(Post.post_name.like("%" + post_name + "%"))
            if status is not None:
                model = model.filter(Post.status.in_((1, 2))) if status == 0 else model.filter(Post.status == status)
            if order_column_name and order_type and order_type.lower() in ['asc', 'desc']:
                model = model.order_by(text(f"{order_column_name} {order_type}"))
            if not page or page <= 0:
                page = 1
            if not page_size or page_size <= 0:
                page_size = 10
            result = model.order_by("post_sort").paginate(page, page_size, error_out=False)
            data = construct_page_data(result)
            return SUCCESS(data=data)
        except Exception as e:
            app.logger.error(f"获取岗位信息失败:{e}")
            return REQUEST_ERROR()
    
    
    @post.route('/update', methods=["POST", "PUT"])
    def update():
        '''
            更新岗位
            POST方法根据id返回数据
            PUT方法更新
            :return:
            '''
        res_dir = request.get_json()
        if res_dir is None:
            return NO_PARAMETER()
        if request.method == "POST":
            id = res_dir.get("id")
            if id:
                model = Post.query.get(id)
                if model:
                    dict_data = model_to_dict(model)
                    return SUCCESS(dict_data)
                else:
                    return ID_NOT_FOUND()
            else:
                PARAMETER_ERR()
        if request.method == "PUT":
            id = res_dir.get("id")
            post_name = res_dir.get("post_name")
            post_code = res_dir.get("post_code")
            post_sort = res_dir.get("post_sort")
            status = res_dir.get("status")
            remark = res_dir.get("remark")
    
            if id and post_name and post_code:
                model = Post.query.get(id)
                if model:
                    token = request.headers["Authorization"]
                    user = verify_token(token)
                    model.post_name = post_name
                    model.post_code = post_code
                    model.post_sort = post_sort
                    model.status = status
                    model.remark = remark
                    model.update_by = user['name']
                    try:
                        model.update()
                        return SUCCESS()
                    except Exception as e:
                        app.logger.error(f"更新岗位失败:{e}")
                        return UPDATE_ERROR()
                else:
                    return ID_NOT_FOUND()
            else:
                return NO_PARAMETER()
    
    
    @post.route('/create', methods=["PUT"])
    def create():
        '''
        创建岗位
        :return:
        '''
        res_dir = request.get_json()
        if res_dir is None:
            return NO_PARAMETER()
        post_name = res_dir.get("post_name")
        post_code = res_dir.get("post_code")
        post_sort = res_dir.get("post_sort")
        remark = res_dir.get("remark")
        status = res_dir.get("status")
        token = request.headers["Authorization"]
        user = verify_token(token)
        if post_name and post_code:
            try:
                is_exist = Post.query.filter(Post.post_name == post_name).first()
                if is_exist:
                    return CREATE_ERROR(msg="岗位名称已存在")
                model = Post()
                model.post_name = post_name
                model.post_code = post_code
                model.post_sort = post_sort
                model.remark = remark
                model.status = status
                model.create_by = user['name']
                model.save()
                return SUCCESS()
            except Exception as e:
                app.logger.error(f"新建字典失败:{e}")
                return CREATE_ERROR()
        else:
            return NO_PARAMETER()
    
    
    @post.route('/delete', methods=["DELETE"])
    def delete():
        '''
            根据ID删除岗位
            :return:
            '''
        res_dir = request.get_json()
        if res_dir is None:
            return NO_PARAMETER()
        id = res_dir.get("id")
        if id:
            try:
                model = Post.query.get(id)
                if model:
                    model.delete()
                    return SUCCESS()
                else:
                    return ID_NOT_FOUND()
            except Exception as e:
                app.logger.error(f"删除岗位失败:{e}")
                return DELETE_ERROR()
        else:
            return PARAMETER_ERR()
  • 相关阅读:
    【已解决】Kettle新建数据库连接报错(Mysql,MS Sql Server)
    SQL面试题-练习2
    WIN7bat批处理遍历文件夹,输出当前文件夹下所有文件。
    【已解决】MYSQL安装过程报错,怎么解决?MySQL error 0: Authentication to host 'localhost' for user 'root' using method 'caching_sha2_password' failed with message: Reading from the stream has failed.
    常用外国在线英语词典-单词查询
    Oracle 11g 服务端的安装步骤
    Oracle 查询(SELECT)语句(一)
    Oracle 增删改(INSERT、DELETE、UPDATE)语句
    记录一个 C# 导出 Excel 的坑
    C# 中的浅拷贝与深拷贝
  • 原文地址:https://www.cnblogs.com/huguodong/p/12592397.html
Copyright © 2020-2023  润新知