学而后端代码主要使用python flask框架开发, 提供后端数据存储PostgreSql, 并向学而移动版, 和学而桌面版(待开发)提供数据接口.
$ git clone https://github.com/Muxi-Studio/xueer_be.git
$ virtualenv venv && source venv/bin/activate
$ pip install -r requirements/dev.txt
如果pip安装较慢推荐使用豆瓣pypi源
本地数据库使用轻量的sqlite
$ python manage.py db init # 创建迁移目录
$ python manage.py db migrate # 初始迁移
$ python manage.py db upgrade # 更新数据库
学而设有三种用户角色(普通用户, 协管员, 管理员)
$ python manage.py shell
>> Role.insert_roles()
$ python manage.py adduser username useremail
password:
comfirmd:
完成以上步骤, 你就可以在本地运行学而桌面版(目前就一个placeholder页面), 以及在浏览器手机调试器中运行学而web app, 并使用学而的API服务.
$ python manage.py runserver -d
Tips: 推荐使用Navicat管理数据库.
由于学而后端主要通过API提供数据, 所以采用前后端分离的同步开发模式, 前后端约定好API文档后 前端使用mock虚拟数据占位, 后端则使用httpie在终端 测试API.
学而后端配置文件采用python 类的形式将配置环境分割为4个部分:
公有配置,开发配置,测试配置,生产配置
, 分别对应相应的扩展txt文件.
并且采用系统环境变量配置密钥和数据库连接路径, 既保护了敏感信息,
又有效解决了不同环境下配置的冲突问题.
linux设置环境变量的方法
$ vim ~/.bashrc
==== file .bashrc ====
set ENVVAR
export ENVVAR="xxxxxxxxx"
export PATH=$PATH:$ENVVAR
======================
$ source ~/.bashrc
桌面版和移动版路由使用flask的路由、视图函数实现, 本身没有太多逻辑功能,
只是作为一个路由占位,
并使用request.user_agent.platform
判断用户访问平台(代码如下)
def is_mobie():
platform = request.user_agent.platform
if platform in ["android", "iphone", "ipad"]:
return True
else:
return False
采用flask编写API, 具体可以参见这篇博客
学而后台在开发过程中使用过3个数据库(sqlite, mysql, postgresql), 最终决定使用两个数据库(sqlite和postgresql)分别用于本地环境和生产环境.需要注意sqlite不支持行更新和删除.
基本思路: 主要是一个save函数和一个search类, save函数实现对存入的每一个课程/教师/标签名进行排查, 对没有分的进行分词 search类用于存储这些分词 并且建立每个分词于原课程/教师/标签的关系.
这次学而和以后木犀的其他所有产品会采用统一的账号验证登录, 纳入 muxiOOOOOauth管理.
- 测试工具: httpie
- 需要注意 httpie 会自动将 --auth 字段的值进行base64加密, 以及将token进行 "Basic Basic64(token:)" 编码
- 抓包工具: mitmproxy
nginx + supervisord + gunicorn + wsgi
nginx 反向代理gunicorn启动flask应用,使用supervisord管理进程
- 压力测试工具: siege
- 统计工具: 百度统计...
muxi license @ muxistudio