12月 172013
 

Python Django 在配置完Admin管理界面后,用super admin登录管理界面显示:”You don’t have permission to edit anything”
查文档发现:Above we used admin.autodiscover() to automatically load theINSTALLED_APPS admin.py modules.
很明显Django 用admin.autodiscover()来自动载入INSTALLED_APPS admin.py 模块。
找到urls.py,将 admin.autodiscover()的注释去掉后权限正常了。
NameError: name ‘admin’ is not defined 解决问题的方法:
步骤:

1、修改settings.py。在INSTALLED_APPS设置中添加“django.contrib.admin”。
2、运行python manage.py syncdb更新数据库
3、修改urls.py。改为:
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
# Uncomment this for admin:
(r’^admin/’, include(‘django.contrib.admin.urls’)),
去掉注释。
在运行时,遇到这种问题:注意空格的问题

安装 Django 1.3

使用命令提示符进入 Django-1.3 目录,输入以下命令来完成

tar xzvf Django-1.5.4.tar.gz
sudo python setup.py install

python setup.py install
安装完成后,打开 Python Shell(IDLE (Python GUI)),Python Shell 交互以“>>>”开始,使用下边的命令来查看 Django 1.3 安装是否成功:
>>> import django
>>> print django.get_version()
1.3
接下来,我们创建一个 Python 项目,我在 E 盘创建一个名为”PythonProject”的项目,使用下边的命令:
django-admin.py startproject PythonProject
如果没有配置环境变量的话,可能会遇到“’django-admin’ 不是内部或外部命令,也不是可运行的程序或批处理文件”这样的错误,django-admin.py文件在 D:\Python\Scripts 目录下(我将 Python 安装在了D:\Python,请注意),添加”D:\Python\Scripts”即可,设置环境变量的方法上边内容已经提到了。
此时我们的 E:\PythonProject 下应该出现4个 .py 的文件了,以后我们会进行相应的配置:
_init__.py: 一个空文件,用来告诉Python这个目录是一个Python包
manage.py: 一个命令行工具,可以让你以多种方式与Django项目交互。
settings.py: 有关Django项目的配置
urls.py: Django项目的URL配置。
接下来,验证下我们的项目是否正常,进到 PythonProject 目录下(怎么进入相信你已经会了),输入下边命令:
python manage.py runserver

在浏览器中输入 127.0.0.1:8000 后,出现了我们第一个基于 Django 框架的 Python 的项目,如下:

 

 Posted by at 上午 9:41
12月 142013
 

sudo apt-get install python-mysqldb

测试

import MySQLdb #注意大小写

MySQLdb在Python中也就相当于JAVA中的MySQL的JDBC Driver,Python也有类似的数据接口规范Python DB API,MySQLdb就是Mysql的实现。操作也比较简单和其它平台或语言操作数据库一样,就是建立和数据库系统的连接,然后给数据库输入SQL,再从数据库获取结果。

先写一个最简单的,创建一个数据库:

#!/usr/bin/env python
#coding=utf-8
###################################
# @author migle
# @date 2010-01-17
##################################
#MySQLdb 示例
#
##################################
import MySQLdb

#建立和数据库系统的连接
conn = MySQLdb.connect(host=’localhost’, user=’root’,passwd=’longforfreedom’)

#获取操作游标
cursor = conn.cursor()
#执行SQL,创建一个数据库.
cursor.execute(“””create database python “””)

#关闭连接,释放资源
cursor.close();

创建数据库,创建表,插入数据,插入多条数据

 

#!/usr/bin/env python
#coding=utf-8
###################################
# @author migle
# @date 2010-01-17
##################################
#MySQLdb 示例
#
##################################
import MySQLdb

#建立和数据库系统的连接
conn = MySQLdb.connect(host=’localhost’, user=’root’,passwd=’longforfreedom’)

#获取操作游标
cursor = conn.cursor()
#执行SQL,创建一个数据库.
cursor.execute(“””create database if not exists python”””)

#选择数据库
conn.select_db(‘python’);
#执行SQL,创建一个数据表.
cursor.execute(“””create table test(id int, info varchar(100)) “””)

value = [1,”inserted ?”];

#插入一条记录
cursor.execute(“insert into test values(%s,%s)”,value);

values=[]
#生成插入参数值
for i in range(20):
values.append((i,’Hello mysqldb, I am recoder ‘ + str(i)))
#插入多条记录

cursor.executemany(“””insert into test values(%s,%s) “””,values);

#关闭连接,释放资源
cursor.close();

查询和插入的流程差不多,只是多了一个得到查询结果的步骤

#!/usr/bin/env python
#coding=utf-8
######################################
#
# @author migle
# @date 2010-01-17
#
######################################
#
# MySQLdb 查询
#
#######################################

import MySQLdb

conn = MySQLdb.connect(host=’localhost’, user=’root’, passwd=’longforfreedom’,db=’python’)

cursor = conn.cursor()

count = cursor.execute(‘select * from test’)

print ‘总共有 %s 条记录’,count

