Python web用Django实现证券系统(移植之前的php项目)
之前我用php写过一个证券系统php+oracle实现证券系统+selenium模块动态爬取证券信息,功能还算比较完善全面,学习了python web后,我又用Django模块,将其重构了一下,这里说一下方法及遇到的问题。
然后这里给出项目的源程序Django实现证券系统
一、关于Django
Django是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站!
1.Django的特点:
强大的数据库功能:拥有强大的数据库操作接口(QuerySet API),也能执行原生SQL
自带强大后台:网站拥有一个强大的后台,轻松管理内容。
优雅的网址:用正则匹配网址,传递到对应函数,随意定义。
模版系统:易扩展的模版系统,设计简易,代码,样式 分开设计,更容易管理。
缓存系统:与memcached,redis等缓存系统联用,更出色的表现,更快的加载速度。
国际化:完全支持多国语言应用,允许定义翻译的字符,轻松翻译成不同国际的语言。
Django目录结构:
urls.py:网址入口,关联到对应的Views.py中的一个函数,访问网址对应的函数。
views.py:处理用户发出的请求,从urls.py中对应过来,通过渲染templates中的网页可以将显示内容,比如登陆后的用户名,数据,输出到网页。
models.py:与数据库操作相关,存入或读取数据时用到这个
templates文件夹:views.py中的函数渲染templates中的HTML模版,得到动态内容网页,可以用缓存来提高速度。
admin.py:后台,可以用很少量的代码就拥有一个强大的后台。
settings.py:Django的全局设置,配置文件,比如DEBUG的开关,静态文件的位置设置等。
具体教程可详见Django菜鸟教程
安装Django:如果你已经有Python环境的情况下直接在cmd中运行:
1 | pip install Django |
或者可以在pycharm中的settings->interpreter点击+号进行安装。
创建Django项目,可以在cmd中通过命令行创建(参见教程视频或菜鸟教程),也可以在pycharm中直接创建Django项目,好处是直接就可运行,但是migrate配置还是要在命令行,结合着用吧。
2.Django的MTV模式:
所谓的MVC就是把Web应用分成模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象和数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求。
Django的MTV模式本质上和MVC是一样的,也是为了各组件间的松耦合关系,只是定义上有些许不同,Django的MTV分别是指:
M 代表模型(Model):负责业务对象和数据库的关系映射(ORM)。
T 代表模板(Tempalte):负责如何把页面展示给用户(html)。
V 代表视图(View):负责业务逻辑,并在适当的时候调用Model和Template。
除了以上三层之外,还需要一个URL分发器,它的作用是将一个个的页面请求分发给不同的View处理,View再调用相应的Model和Template,MTV的响应模式如下所示:
- Web服务器(中间件)收到一个http请求
- Django在URLconf里面查找对应的视图(View)函数来处理http请求
- 视图函数调用相应的数据模型来存取数据,调用相应的模板来向用户展示页面
- 视图函数处理结束后返回一个http的响应给Web服务器
- Web服务器将响应发送给客户端
(可以参照视频教程中的讲解来理解,具体的每层的代码,逻辑,我会通过后续的证券系统实例来展示)
3.Django Admin 后台管理工具
正常创建的Django项目会自带它本身所集成好的数据库,sqlite3,并且可以在后台可视化对其操作,若是你想要用你自己的数据库比如oracle,mysql等就是在settings文件中的这里配置的。
首先说一下Django这个自带的数据库,只要你在models.py中新建的类,并为其charfield列,就可以在后台中看到这个对象所对应的表了,Django中数据库的表对应代码里就是models.py中的类
在Django项目所对应的目录下(可以用Terminal)运行命令行
1 | python manage.py createsuperuser |
然后设置对应的用户名和密码,最好不要一样,否则会被警告。然后在浏览器中访问http://127.0.0.1:8000/admin/
,就会出现登陆的界面,输入用户名密码就可以登录到后台管理数据库了,在models.py中创建类,并在admin中对应引入注册,具体参考视频/菜鸟教程,就能看到你建的表了,然后点击对应表就可以手动添加数据了,大概的效果图如下。我的是配置了oracle数据库后的效果。
二、Django连接Oracle数据库配置
1.连接配置
首先确认你有连接到oracle的模块cx-Oracle,mysql就是pymysql,没有的话先安装上。
1 | pip install cx-Oracle |
创建Djago项目并在settings中找到如下设置,修改为你自己对应的配置。
1 | DATABASES = { |
然后在cmd中cd到当前目录,或者在pycharm中打开下面的terminal运行如下命令/pycharm中创建的Django项目直接运行
1 | python manage.py runserver |
如果配置正确服务器应该可以正常跑起来
ORA-02000: missing ALWAYS keyword when create identity column based table
这个错误根本原因在Django 2.0 的release note说明了,Django2.0只支持Oracle 12.1,要连接11g,只能降级到Django 1.11。
2.与遗留数据库表整合
具体可以参照Django集成已有的数据库和应用
说一下操作的步骤:
- 首先创建一个APP(还是在当前目录下/terminal)
1
python manage.py startapp app名
- 然后使用inspectdb(The inspectdb工具内省检查你的配置文件(setting file)指向的数据库,针对你的每一个表生成一个Django model的表现,然后将这些Python model的代码显示在系统的标准输出里面。)生成你数据库存在的表等上一会,你就可以看到在你的APP名/models.py中出现了几个类,名称对应你数据库中的每个表,详细情况见上述csdn的讲解,大体意思就是,你的表中如果某列的列名是python的保留字,会在后面加上_field,然后只有有主键的表才可以在Django admin(注意要先在admin.py中注册)后台管理可视化并操作。没有主键的表点击会报ORA-00904错误。
1
python manage.py inspectdb > app名/models.py
三、证券系统项目编写
1.Model层连接oracle数据库
即上述数据库连接操作配置,基本不需要什么修改,如果想要更改一下后台展示问题,可以在每个类中新增函数。以zqgl表为例
1 | def __str__(self): |
2.Tempalte模板层
将网页模板层放到templates文件夹,css和image文件放入static,然后html中添加模板语言
注意必须将每个html中引入的外部文件/图片,音频,视频放到static中,然后用模板语言引用,不然在运行网页的时候会默认去寻找链接+文件名的路径,无法引用。
1 | {% load staticfiles %} #html首行加入 |
3.views层
在views层定义各页面请求函数以及链接跳转的逻辑(其中有些表没有主键无法通过Django集成的对象访问,我只好单独通过sql语句来对数据库操作),并在urls中加入每个视图及处理对应的链接。
在每个表单提交的处理函数前面要加入一行
1 |
关于登录记录登录信息的处理(就是cookies)我是在全局设置一个空列表usr,然后每次登陆逻辑检测成功,就将登陆的对象user,append进去,然后如果在其他的地方需要用到它的信息就调用usr[-1]即为登陆对象。
四、在腾讯证券行情中心爬取证券信息
爬虫部分较php那个项目基本没什么变化,只是新增了统计绘图,多线程,爬虫日志,并且把chrome的弹框隐藏了。具体见博客开头提到的php项目部分。
最后具体的功能跟php那个效果几乎一样,展示功能图片在压缩包中的word文档说明书有介绍。
附:如果有什么疑问,或遇到什么问题可以通过评论或右下角的信息标志给我留言,我会及时回复。