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月 162013
 

安装MySQL

sudo apt-get install mysql-server

这个应该很简单了,而且我觉得大家在安装方面也没什么太大问题,所以也就不多说了,下面我们来讲讲配置。

配置MySQL

注意,在Ubuntu下MySQL缺省是只允许本地访问的,如果你要其他机器也能够访问的话,那么需要改变/etc/mysql/my.cnf配置文件了!下面我们一步步地来:

默认的MySQL安装之后根用户是没有密码的,所以首先用根用户进入:

$mysql -u root

在这里之所以用-u root是因为我现在是一般用户(firehare),如果不加-u root的话,mysql会以为是firehare在登录。注意,我在这里没有进入根用户模式,因为没必要。一般来说,对mysql中的数据库进行操作,根本没必要进入根用户模式,只有在设置时才有这种可能。

进入mysql之后,最要紧的就是要设置Mysql中的root用户密码了,否则,Mysql服务无安全可言了。

mysql> GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY “123456”;

注意,我这儿用的是123456做为root用户的密码,但是该密码是不安全的,请大家最好使用大小写字母与数字混合的密码,且不少于8位。

这样的话,就设置好了MySQL中的root用户密码了,然后就用root用户建立你所需要的数据库。我这里就以xoops为例:

mysql>CREATE DATABASE xoops;

mysql>GRANT ALL PRIVILEGES ON xoops.* TO xoops_root@localhost IDENTIFIED BY “654321”;

这样就建立了一个xoops_roots的用户,它对数据库xoops有着全部权限。以后就用xoops_root来对xoops数据库进行管理,而无需要再用root用户了,而该用户的权限也只被限定在xoops数据库中。

如果你想进行远程访问或控制,那么你要做两件事:

其一:

mysql>GRANT ALL PRIVILEGES ON xoops.* TO xoops_root@”%” IDENTIFIED BY “654321”;

允许xoops_root用户可以从任意机器上登入MySQL。

其二:

$sudo gedit /etc/mysql/my.cnf

老的版本中

>skip-networking => # skip-networking

新的版本中

>bind-address=127.0.0.1 => bind-address= 你机器的IP

这样就可以允许其他机器访问MySQL了。

 Posted by at 下午 1:42
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