#获取一条记录,每条记录做为一个元组返回
print “只获取一条记录:”
result = cursor.fetchone();
print result
#print ‘ID: %s info: %s’ % (result[0],result[1])
print ‘ID: %s info: %s’ % result

#获取5条记录,注意由于之前执行有了fetchone(),所以游标已经指到第二条记录了,也就是从第二条开始的所有记录
print “只获取5条记录:”
results = cursor.fetchmany(5)
for r in results:
print r

print “获取所有结果:”
#重置游标位置,0,为偏移量,mode=absolute | relative,默认为relative,
cursor.scroll(0,mode=’absolute’)
#获取所有结果
results = cursor.fetchall()
for r in results:
print r
conn.close()

查询后中文会正确显示,但在数据库中却是乱码的。经过我从网上查找,发现用一个属性有可搞定:

在Python代码

conn = MySQLdb.Connect(host=’localhost’, user=’root’, passwd=’root’, db=’python’) 中加一个属性:
改为:
conn = MySQLdb.Connect(host=’localhost’, user=’root’, passwd=’root’, db=’python’,charset=’utf8′)
charset是要跟你数据库的编码一样,如果是数据库是gb2312 ,则写charset=’gb2312’。

 

下面贴一下常用的函数:

然后,这个连接对象也提供了对事务操作的支持,标准的方法
commit() 提交
rollback() 回滚

cursor用来执行命令的方法:
callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self):移动到下一个结果集

cursor用来接收返回值的方法:
fetchall(self):接收全部的返回结果行.
fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self):返回一条结果行.
scroll(self, value, mode=’relative’):移动指针到某一行.如果mode=’relative’,则表示从当前所在行移动value条,如果 mode=’absolute’,则表示从结果集的第一行移动value条.

 

 

 Posted by at 下午 5:32
12月 132013
 

使用步骤:
1、终端运行crontab -e [解释:编辑配置文件]
2、选择你要用的编辑器,一般人会选择vi。
3、此时配置文件已打开,只需要按照他的格式写配置即可。

#coding:utf-8
print 'hello world by crontab!'
想要这个脚本在每天的早上7点30执行。
因此这个 任务的crontab配置文件就是:
# m h  dom mon dow   command
30 7 * * * python /home/the5fire/testcrontab.py >> /home/the5fire/testcrontab.log 2>&1
这个配置的意思就是在每天的7:30用python运行我的家目录下的testcrontab.py文件,并将输出内容输出到testcrontab.log中,后面那个2>&1的意思是把错误的输出也输出到标准输出(2表示错误,2>表示错误输出,&表示等同于,1表示正确),因此如果运行出错也会把错误输出到之前定义的log中。
上面只是定时几点执行,那么比如每分钟执行依次,对应的配置就是:
# m h  dom mon dow   command
*/1 * * * * python /home/the5fire/testcrontab.py >> /home/the5fire/testcrontab.log 2>&1
想在每天的早上六点到八点之间,每隔3分钟执行一次的配置:
# m h  dom mon dow   command
*/3 6-8 * * * python /home/the5fire/testcrontab.py >> /home/the5fire/testcrontab.log 2>&1
五个星号表示不同的执行单位(分、时、日、月、年),而那个反斜线表示频率。

 Posted by at 下午 2:08
11月 202013
 

python很好用,尤其是用过easy_install的朋友更是觉得它的便捷,
卸载命令也很简单 easy_install -m package-name
但是面对源码安装的怎么办呢?

 

setup.py 帮助你纪录安装细节方便你卸载
python setup.py install –record log
这时所有的安装细节都写到 log 里了
想要卸载的时候
cat log | xagrs rm -rf
就可以干净卸载了

Python模块的安装方法:

1. 单文件模块:直接把文件拷贝到$python_dir/lib

2. 多文件模块,带setup.py:python setup.py install

3. egg文件,类似Java的jar:
1) 下载ez_setup.py,运行python ez_setup
2) easy_install *.egg

虽然Python的模块可以拷贝安装,但是一般情况下推荐制作一个安装包,即写一个setup.py文件来安装。

setup.py文件的使用:
% python setup.py build #编译
% python setup.py install    #安装
% python setup.py sdist     #制作分发包
% python setup.py bdist_wininst #制作windows下的分发包
% python setup.py bdist_rpm

setup.py文件的编写:
setup.py中主要执行一个 setup函数,该函数中大部分是描述性东西,最主要的是packages参数,列出所有的package,可以用自带的find_packages来动态获取package。所以setup.py文件的编写实际是很简单的。

简单的例子:

setup.py文件:
from setuptools import setup, find_packages
setup(
name=”mytest”,
version=”0.10″,
description=”My test module”,
author=”Robin Hood”,
url=”http://www.csdn.net”,
license=”LGPL”,
packages= find_packages(),
scripts=[“scripts/test.py”],
)

mytest.py文件:
import sys
def get():
return sys.path

scripts/test.py文件:
import os
print os.environ.keys()

setup中的scripts表示将该文件放到 Python的Scripts目录下,可以直接用。OK,简单的安装成功,可以运行所列举的命令生成安装包,或者安装该python包。

 Posted by at 上午 12:14