存档: 作者存档:

django 数据库查询常用符号

没有评论 2012年1月5日

__exact        精确等于 like ‘aaa’
__iexact    精确等于 忽略大小写 ilike ‘aaa’
__contains    包含 like ‘%aaa%’
__icontains    包含 忽略大小写 ilike ‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于icontains。
__gt    大于
__gte    大于等于
__lt    小于
__lte    小于等于
__in     存在于一个list范围内
__startswith   以…开头
__istartswith   以…开头 忽略大小写
__endswith     以…结尾
__iendswith    以…结尾,忽略大小写
__range    在…范围内
__year       日期字段的年份
__month    日期字段的月份
__day        日期字段的日
__isnull=True/False
__isnull=True 与 __exact=None的区别

Django中的常用命令

没有评论 2011年12月6日

django 基本命令操作:
django-admin startproject jay:建立一个jay的项目
django-admin startapp haha 建立一个haha的APP
python manage.py runserver 启动服务器
python manage.py validate 检查模型的有效性
python manage.py sqlall app名称
python manage.py syncdb:同步数据库,这也大大减少了不懂的数据库知识的开发人员的工作量
python manage.py sql <appname>:查看数据库中所存在的表
python manage.py shell:进入SHELL状态

settings.py:设置数据库,环境语言,时区,中间件,安装APP,模板目录,国际化等等

urls.py:配置VIEW和URL的映射

年关最难过

没有评论 2011年12月3日

劳碌的工作终于结束了,可以做些自己想做的事情了。原来去辞职也是一件比较难说出口的事情。可能因为自己在这方面欠缺的太多了。不管怎么说,也不管什么原因吧。总之自己目前身体上是一身轻松了。

接下来就是做家庭主夫,看孩子做饭,业余也得继续我的系统开发大任务。目前我和我妈两个人看孩子。说起来有点人力资源的浪费了。但事情不如此还真无法发展。我一个人看孩子,总是哭个不停。而我妈是按照他那个年代的方法看孩子。在这方面又跟我们起矛盾。实在是难过的很。最后只能是我妈做看孩子的主力,我进行思想指导。现在的孩子咋就这么难看,这么脆弱呢!做饭菜基本就是我的任务了。孩子睡觉了我就可以敲些代码了。这个是自己的梦想,是绝对不能荒费的。

按照以上的方式生活,也是很不错的。可偏偏老婆想买个大点的房子,只是首付就高的吓人,利息也贵的离普。毕竟就老婆一个人上班也是够辛苦的,所以只能尽全力支持。老婆一个人就搞定了大部分首付,当我去搞定一小部分时。却总是出问题,家里是没钱了,指望不上。同事们因为临近过年都比较保守。说了跟没说一样,居然也帮不上忙。真是让人郁闷到极点的事情。现在我经常反思自己,是不是人品的问题。为什么老婆的朋友、领导就都能帮上忙。而我的同事朋友却是心有于而力不足。有的时候真不想过年,当我记事时起,好像就没过过一个安静的年。每一年的年底都是一大堆的烦人事件。真是年关最难过!

看来以后得多结识一些有实力的朋友了。不能在自己的同学圈里转了。眼光得往前看看!

非常经典的网页幻灯片播放源代码

没有评论 2011年9月27日

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml”>

<head>

<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />

<title>网页幻灯片</title>

</head>

<body>

<script>

var widths=400; //设置幻灯片宽度

var heights=200; //设置幻灯片高度

var counts=6; //设置幻灯片数量

//设置图片路径
img1=new Image ();img1.src=’Image/1.jpg’;

img2=new Image ();img2.src=’Image/2.jpg’;

img3=new Image ();img3.src=’Image/3.jpg’;

img4=new Image ();img4.src=’Image/4.jpg’;

img5=new Image ();img5.src=’Image/5.jpg’;

img6=new Image ();img6.src=’Image/6.jpg’;

//设置图片的URL
url1=new Image ();url1.src=’#';

url2=new Image ();url2.src=’#';

url3=new Image ();url3.src=’#';

url4=new Image ();url4.src=’#';

url5=new Image ();url5.src=’#';

url6=new Image ();url6.src=’#';
var nn=1;

var key=0;

function change_img()

