技术栈概览
本项目采用轻量级 Web 框架 Flask 构建后端,前端结合 Vue.js 实现交互,数据存储选用 MySQL 5.7。开发环境基于 Python 3.8,使用 PyCharm 进行编码,数据库管理通过 Navicat 12 完成。
界面展示
系统首页

用户注册与登录

周边服务模块

个人中心与管理端

核心技术与架构
后端框架:Flask
Flask 作为微框架,只保留路由、会话管理等核心功能,扩展性极强。配合 SQLAlchemy 等扩展,可以快速搭建 RESTful API。相比重型框架,它更灵活,适合快速迭代的数据分析类项目。
前端视图:Vue.js
Vue 专注于视图层,易于上手且能与现有项目整合。在单页面应用(SPA)中,它能有效减少页面刷新,提升用户体验。
数据库:MySQL
MySQL 开源、跨平台且性能稳定,支持多线程处理,非常适合存储结构化的旅游数据及用户信息。
架构模式:B/S
采用浏览器/服务器模式,将核心逻辑集中在服务端,降低了客户端维护成本,便于统一更新和权限控制。
关键功能实现
数据采集与爬虫
系统集成了 Scrapy 爬虫模块,能够自动抓取景点、住宿及美食信息。通过动态配置表名,实现了通用化的数据爬取接口。
人脸识别安全验证
为了增强账户安全性,接入了百度 AI 的人脸识别 API。在关键操作或登录环节,通过比对两张图片的相似度来确认身份。
数据统计与可视化
后端提供按值统计接口,支持对特定字段进行聚合查询,返回 JSON 格式数据供前端图表渲染,直观展示资源分布情况。
代码片段解析
这里展示几个核心接口的实现逻辑,重点在于如何调用外部服务和处理请求。
@main_bp.route("/pythonfu3slnz4/matchFace", methods=['GET'])
def pythonfu3slnz4_matchface():
''' baidubce 百度人脸识别 '''
if request.method == 'GET':
msg = {"code": normal_code}
req_dict = session.get("req_dict")
face1 = req_dict.get("face1")
# 获取本地文件路径
file_path1 = '{}/api/templates/front/{}'.format(
os.getcwd(), face1)
face2 = req_dict.get("face2")
file_path2 = '{}/api/templates/front/{}'.format(
os.getcwd(), face2)
# 获取百度 API Key 和 SecretKey
data = config.getbyparams(config, config, {"name":"APIKey"})
client_id = data[0].get("value")
data = config.getbyparams(config, config, {"name":"SecretKey"})
client_secret = data[0].get("value")
bdb = BaiDuBce()
score = bdb.bd_check2pic(file_path1, file_path2)
msg['score'] = score
return jsonify(msg)
注意: 实际部署时,os.system(cmd) 执行爬虫命令存在安全风险,建议在生产环境中改用异步任务队列(如 Celery)来处理爬虫逻辑,避免阻塞主线程。
@main_bp.route("/pythonfu3slnz4/spider/<tableName>", methods=['GET'])
def schema_spider(tableName):
msg = {"code": normal_code, "msg": "success", "data": []}
# Linux cmd = "cd /yykj/python/9999/spider19ec523m && scrapy crawl "+tableName+"Spider -a databaseName=pythonfu3slnz4"
# Windows # cmd = "cd C:\\test1\\spider && scrapy crawl " + tableName + "Spider -a databaseName=pythonfu3slnz4"
os.system(cmd)
return jsonify(msg)
@main_bp.route("/pythonfu3slnz4/value/<tableName>/<xColumnName>/<yColumnName>", methods=['GET'])
def schema_value_quyu(tableName, xColumnName, yColumnName):
''' 按值统计接口 '''
if request.method == 'GET':
msg = {"code": normal_code, "msg": "success", "data": {}}
mapping_str_to_object = {}
for model in Base_model._decl_class_registry.values():
if hasattr(model, '__tablename__'):
mapping_str_to_object[model.__tablename__] = model
msg['data'] = mapping_str_to_object[tableName].getvaluebyxycolumnname(
mapping_str_to_object[tableName],
mapping_str_to_object[tableName],
xColumnName,
yColumnName)
return jsonify(msg)
测试与优化
系统上线前进行了全面的软件测试。重点验证了数据录入的准确性、接口响应的稳定性以及权限控制的严密性。通过对比预期输出与实际结果,修复了部分边界条件下的 Bug,确保了游客体验流畅。
总结
本系统通过整合 Python 生态工具链,实现了对黑龙江旅游资源的数字化管理。不仅提升了数据获取效率,还通过可视化手段辅助决策。对于类似的数据分析项目,这种模块化设计思路具有较高的参考价值。

