Merge branch 'v2' into pr_5

# Conflicts:
#	applications/view/__init__.py
This commit is contained in:
mkg
2021-06-13 16:14:23 +08:00
33 changed files with 191 additions and 167 deletions
+5
View File
@@ -0,0 +1,5 @@
FLASK_APP=app.py
FLASK_ENV=development
FLASK_DEBUG=1
FLASK_RUN_HOST = 127.0.0.1
FLASK_RUN_PORT = 5000
+11
View File
@@ -1,6 +1,17 @@
from applications import create_app from applications import create_app
from flask_migrate import Migrate
from applications.extensions import db
from applications.common.utils.init_databases import init_db
app = create_app() app = create_app()
migrate = Migrate(app, db)
@app.cli.command()
def init():
init_db()
if __name__ == '__main__': if __name__ == '__main__':
app.run() app.run()
-2
View File
@@ -1,8 +1,6 @@
import os import os
from flask import Flask from flask import Flask
from flask_uploads import configure_uploads from flask_uploads import configure_uploads
from applications.common.utils.upload import photos from applications.common.utils.upload import photos
from applications.configs import common from applications.configs import common
from applications.extensions import init_plugs from applications.extensions import init_plugs
+2 -1
View File
@@ -1,6 +1,7 @@
from applications.common.utils.validate import xss_escape from applications.common.utils.validate import xss_escape
from applications.extensions import db from applications.extensions import db
from applications.models import Dept, DeptSchema from applications.models import Dept
from applications.schemas import DeptSchema
from applications.models import User from applications.models import User
from applications.common.curd import model_to_dicts from applications.common.curd import model_to_dicts
+2 -1
View File
@@ -1,6 +1,7 @@
from applications.common.utils.validate import xss_escape from applications.common.utils.validate import xss_escape
from applications.extensions import db from applications.extensions import db
from applications.models import DictType, DictData, DictTypeSchema, DictDataSchema from applications.models import DictType, DictData
from applications.schemas import DictTypeSchema, DictDataSchema
from applications.common.curd import model_to_dicts from applications.common.curd import model_to_dicts
+2 -1
View File
@@ -4,7 +4,8 @@ from sqlalchemy import desc
from applications.common.utils.upload import photos from applications.common.utils.upload import photos
from applications.extensions import db from applications.extensions import db
from applications.models import Photo, PhotoSchema from applications.models import Photo
from applications.schemas import PhotoSchema
from applications.common.curd import model_to_dicts from applications.common.curd import model_to_dicts
+1 -1
View File
@@ -3,7 +3,7 @@ from flask import session, make_response, current_app
from flask_login import current_user from flask_login import current_user
from applications.common.utils.gen_captcha import gen_captcha from applications.common.utils.gen_captcha import gen_captcha
from applications.models.admin_power import PowerSchema from applications.schemas import PowerSchema
# 授权路由存入session # 授权路由存入session
+2 -1
View File
@@ -1,6 +1,7 @@
from applications.common.utils.validate import xss_escape from applications.common.utils.validate import xss_escape
from applications.extensions import db from applications.extensions import db
from applications.models.admin_power import Power, PowerSchema2 from applications.models.admin_power import Power
from applications.schemas import PowerSchema2
from applications.models import Role from applications.models import Role
from applications.common.curd import model_to_dicts from applications.common.curd import model_to_dicts
+4 -3
View File
@@ -1,9 +1,10 @@
from sqlalchemy import and_ from sqlalchemy import and_
from applications.common.utils.validate import xss_escape from applications.common.utils.validate import xss_escape
from applications.extensions import db from applications.extensions import db
from applications.models import Role, RoleSchema from applications.models import Role
from applications.models.admin_power import Power, PowerSchema2 from applications.schemas import RoleSchema
from applications.models.admin_power import Power
from applications.schemas import PowerSchema2
from applications.models import User from applications.models import User
# 获取角色对象 # 获取角色对象
+2 -1
View File
@@ -2,7 +2,8 @@ from flask import jsonify
from flask_login import current_user from flask_login import current_user
from sqlalchemy import and_, desc from sqlalchemy import and_, desc
from applications.extensions import db from applications.extensions import db
from applications.models import User, UserSchema from applications.models import User
from applications.schemas import UserSchema
from applications.models import Role from applications.models import Role
from applications.models import AdminLog from applications.models import AdminLog
@@ -1,14 +1,9 @@
import sys
from dotenv import dotenv_values from dotenv import dotenv_values
sys.path.append('../')
import sqlparse import sqlparse
import pymysql import pymysql
config = dotenv_values('.env') config = dotenv_values('.env')
# MySql配置信息 # MySql配置信息
HOST = config.get('MYSQL_PASSWORD') or '127.0.0.1' HOST = config.get('MYSQL_HOST') or '127.0.0.1'
PORT = config.get('MYSQL_PORT') or 3306 PORT = config.get('MYSQL_PORT') or 3306
DATABASE = config.get('MYSQL_DATABASE') or 'PearAdminFlask' DATABASE = config.get('MYSQL_DATABASE') or 'PearAdminFlask'
USERNAME = config.get('MYSQL_USERNAME') or 'root' USERNAME = config.get('MYSQL_USERNAME') or 'root'
@@ -60,7 +55,7 @@ def init_db():
return return
if init_database(): if init_database():
print('数据库%s创建成功' % str(DATABASE)) print('数据库%s创建成功' % str(DATABASE))
execute_fromfile('pear.sql') execute_fromfile(BASE_DIR + '../../../test/pear.sql')
print('表创建成功') print('表创建成功')
print('欢迎使用pear-admin-flask,请使用 flask run 命令启动程序') print('欢迎使用pear-admin-flask,请使用 flask run 命令启动程序')
+7 -7
View File
@@ -1,9 +1,9 @@
from .admin_dept import Dept, DeptSchema from .admin_dept import Dept
from .admin_dict import DictType, DictData, DictTypeSchema, DictDataSchema from .admin_dict import DictType, DictData
from .admin_log import AdminLog, LogSchema from .admin_log import AdminLog
from .admin_photo import Photo, PhotoSchema from .admin_photo import Photo
from .admin_power import Power, PowerSchema, PowerSchema2 from .admin_power import Power
from .admin_role import Role, RoleSchema from .admin_role import Role
from .admin_role_power import role_power from .admin_role_power import role_power
from .admin_user import User, UserSchema from .admin_user import User
from .admin_user_role import user_role from .admin_user_role import user_role
+1 -14
View File
@@ -1,6 +1,5 @@
import datetime import datetime
from applications.extensions import db, ma from applications.extensions import db
from marshmallow import fields, validate
class Dept(db.Model): class Dept(db.Model):
@@ -17,15 +16,3 @@ class Dept(db.Model):
address = db.Column(db.String(255), comment="详细地址") address = db.Column(db.String(255), comment="详细地址")
create_at = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间') create_at = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
update_at = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='创建时间') update_at = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='创建时间')
class DeptSchema(ma.Schema): # 序列化类
deptId = fields.Integer(attribute="id")
parentId = fields.Integer(attribute="parent_id")
deptName = fields.Str(attribute="dept_name")
leader = fields.Str()
phone = fields.Str()
email = fields.Str(validate=validate.Email())
address = fields.Str()
status = fields.Str(validate=validate.OneOf(["0", "1"]))
sort = fields.Integer()
+1 -22
View File
@@ -1,7 +1,5 @@
import datetime import datetime
from applications.extensions import db
from applications.extensions import db, ma
from marshmallow import fields
class DictType(db.Model): class DictType(db.Model):
@@ -26,22 +24,3 @@ class DictData(db.Model):
remark = db.Column(db.String(255), comment='备注') remark = db.Column(db.String(255), comment='备注')
create_time = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间') create_time = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
update_time = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间') update_time = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间')
class DictTypeSchema(ma.Schema): # 序列化类
id = fields.Str(attribute="id")
typeName = fields.Str(attribute="type_name")
typeCode = fields.Str(attribute="type_code")
description = fields.Str(attribute="description")
createTime = fields.Str(attribute="create_time")
updateName = fields.Str(attribute="update_time")
remark = fields.Str()
enable = fields.Str()
class DictDataSchema(ma.Schema): # 序列化类
dataId = fields.Str(attribute="id")
dataLabel = fields.Str(attribute="data_label")
dataValue = fields.Str(attribute="data_value")
remark = fields.Str()
enable = fields.Str()
+1 -15
View File
@@ -1,7 +1,5 @@
import datetime import datetime
from applications.extensions import db, ma from applications.extensions import db
from marshmallow import fields
class AdminLog(db.Model): class AdminLog(db.Model):
__tablename__ = 'admin_admin_log' __tablename__ = 'admin_admin_log'
@@ -14,15 +12,3 @@ class AdminLog(db.Model):
success = db.Column(db.Integer) success = db.Column(db.Integer)
user_agent = db.Column(db.Text) user_agent = db.Column(db.Text)
create_time = db.Column(db.DateTime, default=datetime.datetime.now) create_time = db.Column(db.DateTime, default=datetime.datetime.now)
class LogSchema(ma.Schema): # 序列化类
id = fields.Integer()
method = fields.Str()
uid = fields.Str()
url = fields.Str()
desc = fields.Str()
ip = fields.Str()
user_agent = fields.Str()
success = fields.Bool()
create_time = fields.DateTime()
+1 -13
View File
@@ -1,7 +1,5 @@
import datetime import datetime
from applications.extensions import db
from applications.extensions import db, ma
from marshmallow import fields
class Photo(db.Model): class Photo(db.Model):
@@ -12,13 +10,3 @@ class Photo(db.Model):
mime = db.Column(db.CHAR(50), nullable=False) mime = db.Column(db.CHAR(50), nullable=False)
size = db.Column(db.CHAR(30), nullable=False) size = db.Column(db.CHAR(30), nullable=False)
create_time = db.Column(db.DateTime, default=datetime.datetime.now) create_time = db.Column(db.DateTime, default=datetime.datetime.now)
class PhotoSchema(ma.Schema):
id = fields.Integer()
name = fields.Str()
href = fields.Str()
mime = fields.Str()
size = fields.Str()
ext = fields.Str()
create_time = fields.DateTime()
+1 -32
View File
@@ -1,6 +1,5 @@
import datetime import datetime
from applications.extensions import db, ma from applications.extensions import db
from marshmallow import fields
class Power(db.Model): class Power(db.Model):
@@ -17,33 +16,3 @@ class Power(db.Model):
create_time = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间') create_time = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
update_time = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间') update_time = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间')
enable = db.Column(db.Integer, comment='是否开启') enable = db.Column(db.Integer, comment='是否开启')
# 权限models序列化类
class PowerSchema(ma.Schema):
id = fields.Integer()
title = fields.Str(attribute="name")
type = fields.Str()
code = fields.Str()
href = fields.Str(attribute="url")
openType = fields.Str(attribute="open_type")
parent_id = fields.Integer()
icon = fields.Str()
sort = fields.Integer()
create_time = fields.DateTime()
update_time = fields.DateTime()
enable = fields.Integer()
class PowerSchema2(ma.Schema): # 序列化类
powerId = fields.Str(attribute="id")
powerName = fields.Str(attribute="name")
powerType = fields.Str(attribute="type")
powerUrl = fields.Str(attribute="url")
openType = fields.Str(attribute="open_type")
parentId = fields.Str(attribute="parent_id")
icon = fields.Str()
sort = fields.Integer()
create_time = fields.DateTime()
update_time = fields.DateTime()
enable = fields.Integer()
+1 -14
View File
@@ -1,6 +1,5 @@
import datetime import datetime
from applications.extensions import db, ma from applications.extensions import db
from marshmallow import fields
class Role(db.Model): class Role(db.Model):
@@ -15,15 +14,3 @@ class Role(db.Model):
create_time = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间') create_time = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
update_time = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间') update_time = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间')
power = db.relationship('Power', secondary="admin_role_power", backref=db.backref('role')) power = db.relationship('Power', secondary="admin_role_power", backref=db.backref('role'))
class RoleSchema(ma.Schema):
id = fields.Integer()
roleName = fields.Str(attribute="name")
roleCode = fields.Str(attribute="code")
enable = fields.Str()
remark = fields.Str()
details = fields.Str()
sort = fields.Integer()
create_at = fields.DateTime()
update_at = fields.DateTime()
+1 -20
View File
@@ -1,9 +1,7 @@
import datetime import datetime
from flask_login import UserMixin from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash from werkzeug.security import generate_password_hash, check_password_hash
from applications.extensions import db, ma from applications.extensions import db
from marshmallow import fields
from applications.models import Dept
class User(db.Model, UserMixin): class User(db.Model, UserMixin):
@@ -25,20 +23,3 @@ class User(db.Model, UserMixin):
def validate_password(self, password): def validate_password(self, password):
return check_password_hash(self.password_hash, password) return check_password_hash(self.password_hash, password)
# 用户models的序列化类
class UserSchema(ma.Schema):
id = fields.Integer()
username = fields.Str()
realname = fields.Str()
enable = fields.Integer()
create_at = fields.DateTime()
update_at = fields.DateTime()
dept = fields.Method("get_dept")
def get_dept(self, obj):
if obj.dept_id != None:
return Dept.query.filter_by(id=obj.dept_id).first().dept_name
else:
return None
+7
View File
@@ -0,0 +1,7 @@
from .admin_user import UserSchema
from .admin_role import RoleSchema
from .admin_power import PowerSchema, PowerSchema2
from .admin_dict import DictDataSchema, DictTypeSchema
from .admin_dept import DeptSchema
from .admin_log import LogSchema
from .admin_photo import PhotoSchema
+14
View File
@@ -0,0 +1,14 @@
from applications.extensions import ma
from marshmallow import fields, validate
class DeptSchema(ma.Schema):
deptId = fields.Integer(attribute="id")
parentId = fields.Integer(attribute="parent_id")
deptName = fields.Str(attribute="dept_name")
leader = fields.Str()
phone = fields.Str()
email = fields.Str(validate=validate.Email())
address = fields.Str()
status = fields.Str(validate=validate.OneOf(["0", "1"]))
sort = fields.Integer()
+21
View File
@@ -0,0 +1,21 @@
from applications.extensions import ma
from marshmallow import fields
class DictTypeSchema(ma.Schema):
id = fields.Str(attribute="id")
typeName = fields.Str(attribute="type_name")
typeCode = fields.Str(attribute="type_code")
description = fields.Str(attribute="description")
createTime = fields.Str(attribute="create_time")
updateName = fields.Str(attribute="update_time")
remark = fields.Str()
enable = fields.Str()
class DictDataSchema(ma.Schema):
dataId = fields.Str(attribute="id")
dataLabel = fields.Str(attribute="data_label")
dataValue = fields.Str(attribute="data_value")
remark = fields.Str()
enable = fields.Str()
+14
View File
@@ -0,0 +1,14 @@
from applications.extensions import ma
from marshmallow import fields
class LogSchema(ma.Schema):
id = fields.Integer()
method = fields.Str()
uid = fields.Str()
url = fields.Str()
desc = fields.Str()
ip = fields.Str()
user_agent = fields.Str()
success = fields.Bool()
create_time = fields.DateTime()
+12
View File
@@ -0,0 +1,12 @@
from applications.extensions import ma
from marshmallow import fields
class PhotoSchema(ma.Schema):
id = fields.Integer()
name = fields.Str()
href = fields.Str()
mime = fields.Str()
size = fields.Str()
ext = fields.Str()
create_time = fields.DateTime()
+32
View File
@@ -0,0 +1,32 @@
from applications.extensions import ma
from marshmallow import fields
# 权限models序列化类
class PowerSchema(ma.Schema):
id = fields.Integer()
title = fields.Str(attribute="name")
type = fields.Str()
code = fields.Str()
href = fields.Str(attribute="url")
openType = fields.Str(attribute="open_type")
parent_id = fields.Integer()
icon = fields.Str()
sort = fields.Integer()
create_time = fields.DateTime()
update_time = fields.DateTime()
enable = fields.Integer()
class PowerSchema2(ma.Schema): # 序列化类
powerId = fields.Str(attribute="id")
powerName = fields.Str(attribute="name")
powerType = fields.Str(attribute="type")
powerUrl = fields.Str(attribute="url")
openType = fields.Str(attribute="open_type")
parentId = fields.Str(attribute="parent_id")
icon = fields.Str()
sort = fields.Integer()
create_time = fields.DateTime()
update_time = fields.DateTime()
enable = fields.Integer()
+14
View File
@@ -0,0 +1,14 @@
from applications.extensions import ma
from marshmallow import fields
class RoleSchema(ma.Schema):
id = fields.Integer()
roleName = fields.Str(attribute="name")
roleCode = fields.Str(attribute="code")
enable = fields.Str()
remark = fields.Str()
details = fields.Str()
sort = fields.Integer()
create_at = fields.DateTime()
update_at = fields.DateTime()
+20
View File
@@ -0,0 +1,20 @@
from applications.extensions import ma
from marshmallow import fields
from applications.models import Dept
# 用户models的序列化类
class UserSchema(ma.Schema):
id = fields.Integer()
username = fields.Str()
realname = fields.Str()
enable = fields.Integer()
create_at = fields.DateTime()
update_at = fields.DateTime()
dept = fields.Method("get_dept")
def get_dept(self, obj):
if obj.dept_id != None:
return Dept.query.filter_by(id=obj.dept_id).first().dept_name
else:
return None
+2 -1
View File
@@ -3,7 +3,8 @@ from sqlalchemy import desc
from applications.common.utils.http import table_api from applications.common.utils.http import table_api
from applications.common.utils.rights import authorize from applications.common.utils.rights import authorize
from applications.models import AdminLog, LogSchema from applications.models import AdminLog
from applications.schemas import LogSchema
from applications.common.curd import model_to_dicts from applications.common.curd import model_to_dicts
admin_log = Blueprint('adminLog', __name__, url_prefix='/admin/log') admin_log = Blueprint('adminLog', __name__, url_prefix='/admin/log')
-1
View File
@@ -1,5 +1,4 @@
from flask import Blueprint, render_template, request, jsonify from flask import Blueprint, render_template, request, jsonify
from applications.common.utils.http import table_api, success_api, fail_api from applications.common.utils.http import table_api, success_api, fail_api
from applications.common.utils.rights import authorize from applications.common.utils.rights import authorize
from applications.common.utils.validate import xss_escape from applications.common.utils.validate import xss_escape
+1 -1
View File
@@ -4,7 +4,7 @@ from marshmallow import INCLUDE
from applications.common.utils.http import success_api, fail_api from applications.common.utils.http import success_api, fail_api
from applications.common.utils.rights import authorize from applications.common.utils.rights import authorize
from applications.common.utils.validate import check_data from applications.common.utils.validate import check_data
from applications.models import DeptSchema from applications.schemas import DeptSchema
from applications.common.admin import dept_curd as dept_curd from applications.common.admin import dept_curd as dept_curd
dept_bp = Blueprint('dept', __name__, url_prefix='/dept') dept_bp = Blueprint('dept', __name__, url_prefix='/dept')
+1 -3
View File
@@ -1,6 +1,4 @@
from flask import Blueprint from applications.view.index.index import index_bp
index_bp = Blueprint('Index', __name__, url_prefix='/')
from . import index from . import index
+2 -2
View File
@@ -1,6 +1,6 @@
from flask import render_template from flask import render_template, Blueprint
from . import index_bp index_bp = Blueprint('Index', __name__, url_prefix='/')
@index_bp.route('/') @index_bp.route('/')