最近有个需求就是当执行save时需要把数据写入2个数据库,查看文档后发现直接重写save方法比较简单。
首先建立2个测试数据库testa和testb,然后在settings中配置数据库:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'testa',
'USER': 'root',
'PASSWORD': 'asdasd',
'HOST': '192.
最近要和某公司进行系统对接,对方使用C#给出了这样一个加密函数:
public static string MD5ToBase64String(string str)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] temp = System.
一般情况下,python爬虫遇到ajax动态页面一般都是直接分析后模拟ajax请求获得数据。不过今天遇到个网站,由于某些原因不透露网址了,点击搜索按钮后,它先跳转到a页面,然后从a页面跳转到b页面,再由b页面跳回a页面。当完成这2次跳转后,ajax向a页面提交的请求才会返回结果。
也怀疑是不是cookie或者refenen的问题,但最终证实不是因为这个。即便伪造了请求头再访问a页面,返回的也不是真实的结果页面而是一段跳转到b页面的js代码。
既然不知道跳转过程中网站到底干了写什么,那就直接上大杀器吧。
phantomjs可以简单的理解为js解释器,selenium更不用多介绍了,用pip安装即可。 从 http://phantomjs.org/download.html 下载编译后的包(当然你可以自己下源码),解压后的bin目录中就是我们需要的东西。
import sys
reload(sys)
sys.
首先,python中逻辑运算从左到右进行,and运算返回第一个假值,若都为真则返回最后一个真值。or运算返回第一个真值,若都为假则返回最后一个假值。
其次,python中0,(),[],{},None,空字符串都是假。
下面用简单的例子说明一下:
def f():
print "in f"
return False
def t():
print "in t"
return True
def n():
print "in n"
In [105]: r = t() and f() or n()
in t
in f
in n
In [106]: r
In [107]: r = t() and n() or f()
in t
in n
in f
In [108]: r
Out[108]: False
In [111]: r = f() and n() or t()
in f
in t
In [112]: r
Out[112]: True
上面我们定义了3个函数,没返回值的情况下函数会默认返回None。这里有个地方需要注意,虽然函数可以返回true、false、none,但函数本身都是为真的,比如:
某些情况下需要向数据库中插入媒体文件,mysql中插入媒体文件时,数据字段应该是blob。而对于postgresql,则是bytea。这里注意的是打开文件时候应该用"rb wb"这种模式,示例如下:
import psycopg2
#省略部分代码...
def ins_pictures(self, name, position, explain, href, uploaddate, img, show_id):
'''向pictures表中插入数据(显示位置,说明,上传时间,图片的2进制)
'''
strs = r"insert into pictures(p_name,p_position,p_explain,p_href,p_uploaddate,p_show,p_img,show_id) values (%(name)s,%(position)s,%(explain)s,%(href)s,%(uploaddate)s,'0',%(img)s,%(show_id)s)"
self.
今天需要在虚拟环境下使用pycurl,使用pip安装时候没问题,不过再代码中import后则报错:
ImportError: pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (none/other)
解决方法: