djcelery redis做后台报错

 

报错内容:

 

pip list redis

>redis (3.2.0)

安装:pip install redis==2.10.6

后解决。

admin后台参数格式:

The arguments and keyword arguments must use double quotes.

So if you are specifying arguments, it should be like:

If you are specifying keyword arguments, it should be like this:

如何在django里上传csv文件并进行入库处理

运维平台导入数据这一功能实在是太重要了,我敢说在没有建自己的cmdb平台前,大多数公司管理服务器信息肯定是表格,用表格最麻烦的就是有点更新就得每个人发一份,这样大家信息才能统一,很不方便,终于有一天受不了了,搞了一个服务器信息管理平台,那面临的第一个问题不是说功能好或不不好,而是怎么才能把表里的数据导入到数据库中,所以你说重要不重要,当然如果你就喜欢自己手工录入(找虐的感觉),这个咱也不能说啥,各有所好嘛,那具体如何录的最快,这个不在我们今天的讨论范围,我只讨论如何自动导入。

提到导入,那一般有二个方法,一个是在前端上传完后存储在服务器上的某个目录里,然后读取文件进行分析处理。

另一种是上传文件后直接读取文件内容而不存储在服务器上,这二种方法都可以实现我们得目的,这篇主要是讨论的后面这种。

上传文件,首先我们建一个html文件,内容代码如下:

 

这些都是基本的Html,只要主要enctype=”multipart/form-data”这个参数就可以,其它无特别说明。

展示如图:

how-to-upload-and-process-the-csv

加入路由,

那接下来就是处理上传的文件并入库了,这个代码在views.py文件里,代码如下:

 

代码解释:

最开始判断如果是get请求直接渲染upload_csv.html文件,如果是post请求那么进行分析处理,首先是检查文件名是否是以csv结尾的,如果是就处理,不是就提示错误信息,再就是检查下上传文件的大小,其实这些检查也还好,如果是自己整理的表导入基本也不用做这些检查了,如果是有多人操作这些检查就有必要了,然后开始循环迭代文件行,内容是以逗号分隔,这里假设就是4列,如果你的表格列很多可以做修改,最后保存入库,如果有错误就记录错误信息到日志文件中。

至此我们需要的功能就完成了,虽然简单但非常实用。

Django ORM if you already know SQL

If you are migrating to Django from another MVC framework, chances are you already know SQL.

In this post, I will be illustrating how to use Django ORM by drawing analogies to equivalent SQL statements. Connecting a new topic to your existing knowledge will help you learn to use the ORM faster.

Let us consider a simple base model for a person with attributes name, age, and gender.

t7fs6oc

To implement the above entity, we would model it as a table in SQL.

The same table is modeled in Django as a class which inherits from the base Model class. The ORM creates the equivalent table under the hood.

 

The most used data types are:

SQL Django
INT IntegerField()
VARCHAR(n) CharField(max_length=n)
TEXT TextField()
FLOAT(n) FloatField()
DATE DateField()
TIME TimeField()
DATETIME DateTimeField()

The various queries we can use are:

SELECT Statement

Fetch all rows
SQL:

Django:

Fetch specific columns
SQL:

Django:

etch distinct rows
SQL:

Django:

Fetch specific number of rows
SQL:

Django:

LIMIT AND OFFSET keywords
SQL:

Django:

 

WHERE Clause

Filter by single column
SQL:

Django:

Filter by comparison operators
SQL:

Django:

BETWEEN Clause
SQL:

Django:

LIKE operator
SQL:

Django:

IN operator
SQL:

Django:

 

ANDOR and NOT Operators

SQL:

Django:

SQL:

Django:

SQL:

Django:

 

https://amitness.com/2018/10/django-orm-for-sql-users/

 

 

 

 

 

让我们来做个django小项目之二

上篇内容我们算是来了一个开场,创建了我们的项目,最后把数据库也建立完成了,这篇我们主要完成后台数据入库的部分,根据我们之前的思路,如果已经能实时获得每个站点性能信息了,如果能将每次获得信息插入到数据库中,这个就完成了我们的入库部分,这里说一下我们的数据库操作部分,要操作数据库,首先我们要跟数据库建立连接,然后进行常规的CRUD操作,操作完毕后再关闭数据库连接,这是一个基本流程,所以为了提高数据库的操作速度,我们可以把一些常用的操作封装成一个类,以下是我门数据库操作的类代码:

在这个类中我们先定义了__init__方法,指定了数据库连接,用户,端口,用户等信息,接下来是定义了三个方法,分别是建立数据库连接,获取数据内容、更新数据库及最后关闭数据库连接,正题逻辑就是这样,代码没特别的内容。

有了这个数据库类后,我们就可以用上我们之前的pycurl模块去获取每个站点的数据了,每次获取的数据插入到数据库中,因为可能非常多的站点,所以我们要考虑运行效率,所以我们这里使用并发去检查站点数据,采用ThreadPool线程池去实现,全部代码如下:

以上就是我们全部的代码内容,pycurl部分我们不在多解释,不理解的小伙伴可以参考之前的文章,Dummy就是多进程模块的克隆文件,唯一不同的是,多进程模块使用的是进程,而dummy则使用线程,pool.map类似python的map函数,需要二个参数第一个参数是一个函数名,第二个参数是个迭代对象,在这里迭代对象我们是从数据库中直接获取的,至于数据库的数据从哪里来的呢?当然是用户输入的,那下篇我们实现下前端输入页面,让用户自己可以增加要监控的站点,这篇就到这里,喜欢的小伙伴请帮忙转发哟。

 

 

 

站点性能监控demo

上篇我们简单介绍了pycurl的基本使用,在组后我们留了几个问题需要去解决,因为最终我们要实现的是一个页面版的展示所有站点性能的demo, 那这篇就是正式开始我们这个小项目,废话不多说,首先我们创建我们的项目,在命令行模式下输入:

然后进入web_monitor目录中,创建一个app.

创建完成 后我们的目录结构是这样的:

因为数据要需要入库的,所以第一步先设计我们的表结构,也就是我们的Model文件, 进入到sitemonitor目录下,打开models.py文件,写入:

这个文件我们定义了表结构和字段,按上篇我们获取的内容,我们存储的内容有http_code, dns_time,connect_time, pretransfer_time, starttransfter_time,total_time, speed_downlaod字段,url,port,phone这三个字段是为用户输入表单时准备的,这三个后续会用到的时候再说,这里只需要注意因为获取的数字很多都是小数,所以像dns_time我们使用了models.DecimalField字段类型,这个字段类型有2个参数:

max_digits:数字允许的最大位数

decimal_places:小数的最大位数

其它字段类型解释如下:

models.CharField:字符串字段 ,max_length是必须的参数。

models.SmallIntegerField :   数据库中的字段有:tinyint、smallint、int、bigint.   类似 IntegerField, 不过只允许某个取值范围内的整数。(依赖数据库)

然后保存退出,打开site_monitor/settings.py文件,修改如下行:

加入的行我已加注释,不多解释,接下来我们创建数据库表,运行:

接着运行:

这时候我们的库表结果就建立完成了,那这样前期准备工作就全部完成了,下一篇我们开始写后台实现数据实时插入库。