摘要

最新需要搞一套Python的股市趋势分析,朋友提供核心算法,我负责搭建整个架子。数据部分以前有写过现成的东西(Go写的),重新拿过来改成了Python版本。之后发现虽然数据可以成功分析,但只能通过敲命令行及看log方式进行分析,没有展示界面不太好分享,所以想到了用Django来搭一套Web平台练练手。

一、Mysql

之前的一篇帖子中写过,现在最简单的部分就是Mysql。通过下面的命令把我的Mysql容器起来就行,其他容器可以通过-h 127.0.0.1 -P13306访问。

二、Django

Django部分的源码都已经提交Github(其实也没多少代码),所以这里只讲心得体会。这次开发之前买了本书–《Django企业开发实战》,主要是时间关系,看了前3章就开始动手了。后来发现有些地方书中并没有讲清楚,导致我在admin和view关系上被误导了很久。

起初我以为admin只是用来搭建架子,所有的request消息都会经过view+form处理。但实际上不管我怎么修改view的代码,打断点,加日志,request消息都没法走到view。后来发现因为我的url.py里面的url(r’^admin/‘, admin.site.urls)是指所有http://xxxx/admin/的请求都会走到admin中,而只有http://xxxx/这样的请求才会经过url(r'^$', IndexView.as_view(), name=‘index’)走到view中,这两个是完全独立的,经过view的请求如果想长得和admin展示出来的一样,就得自己画界面。而《Django企业开发实战》很大一个问题就是没有给出截图,导致我理解错误。

这里展示一下我目前的django结构(和我Github上代码目录结构有一丢丢区别,问题不大)。

三、Docker封装

同上面的Github。因为在Linux环境上操作,python包的管理会很麻烦,我也不习惯用virtualenv创建虚拟环境,所以就直接用Docker进行了封装。整个工程如图所示:

  • build.sh是一个简单的打包脚本,把django代码打了一个压缩包,以及管理一下镜像的名字;
  • requirements.txt是python的依赖,没啥好说的;
  • Dockerfile是打镜像的脚本,首先会从网上pull一个python:3.6.0镜像,在其基础上加载了analize.sys.tar.gz代码包,并安装requirements.txt中的python依赖;

如果是第一次启动容器,则使用下面这个命令,进去后再执行建表等操作:

docker run --privileged -tid -e "container=docker" --restart=always -h analize --name=analize --net=host --stop-signal=RTMIN+3 analize-sys:latest
python ./analize_sys/manage.py makemigrations
python ./analize_sys/manage.py migrate
python ./analize_sys/manage.py createsuperuser
python ./analize_sys/manage.py runserver 0.0.0.0:8000

或者建表完成后直接用这个命令启动容器

docker run --privileged -tid -e "container=docker" --restart=always -h analize --name=analize --net=host --stop-signal=RTMIN+3 analize-sys:latest python ./analize_sys/manage.py runserver 0.0.0.0:8000

四、项目展示

首页进去后会看到一个“分析任务”和“分析结果”。在“分析任务”添加想要分析的股票代码或者选择已经做过处理的.csv表格数据,然后该任务会被置为“待分析”状态。“分析结果”列表中会看到经过算法处理后的结果,在某个时间段内,预测了多少次,其中多少次预测正确什么的。

当然,这个项目我不会把算法等核心代码提交,Github上只能看到页面相关的代码(所以一开始就说了没多少代码)。如何获取数据以及如何分析数据的代码是不会展示的。

五、Django项目演进

我目前所写的Django代码如果不是前面走了弯路,差不多一天时间就能写出来。当然这只是一个非常雏形的或者说原始的东西。如果要对这个项目进行改造,继续在admin.py上改肯定是不现实或者没有学习意义的。所以思考了一下该项目的演进方向:

  1. 从默认的admin演进到xadmin(Django2.0版本)。xadmin是一个很强大的框架,在admin基础上做了很多改进,但该框架的核心还是MVC架构,另外就是xadmin及xadmin2已经停止维护了,目前对Django2的支持也不是很好,所以虽然该方案改造成本最低,但其生命周期非常有限。

  2. 从默认的admin演进到xadmin3.0。xadmin3.0使用React和Redux套餐,其核心思想已经变成了前后端分离,所以后端django部分需要django-rest-framework生成RESTful API用于对接xadmin。但该项目似乎还在孵化阶段,另一个问题是React和Vue一样,需要学习成本,然后也自己画前端。

  3. 从默认的admin演进到vue。和上面的一样,需要django-rest-framework,需要学习vue,需要自己找vue前端框架,需要自己画前端。

以上