<body onload="javascript:return require();">

五、激活模型
这步很关键,你每次修改model里面的数据,都要从复执行这下面这几个步骤:

      图片 1

小结:由于缺乏实战经验,笔主深知这些代码在性能、安全和其他方面都跟工业级别的代码相差十万八千里,但这也是我开通这个博客以目的:作为一个初学者,希望这个博客能记录我一步一步成为一名优秀工程师的轨迹。

  1. 创建项目

回到顶部

function require() {        var url = "{U('Group/checkNotify')}";                    $.get(url,null,function(data) {                              // 如果获得的数据不为空,则显示提醒             if ($.trim(data) != '') {                   // 这里写提醒的方式              alert('haha');             }        });          // 每三秒请求一次        setTimeout('require()',3000);  }

image.png

    图片 2

在后台查询三秒前到当前时刻数据库中是否有数据插入,如果有,则返回所需要的信息

  1. 介绍一下数据库的配置就是在setting里面配置链接的数据库,这里系统以及配置好了,链接一个叫做db.sqlite3的数据库,也许有读者会问,这个数据库在哪里,我怎么没有,没关系,你跑一下项目,系统就自动生成一个这个数据库了,当然django也支持MySQL等其他数据库,这里为了方便讲解,就用系统自带的

如果,想给予我更多的鼓励,求打
😉

 

  1. 之后,我们运行一下项目,输入http://127.0.0.1:8000/admin
    看一下效果

    图片 3

    login.png

 图片 4

public function checkNotify() {        // 实例化自定义的模型类      $Notify = D("Notification");        // 获取当前用户的id      $mid = $_SESSION['member']['id'];        // 由于Ajax三秒钟才执行一次,所以新数据的插入时间要晚于查询的的请求时间(当前时间)三秒钟      $time = time() - 3;        // 准备查询条件      $where = "mid = $mid and created>$time";         // 查找数据库中是否有新数据插入      $bool = $Notify->where($where)->find();                // 如果查询结果非空,则输出结果集第零条数据的type参数,即提醒类型,然后再从数据库对应表中获取提醒内容      //本测试默认3秒中内只有一条消息,如果想更加精确,也可以缩短请求时间      if ($bool != null) {            //测试数据                    echo $bool[0]['type'];      };  }
![](https://upload-images.jianshu.io/upload_images/1750086-aafd2d581f75a019.png)

生成站点Model.png

阅读目录

我的思路是,单独在数据库中建一个提醒表,表主要由接收者的id和消息类型两个字段组成

总结

今天代码君教了大家网站后台的搭建,可能你看完文章会觉得很容易,那是因为代码君已经帮你都踩完坑了,我在写教程之前,也参考了很多文章,大多数写的思路都不是很清晰,正因为如此,代码君才打算写这篇教程指引读者,原创不易,请觉得有用的读者为代码君点个赞哈~

图片 5

 

 

  1. 在 myBolg/settings.py
    中,修改INSTALLED_APPS,引入要用到的Application,我们目前只有一个sites,已经引用过了,所以无需再引用

  2. 执行终端命令

图片 6


图片 7

 
 目前快递任务有信息变更会插入一条消息,消息通知任务3分钟轮询一次p_Message表,对于每个消息最多会进行三次发送(前两次都失败),发送完成将p_Message数据插入到p_MessageHistory

/*  前台提醒表  */  CREATE TABLE IF NOT EXISTS notification(      id           INT NOT NULL AUTO_INCREMENT PRIMARY KEY,    --    主键自增      mid         INT NOT NULL DEFAULT 0,                        --    用户id      type        INT NOT NULL DEFAULT 0                        --  0:私信 1:帖子评论 2:商品售出 3:商品评论 4:小组申请已发送 5:小组创建成功 6:小组新成员加入 7:小组旧成员退出 8:活动邀请  )ENGINE=MyISAM DEFAULT CHARSET=UTF8;

图片 8

 其中youemail@xx.com为接收进度信息变更邮箱地址,只要有进度变更,系统会自动发邮件,记得修改成自己的邮箱地址 

当然,要让文档载入完毕后就执行该函数

终端

 

 

  1. 因为全部是英文,代码君看不惯,想把他改成中文settings.py中将LANGUAGE_CODE
    中的’en-us’ 改成 ‘zh-Hans’,这样看起来是不是舒服多了
  • Quart.Net介绍
  • Cron表达式
  • 开源TaskManager实现原理
  • 使用介绍
  • 总结

 

python manage.py migrate

1.数据库连接信息

 

![](https://upload-images.jianshu.io/upload_images/1750086-3523a110ed0e9626.png)

创建项目.png

     图片 9

 

![](https://upload-images.jianshu.io/upload_images/1750086-aa323da7f34638cb.png)

image.png



![](https://upload-images.jianshu.io/upload_images/1750086-69b02659b778ebcf.png)

image.png

图片 10

然后在前台页面中写一个递归函数,用来请求Ajax。

image.png

    2.修改TaskConfig.xml配置文件

心血来潮想为自己的小项目做一个提醒系统,譬如私信,评论等消息都能及时传递过来。由于道行尚浅,网上那些长轮询对于我略微复杂,于是觉得还是自己写一写试试比较好。

  1. 创建完账户就可以去登录了,效果如下

  GitHub地址:由于SVN地址不稳定,很多网友下载不下来,所以决定将代码托管到GitHub
  

![](https://upload-images.jianshu.io/upload_images/1750086-d4e65957b96a8ea1.png)

image.png

 
 代理IP爬虫:每隔一小时从网站上爬取最新的代理IP信息,爬下来的数据存在p_IPProxy表,有了这些代理IP以后,可以用来做投票机,刷接口之类的应用了。相信你肯定遇到过同学或同事发给你一个链接让你帮忙给XX投个票之类的问题,但是呢很多投票都限制了一个IP只能投一票,那么有了许多代理IP你就可以实现一个人投N票了。关于使用代理IP请求接口获取数据的实例,将在下一篇文章为大家介绍。

  1. 到登录页基本完成一半啦,接下来就需要创建一个管理员账户用于登录使用,

     
体验工具下载地址:TaskManager 
解压后文件如下,修改Config.xml数据库连接,使用WSWinForm进行安装。

  1. 将model添加到sites/admin.py里

  很早之前准备写Quartz系列文章,现在终于能够实现了。从本篇开始将带你实现一款自己的任务管理平台。在工作中你曾经需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行。一个自动执行而无须干预的任务在执行过程中如果发生一个严重错误,应用能够知到其执行失败并尝试重新执行吗?你和你的团队是用.NET编程吗?如果这些问题中任何一个你回答是,那么你应该使用Quartz.NET调度器。

一个好的项目数据库管理后台是必须的,今天代码君教大家搭建Django网站后台,当然做网站后台的前提是需要有Python以及Django的开发环境,至于如何搭建这些开发环境,请查看我的上一篇文章
Mac
基于Python搭建Django应用框架,这篇文章的讲解是基于上一篇的,好了,开始进入正题

    Cron表达式是用来指定任务执行频率的,前面我已经写了一篇Quartz
Cron表达式
在线生成器的文章,大家可以直接拿来使用。

![](https://upload-images.jianshu.io/upload_images/1750086-f3ea49b679cc305e.png)

image.png

   项目结构介绍:项目是基于Quartz.NET的windows服务,目前包含六个项目

![](https://upload-images.jianshu.io/upload_images/1750086-374e930ca2b9c0df.png)

Model

   系统原理解析:

  1. 在sites中的models创建数据库表的模型,如下图,字段有title、url、body、create_date,

运行成功后会生成Logs文件夹,目前系统会分任务记录执行日志,方便使用者查看各个任务的执行情况

   图片 11

在上一篇文章中我们讲解了如何创建一个网站项目,今天代码君以搭建一个个人博客网站作为例子讲解网站后台的搭建
一、博客网站的创建

 ExpressNo:为快递单号 

  1. UnicodeEncodeError: ‘ascii’ codec can’t encode characters
    之前模型model中写了一个方法 def
    str(self):这个是旧版本中用的方法,Django新版本要换成def
    unicode(self):, 这样就解决了字符串传递时出错的问题,统一编码为Unicode字符串。
  2. OperationalError no such table / OperationalError table
    sites_article has no column named test

    这是一类错误,就是我之前提醒的,我们增加model或者修改models.py里面的代码后,需要从新执行步骤五,步骤五的作用就是更新数据库表的信息,比如你新增model中的一个字段,没有更新数据库表,自然会报上面的错误
    解决方法:运行步骤五的终端命令

 

python manage.py createsuperuser

 
 TaskManager是基于Quartz.NET的一款开源任务管理系统,使用Window服务来承载。目前系统集成了四个常用任务,代理IP爬虫,快递进度,消息通知,动态修改Job任务。

![](https://upload-images.jianshu.io/upload_images/1750086-8f5951c72d4cc10b.png)

数据库配置.png

  图片 12图片 13

建了一个Python技术交流群,想入群的读者请加微信

图片 14

Python入群.png

INSERT INTO dbo.p_ExpressInfo(ExpressNo,ExpressCompanyCode,Receiver)
SELECT '880350384879600241' AS ExpressNo,'yuantong' AS ExpressCompanyCode,'youemial@xx.com' AS Receiver

六、踩坑总结

   
1.在Mysoft.Task项目TaskSet文件夹下添加继承IJob接口的任务类,可以参照现有的IpProxyJob
 

![](https://upload-images.jianshu.io/upload_images/1750086-0e3258c7bc47736d.png)

image.png

更多使用说明可以参考MyDocument项目下的 使用说明.docx 文档

  1. 生成站点(sites)Model,这两步骤第一篇有介绍,这里就直接操作了

回到顶部

感谢您的阅读,如果您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客,我是焰尾迭

python manage.py makemigrations
python manage.py migrate

 
 动态修改Job:
每个5分钟会读取配置文件TaskConfig.xml看是否有新增,修改,删除的任务,然后动态调整当前运行的任务。无需重启Windows就可以实现任务的添加。

  2.选择TaskManger.exe-》安装-》运行

四、创建数据库模型

  1.右键以管理员方式运行Windows安装卸载工具

二、数据库配置

     
本篇要介绍的内容到此结束了,下面写点我的期待!希望有喜欢的朋友一起来完善TaskManager(完全开源的),使之成为一款能够提高生活便捷性的工具,添加很多新任务。比如:第二天要下雨或者下雪,发个邮件提醒,带上雨伞…。好了到了放出源代码的时间了。敬请期待下一篇!

  1. 运行一下项目,打开管理界面,查看效果,然后你就看随意添加Article内容啦
    http://127.0.0.1:8000/admin

    图片 15

    image.png

* ExpressCompanyCode*:快递公司Code 
该值可从p_ExpressCompany表里面进行查询

三、数据库后台搭建

    添加一个新任务步骤如下

  1. INSTALLED_APPS
    这个参数是安装myBlog这个项目中所有用到的Application,当然我们创建的sites也是一个Application,所有也加进去,下面这几个都是系统自带的框架,默认安装

    • django.contrib.admin —— 管理站点
    • django.contrib.auth —— 认证系统
    • django.contrib.contenttypes —— 用于内容类型的框架
    • django.contrib.sessions —— 会话框架
    • django.contrib.messages —— 消息框架
    • django.contrib.staticfiles —— 管理静态文件框架

    图片 16

    INSTALLED_APPS

  2. 添加完sites到INSTALLED_APPS后需要执行下面终端命令,
    migrate会查看INSTALLED_APPS的设置,并根据myBlog/settings.py文件中的数据库设置创建任何必要的数据库表

2.插入快递单模拟数据

图片 17

如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】;)按钮。
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【关注我】;)。

python manage.py makemigrations
python manage.py migrate

图片 18

 
 消息通知:
消息通知相关表p_Message(待发送消息表),p_MessageHistory(已发送或者发送失败消息表)

回到顶部

 
 快递进度:这对热衷于网购的朋友来说是一大福音,当然对我来说也是如此。经常网购的朋友最大的困扰可能就是我的快递到哪儿啦,时不时打开客户端查一下快递进度,要是有快递进度改变能够发短信或者邮件提醒的功能就好了,我就再也不用着急查快递到哪儿了。来看一下邮件提醒效果,有没有很激动,很想使用这个开源TaskManager平台啦!

 
 介绍完了功能和实现原理,现在介绍怎么使用TaskManager。由于是使用Windows服务做为承载器,那么我们只需要知道怎么安装Windows服务,也就能使用该平台了。这里考虑到很多人不知道怎么安装卸载Windows服务,所以提供了我之前写的一个小工具Windows服务安装卸载。源代码也一起放在了TaskManager里面。

 
使用者可以拿从SVN下载代码MyDocument项目下的任务系统”SQL合并脚本_20150911.sql”执行创建相关表和初始数据

  Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz
API的.NET移植,它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。下载地址:Quart.Net

回到顶部

图片 19

   图片 20

回到顶部

当然在使用系统时你需要进行相关配置,下面讲一下配置过程。系统的配置文件路径Config\Config.xml图片 21

   
举个实际例子:现在需要实现一款快递进度查询的应用,我们肯定是没有各个快递厂商的数据库的,只能利用厂商提供的API接口来获取数据。好在现在有很多现成的接口集成了各厂商,基于这些基础。现在客户提了一个需求,在快递单进度发生改变时,给我发邮件或者短信提醒。我想很多网上购物的朋友都有这种需求吧,买了一款东西,时不时的查一下进度,期待早点到。那么这个提醒功能就很迫切了,我也是基于自己的这个需求来做的TaskManager开源项目。

  
关于如何下载下面SVN代码,我这里稍微介绍一下。这个地址不是在浏览器里面打开的(如果想在浏览器里面预览可以访问:),请使用SVN客户端工具TortoiseSVN->SVN
Checkout->输入下面的地址进行下载。

     
TaskManagerSVN地址: 
 使用svn checkout指令进行下载。

因为,我的写作热情也离不开您的肯定支持。

 运行成功以后可以在系统管理-》服务 里面找到“定时任务管服务”

   
 最重要的部分运行频率CronExpressionString需要怎么写?这里也替大家考虑到了,可以使用在线Cron生成器来生成,地址,也可以使用源代码里面提供的Cron自己部署站点使用。

 目前使用快递任务需要自己手工插入快递单号信息

 

  修改节点SqlConnect节点的值为你自己的数据库连接

 图片 22

 

 图片 23

   开发模式:

相关文章