{if(key==0){key=1;}

else if(document.all)

{document.getElementById(“pic”).filters[0].Apply();document.getElementById(“pic”).filters[0].Play(duration=2);}

eval(‘document.getElementById(“pic”).src=img’+nn+’.src’);

eval(‘document.getElementById(“url”).href=url’+nn+’.src’);

for (var i=1;i<=counts;i++){document.getElementById(“xxjdjj”+i).className=’axx’;}

document.getElementById(“xxjdjj”+nn).className=’bxx’;

nn++;if(nn>counts){nn=1;}

//设置图片切换间隔时间
tt=setTimeout(‘change_img()’,3000);}

function changeimg(n){nn=n;window.clearInterval(tt);change_img();}

document.write(‘<style>’);

document.write(‘.axx{padding:1px 10px;border-left:#cccccc 1px solid;}’);

document.write(‘a.axx:link,a.axx:visited{text-decoration:none;color:#fff;line-height:12px;font:9px sans-serif;background-color:#666;}’);

document.write(‘a.axx:active,a.axx:hover{text-decoration:none;color:#fff;line-height:12px;font:9px sans-serif;background-color:#999;}’);

document.write(‘.bxx{padding:1px 7px;border-left:#cccccc 1px solid;}’);

document.write(‘a.bxx:link,a.bxx:visited{text-decoration:none;color:#fff;line-height:12px;font:9px sans-serif;background-color:#D34600;}’);

document.write(‘a.bxx:active,a.bxx:hover{text-decoration:none;color:#fff;line-height:12px;font:9px sans-serif;background-color:#D34600;}’);

document.write(‘</style>’);

document.write(‘<div style=”width:’+widths+’px;height:’+heights+’px;overflow:hidden;text-overflow:clip;”>’);

document.write(‘<div><a id=”url”><img id=”pic” style=”border:0px;filter:progid:dximagetransform.microsoft.wipe(gradientsize=1.0,wipestyle=4, motion=forward)” width=’+widths+’ height=’+heights+’ /></a></div>’);

document.write(‘<div style=”filter:alpha(style=1,opacity=10,finishOpacity=80);background: #888888;width:100%-2px;text-align:right;top:-12px;position:relative;margin:1px;height:12px;padding:0px;margin:0px;border:0px;”>’);

for(var i=1;i<counts+1;i++){document.write(‘<a href=”javascript:changeimg(‘+i+’);” id=”xxjdjj’+i+’” target=”_self”>’+i+’</a>’);}

document.write(‘</div></div>’);

change_img();

</script>

</body>

</html>

div+css无缝图片滚动效果

没有评论 2011年9月26日
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>css实现无缝走马灯图片滚动效果</title>
</head>
<body>
<style type="text/css">
<!--
#demo {
background: #FFF;
overflow:hidden;
border: 1px dashed #CCC;
width: 500px;
}
#demo img {
border: 3px solid #F2F2F2;
}
#indemo {
float: left;
width: 800%;
}
#demo1 {
float: left;
}
#demo2 {
float: left;
}
-->
</style>
<div id="demo">
<div id="indemo">
<div id="demo1">
<a href="#"><img src="http://www.diannaojishu.com/images/default/logo.gif" border="0" /></a>
<a href="#"><img src="http://www.diannaojishu.com/images/default/logo.gif" border="0" /></a>
<a href="#"><img src="http://www.diannaojishu.com/images/default/logo.gif" border="0" /></a>
<a href="#"><img src="http://www.diannaojishu.com/images/default/logo.gif" border="0" /></a>
<a href="#"><img src="http://www.diannaojishu.com/images/default/logo.gif" border="0" /></a>
<a href="#"><img src="http://www.diannaojishu.com/images/default/logo.gif" border="0" /></a>
</div>
<div id="demo2"></div>
</div>
</div>
<script>
<!--
var speed=10; //数字越大速度越慢
var tab=document.getElementById("demo");
var tab1=document.getElementById("demo1");
var tab2=document.getElementById("demo2");
tab2.innerHTML=tab1.innerHTML;
function Marquee(){
if(tab2.offsetWidth-tab.scrollLeft<=0)
tab.scrollLeft-=tab1.offsetWidth
else{
tab.scrollLeft++;
}
}
var MyMar=setInterval(Marquee,speed);
tab.onmouseover=function() {clearInterval(MyMar)};
tab.onmouseout=function() {MyMar=setInterval(Marquee,speed)};
-->
</script>
</body>
</html>

vim常用命令

没有评论 2011年9月25日

一、由一般模式转到输入模式的命令
1〉光标移动命令
0 移动到光标所在列的最前面[Home]
$ 移动到光标所在列的最後面[End]
[CTRL][d] 向下半页
[CTRL][f] 向下一页[PageDown]
[CTRL][u] 向上半页
[CTRL][b] 向上一页[PageUp]
H移动到视窗的第一列
M移动到视窗的中间列
L移动到视窗的最后列
G移动到文件最后列
nG直接用数字 n 加上大写 G 移动到第 n 行 (等同于命令“:n”)
fx往右移动到 x 字符上
tx往右移动到 x 字符前
shift +g 跳到文件尾 (等同于G)
gg 跳到文件头
xp 交换两个字符位置
ddp 上下两行调换
[ 移到文件开始位置
] 移到文件结束位置
nk向上移n行
n↑向上移n行
n-向上移n行,光标在该行的起始
ni 向下移n行
n+向下移n行,光标在该行的起始
n↓向下移动n行
w 向前移动一个word
nw 向前移动n个word
→ 向右移动一个字符【l】
← 向左移动一个字符【h】
↑ 向上移动一行【k】
↓ 向下移动一行【j】

2〉删除操作命令
x 删除光标所在的字符【delete】
dw 删除光标所在的单词
d $ 删除光标至行尾的所有字符
/d d 同/d d $
dd 删除当前行
dnd 删除当前n行
dG 删除当前行到最后一行
可在删除命令前加上数字,如<5x表示删除5行。

3〉改变与替换操作命令
r 替换光标所在的字符
/rr 替换字符序列
c $ 替换自光标位置至行尾的所有字符
cl 修改当前字符
cc 修改当前行
c$ 修改到行尾的内容
:%s#abc#123#g 将文中的所有abc都替换为123
ddp 上下两行交换(其实是先dd,然后执行p)

4〉查询命令
/string 往前搜索string【支持正则】
n 查找下一个
?string 往后搜索string
/+上下箭头 搜索历史
:+上下箭头 :命令的历史
* 往前查找当前word,前提是光标移动到要查找的word
# 往后查找当前word,前提是光标移动到要查找的word
/\<word\> 只匹配word,不匹配wordstr等等
% 查找匹配的括号,前提是光标要在一边的括号上
fx 在当前行移动到下一个字符x

5〉拷贝与粘贴命令
yw 将光标所在单词拷入剪贴板
y$ 将光标至行尾的字符拷入剪贴板
Y 同
yy 将当前行拷入剪贴板
yny 将当前n行拷入剪贴板
p 将剪贴板中的内容粘贴在光标后
P 将剪贴板中的内容粘贴在光标前

6〉文件编辑、保存及退出vi命令
:q 不保存退出
:q! 不保存强制性退出
:w 保存编辑
:w filename 存入文件filename中
:w! filename 强制性存入文件filename中
:wq / :x / ZZ 保存退出
:wq! 强制保存然后退出

7〉其他命令
:args 显示当前文件名
u 撤销,相当于Ctrl+z
U 一次撤销一行的所有操作
Ctrl+R 重做
:help 查看所有帮助
:help 0 查看关于0的帮助
ZZ 退出帮助,回到编辑模式
Ctrl+G 知道【文件名 是否修改 当前第一行 前面所占行的百分比】
Ctrl+v 选择一个块
:set number 显示行号
:set nonumber 不显示行号
:set rule 显示光标位置
:set ignorecase 搜索不区分大小写
:set noignorecase 搜索区分大小写
:ab string string 提示(比如:ab abc abcdefg,当输入abc然后输入空格,abc自动变为abcdefg)
:new filename 打开或新建文件,如果不指定文件名或者文件名不存在则是新建文件。
:set ruler 打开光标的行列位置显示功能
:set shiftwidth=4 设置自动缩进格数
:set autoindent 打开自动缩进功能
:set paste 粘贴的时候关闭自动缩进
:set nopaste 粘贴的时候打开自动缩进

三、进入vi的命令
vi filename: 打开或新建文件,并将光标置于第一行首
vi +n filename: 打开文件,并将光标置于第n行首
vi + filename: 打开文件,并将光标置于最后一行首
vi +/pattern filename: 打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename: 在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename.filename: 打开多个文件,依次进行编辑
vi + /word filename:进入vi并且由文件的word这个字开始

注意:Ctrl+S在Linux下是停止显示终端的输出,这个时候屏幕就像定住了一样,终端不会继续输出,也不会响应你的输入,需要按一下 Ctrl-Q 即可恢复输入。

vi/vim 查找替换大全

没有评论 2011年9月24日

vi/vim 中可以使用 :s 命令来替换字符串。以前只会使用一种格式来全文替换,今天发现该命令有很多种写法,记录几种在此,方便以后查询。

:s/vivian/sky/ 替换当前行第一个 vivian 为 sky

:s/vivian/sky/g 替换当前行所有 vivian 为 sky

:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

:n,$s/vivian/sky/gc 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky时都提示是否替换

n 为数字,若 n 为 .,表示从当前行开始到最后一行

:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/

:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/

1.:s/vivian/sky/ 替换当前行第一个 vivian 为 sky

:s/vivian/sky/g 替换当前行所有 vivian 为 sky

2. :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

(n 为数字,若 n 为 .,表示从当前行开始到最后一行)

3. :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

4. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

:s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/

5. 删除文本中的^M

问题描述:对于换行,window下用回车换行(0A0D)来表示,Linux下是回车(0A)来表示。这样,将window上的文件拷到Unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。

· 使用命令:cat filename1 | tr -d “^V^M” > newfile;

· 使用命令:sed -e “s/^V^M//” filename > outputfilename。需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。

· 在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:%s/^V^M//。

· :%s/^M$//g

如果上述方法无用,则正确的解决办法是:

· tr -d “\r” < src >dest

· tr -d “\015″ dest

· strings A>B

6. 其它

利用 :s 命令可以实现字符串的替换。具体的用法包括:

:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1

:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1

:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1

:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1

:g/str1/s//str2/g 功能同上

从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索

字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。

闻道有先后,术业有专攻

没有评论 2011年6月26日

好长时间没有写东西了。我曾经有个伟大的理想,要学通有关网站的所有知识。通过这么长时间的努力,我发现自己的想法错了,不过做法对了。

没人知道什么事情是自己最想做的。所以,与其盲目的选择一条路走到尽头,不如多走几条路。看看那条路更好走,更适合自己走。等找到最适合自己的路后,再一直走下去,也许才是正确的。记得小时候自己总是选择一条路就发誓要走好它,走到巅峰。却总是事与愿违。也许这就是没找对路的原因吧。

要想人生有所成就,就需要有自己的专业特长。只是要找到适合自己的特长才行。这就不是坚持的事情了。只有在人生道路上不断的乱撞,最后碰到一条适合自己的路走下去。也许你就是下一个大师了。

闻道有先后-不管是先还是后,都要多闻,只有道路多了,才有选择的权利。

术业有专攻-不管那个行业,一旦选定了,就要一直走下去。只有朝一个方向,才能走的更远。

Django中使用多线程发送邮件

1条评论 2011年6月25日
1、settings.py 增加Email设置

#mail
EMAIL_HOST = ‘smtp.gmail.com’                   #邮件smtp服务器
EMAIL_PORT = ’25′                                        #端口
EMAIL_HOST_USER = ‘code***@gmail.com’  #邮件账户
EMAIL_HOST_PASSWORD = ‘*********’      #密码
EMAIL_USE_TLS = False
2、views.py 发送邮件


from django.core.mail import EmailMultiAlternatives
from django.template import loader
from settings import EMAIL_HOST_USER
import threading
from_email = EMAIL_HOST_USER
class EmailThread(threading.Thread):
def __init__(self, subject, body, from_email, recipient_list, fail_silently, html):
self.subject = subject
self.body = body
self.recipient_list = recipient_list
self.from_email = from_email
self.fail_silently = fail_silently
self.html = html
threading.Thread.__init__(self)
def run (self):
msg = EmailMultiAlternatives(self.subject, self.body, self.from_email, self.recipient_list)
if self.html:
msg.attach_alternative(self.body,self.html)
msg.send(self.fail_silently)
def send_mail(subject, body, from_email, recipient_list, fail_silently=False, html=None, *args, **kwargs):
EmailThread(subject, body, from_email, recipient_list, fail_silently, html).start()
def test_mail(request):
subject = u'邮件主题'
to_mail_list = ['abc@gmail.com','test@qq.com']
body = loader.render_to_string('mail_template.html',
{'email':email,'date':datetime.today(), }
)
send_mail(subject,body,from_email,to_mail_list,html="text/html")
return "ok"
代码比较简单就不解释了,到这里Django多线程发送Email基本功能已经完成。当然了还需要新建一个模板文件,这里是以mail_template.html命名的。

python字符串使用总结

没有评论 2011年5月7日
1.python字符串通常有单引号(’…’)、双引号(”…”)、三引号(”"”…”"”)或(”’…”’)包围,三引 号包含的字符串可由多行组成,一般可表示大段的叙述性字符串。在使用时基本没有差别,但双引号和三引号(”"”…”"”)中可以包含单引号,三引号 (”’…”’)可以包含双引号,而不需要转义。
2.用(\)对特殊字符转义,如(\)、(’)、(”)。
3.常用字符串函数
1)str.count() //返回该字符串中某个子串出现的次数
2)str.find()   //返回某个子串出现在该字符串的起始位置
3)str.lower() //将该字符串全部转化为小写
4)str.upper() //转为大写
5)str.split() //分割字符串,返回字串串列表,默认以空格分割
6)len(str)     //返回字符串长度
例如:
>>> str = ‘Hello, world’
>>> str.count(‘o’)
>>> 2
>>> str.find(‘lo’)
>>> 3
>>> str.lower()
>>> ‘hello, world’
>>> str.upper()
>>> ‘HELLO, WORLD’
>>> str.split()
>>> ['Hello,', 'world']
>>> str.split(‘,’)
>>> ['Hello', ' world']
>>> len(str)
>>> 13
>>> str
>>> ‘Hello, world’
以上所有操作都不会改变字符串本身!
4.字符串与数字相互转换
import string
string.atoi(str[,base]) //base为可选参数,表示将字符转换成的进制类型
数字转换成字符串可简单了,直接用str()
5.字符与ASCII转换
char->ascii ord()
ascii->char chr()

======================================================================
#Python字符串操作
'''1.复制字符串'''
#strcpy(sStr1,sStr2)
sStr1 = 'strcpy'
sStr2 = sStr1
sStr1 = 'strcpy2'
print sStr2
'''2.连接字符串'''
#strcat(sStr1,sStr2)
sStr1 = 'strcat'
sStr2 = 'append'
sStr1 += sStr2
print sStr1
'''3.查找字符'''
#strchr(sStr1,sStr2)
sStr1 = 'strchr'
sStr2 = 'r'
nPos = sStr1.index(sStr2)
print nPos
'''4.比较字符串'''
#strcmp(sStr1,sStr2)
sStr1 = 'strchr'
sStr2 = 'strch'
print cmp(sStr1,sStr2)
'''5.扫描字符串是否包含指定的字符'''
#strspn(sStr1,sStr2)
sStr1 = '12345678'
sStr2 = '456'
#sStr1 and chars both in sStr1 and sStr2
print len(sStr1 and sStr2)
'''6.字符串长度'''
#strlen(sStr1)
sStr1 = 'strlen'
print len(sStr1)
'''7.将字符串中的小写字符转换为大写字符'''
#strlwr(sStr1)
sStr1 = 'JCstrlwr'
sStr1 = sStr1.upper()
print sStr1
'''8.追加指定长度的字符串'''
#strncat(sStr1,sStr2,n)
sStr1 = '12345'
sStr2 = 'abcdef'
n = 3
sStr1 += sStr2[0:n]
print sStr1
'''9.字符串指定长度比较'''
#strncmp(sStr1,sStr2,n)
sStr1 = '12345'
sStr2 = '123bc'
n = 3
print cmp(sStr1[0:n],sStr2[0:n])
'''10.复制指定长度的字符'''
#strncpy(sStr1,sStr2,n)
sStr1 = ''
sStr2 = '12345'
n = 3
sStr1 = sStr2[0:n]
print sStr1
'''11.字符串比较,不区分大小写'''
#stricmp(sStr1,sStr2)
sStr1 = 'abcefg'
sStr2 = 'ABCEFG'
print cmp(sStr1.upper(),sStr2.upper())
'''12.将字符串前n个字符替换为指定的字符'''
#strnset(sStr1,ch,n)
sStr1 = '12345'
ch = 'r'
n = 3
sStr1 = n * ch + sStr1[3:]
print sStr1
'''13.扫描字符串'''
#strpbrk(sStr1,sStr2)
sStr1 = 'cekjgdklab'
sStr2 = 'gka'
nPos = -1
for c in sStr1:
if c in sStr2:
nPos = sStr1.index(c)
break
print nPos

'''14.翻转字符串'''
#strrev(sStr1)
sStr1 = 'abcdefg'
sStr1 = sStr1[::-1]
print sStr1
'''15.查找字符串'''
#strstr(sStr1,sStr2)
sStr1 = 'abcdefg'
sStr2 = 'cde'
print sStr1.find(sStr2)
'''16.分割字符串'''
#strtok(sStr1,sStr2)
sStr1 = 'ab,cde,fgh,ijk'
sStr2 = ','
sStr1 = sStr1[sStr1.find(sStr2) + 1:]
print sStr1