【公開倉庫】基于Flask的后端項目spider-admin-pro: https://github.com/mouday/spider-admin-pro
【私有倉庫】基于Vue的前端項目spider-admin-pro-web: https://github.com/mouday/spider-admin-pro-web
一笨篷、[二次開發(fā)] :Vue前端項目spider-admin-pro-web
1瓣履、安裝項目
# 克隆項目
git clone git@github.com:mouday/spider-admin-pro-web.git
# 進入項目目錄
cd spider-admin-pro-web
# 安裝依賴
npm install
# 建議不要直接使用 cnpm 安裝以來袖迎,會有各種詭異的 bug⊙嘧叮可以通過如下操作解決 npm 下載速度慢的問題
npm install --registry=https://registry.npm.taobao.org
# 啟動服務(wù)
npm run dev
-
NVM管理node(一定要以管理員身份運行終端归形,報錯:exit status 5: ????????)
由于作者使用的node 10版本,我這里是node16厚棵,于是需要使用nvm管理多個node版本
教程【NVM管理node版本】
nvm ls available
查看可用版本
nvm install 10.24.1
安裝指定版本
nvm install latest // 安裝最新版的nodejs蔼紧,會同時一起安裝對應(yīng)的npm
nvm install 10.24.1 // 安裝指定版本號的nodejs,會同時一起安裝對應(yīng)的npm
nvm ls // 查看當(dāng)前已安裝的所有nodejs版本
nvm use 10.24.1 // nodejs版本切換
node -v 查看當(dāng)前node版本
npm -v 查看當(dāng)前npm版本
3.啟動項目
(1)修改.env.development開發(fā)環(huán)境url地址彬犯,地址指向的是本地python Flask項目(spider-admin-pro)的運行地址(需要重啟Vue)
(2)分別啟動vue項目和flask項目(因為vue依賴的是flask的接口)
(2)1躏嚎、啟動接口服務(wù)
$ python dev.py
(2)2菩貌、啟動前端開發(fā)環(huán)境
$ npm run dev
4. 修改Vue項目
我這里主要是添加logo和增加了審核記錄查詢(vue比較熟悉,不多做概述)
{
path: "/aipost",
component: Layout,
redirect: "/aipost/list",
name: "system",
meta: { title: "審核記錄", icon: "log" },
children: [
{
path: "aipost-list",
name: "aipost-aipost-list",
component: () => import('@/views/aipost/aipost'),
meta: { title: "審核記錄", icon: "log" }
},
]
}
5. 打包發(fā)布
(1)打包vue項目
$ npm run build:prod
(2)將打包文件夾 拷貝到如下目錄 :dist -> spider_admin_server/spider_admin_pro/web/public
或者直接執(zhí)行命令:npm run dep-pub
二、[二次開發(fā)]:Flask的后端項目spider-admin-pro
spider-admin-pro的目錄結(jié)構(gòu):
.
├── run.py # 程序入口
├── api # Controller層
├── service # Sevice層
├── model # Model層
├── exceptions # 異常
├── utils # 工具類
└── web # 靜態(tài)web頁
擴展
peewee: 是Python中的ORM框架嘹叫。
ORM(對象關(guān)系映射)是一種將對象與關(guān)系數(shù)據(jù)庫之間進行映射的技術(shù)(方便數(shù)據(jù)庫的增刪查改)
1. 增加配置路由诈乒,增加api入口,增加server接口服務(wù)
主要完成入口配置喂饥、條件查詢肠鲫、分頁查詢、返回數(shù)據(jù)
# 路由配置
ROUTERS = {
'/': web,
"/api/auth": auth_api,
....
"/api/aiPost": aipost_api
}
#接口服務(wù)
@classmethod
def get_aiPost(cls, page=1, size=20, status=None, search=None):
query = AiPostModel.select()
if status == 'success':
query = query.where(AiPostModel.sug == '正常')
elif status == 'reject':
query = query.where(AiPostModel.sug == '違規(guī)')
if search is not None:
query = query.where(AiPostModel.title.contains(search))
rows = query.paginate(page, size).dicts()
total = query.count()
return {
'list': rows,
'total': total
}
2. 使用ORM框架peewee進行數(shù)據(jù)庫操作(主要是查詢)
確保model字段跟mysql字段一致
# 定義一個模型類
class AiPostModel(BaseModel):
"""登錄日志"""
id = AutoField(primary_key=True)
code = CharField()
sug = CharField()
title = CharField()
newsUrl = CharField()
imageUrl = CharField()
msg = CharField()
creatTime = DateTimeField(default=datetime.datetime.now)
class Meta:
database = db
db_table = 'aipostmodel' # 與數(shù)據(jù)庫中的表名保持一致
模型基類BaseModel:連接數(shù)據(jù)庫捞高、重連
db_config = {
'host': '172.50.',
'port': 3306,
'user': 'root',
'password': 'password',
'database': 'rmzkai',
}
# 同步數(shù)據(jù)庫斷線重連類
class ReconnectMySQLDatabase(ReconnectMixin, MySQLDatabase):
pass
register_database(ReconnectMySQLDatabase, 'mysql')
# 數(shù)據(jù)庫實例
db = ReconnectMySQLDatabase(**db_config)
class BaseModel(Model):
class Meta:
database = db
3 . 打包上傳服務(wù)器并運行
將本地spider_admin_pro項目目錄下所有文件(包含已更新的Vue前端web項目)上傳覆蓋線上項目
>. DEBUG
1. 使用Git clone下載spider-admin-pro硝岗,然后pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt完成后袋毙,python dev.py 報錯
In Flask2.3.X, flask.json module deprecated JSONEncoder class, override_json_encoder is not working now. It will raise ImportError: cannot import name 'JSONEncoder' from 'flask.json'
解決:flask降級到2.2.5即可 pip install flask==2.2.5
2. 項目上傳到服務(wù)器后運行報錯
File "/xmt-env/lib/python3.11/site-packages/pymysql/err.py", line 143, in raise_mysql_exception
raise errorclass(errno, errval)
peewee.OperationalError: (1045, "Access denied for user 'root'@'cscm-spider' (using password: YES)")
解決:
鏈接MySQL 數(shù)據(jù)庫 : 本地運行host:172.50. 娄猫,傳到服務(wù)器運行直接用 localhost 就行了
db = MySQLDatabase(
'rmzkai',
user='root',
password='password',
host='localhost ',
port=3306
)
3. 運行項目gunicorn --bind '172.50.:8000' 'spider_admin_pro.main:app'
后關(guān)閉xshell窗口 aiPostList
接口報錯
解決 :使用nohup運行
nohup gunicorn --bind '172.50.:8000' 'spider_admin_pro.main:app