1.刚学python时就遇到字符编码的问题 把# coding= utf-8 加上也不正确,后来发现需要把这句加在程序的第一行方可。
2.用Django时出现的
Models.py如下
#coding=utf-8
From django.db import models
# Create your models here
Class Address(models.Model):
Name = models.CharField('姓名',maxlength=6,unique=True)
Gender=models.CharField('性别',choices(('M','男'),('F','女')),
MaxLenght=1,radio_admin=True)
Telephone=models.CharField('电话',maxlength=20)
Mobile=models.CharField('手机',maxlength=11)
Def_str_(self):
Return self.name
Class Admin:pass
然后为address应用增加自已的urls.py 代码如下
From django.conf.urls.defaults import *
From newtest.address.models import Address
Info_dict={
# 'model':Address.objects.all(),
'queryset':Address.objects.all(),
}
Urlpatterns=patterns('',
(r'^/?$','django.views.generic.list_detail.object_list',info_dict),
)
然后创建templates/address/address_list.html 如下
<h1>通讯录</h1>
<hr>
<table border="1">
<tr>
<th>姓名</th>
<th>性别</th>
<th>电话</th>
<th>手机</th>
</tr>
{%
For person in object_list
%}
<tr>
<td>{{person.name}}</td>
<td>{{person.gender}}</td>
<td>{{person.telphone}}</td>
<td>{{person.mobile}}</td>
<% endfor %>
</table>
就是修改 urls.py的时候有点不太明白,不知道为什么会这样匹配?
From django.conf.urls.defaults import *
Urlpatterns=patterns('',
# Example:
# (r'^testit/', include('newtest.apps.foo.urls.foo')),
.......
(r'^wiki/(?P<pagename>\w+)/$','newtest.wiki.views.index'), (r'^wiki/(?P<pagename>\w+)/edit/$','newtest.wiki.views.edit'), (r'^wiki/(?P<pagename>\w+)/save/$', 'newtest.wiki.views.save'),
)
(r'^address/',include(newtest.address.url)),
Tom:
从情况来看,初学开发python的时候,有几个地方容易搞混:
1、 绝对路径和相对路径:特别是相对路径应该如何构造或解读。
2、 匹配(Pattern):匹配是python中非常重要的一个过程。不搞清楚匹配和路径之间的关系,就搞不清楚url、字符串在python中是如何处理的。
3、 方法间的差别:python中有很多的方法。这些方法都有各自的特性和差别。这个要分类收集和列出
3.用django+python不知道该如何显示一个静态的内容。如静态图片和一个静态的html
我在网上查的方法是用render_to_response
如:def staticView(request):
Return render_to_response("static.html") 但此方法我没有成功,一运行静态的内容还是显示不出来
Tom:
这个就是没搞清楚路径带来的问题。
4.如果不用搭建的eclipse开发环境来开发程序 那么开发环境应该用什么最好?
Tom:
Django本身就是开发环境。实际上,在linux下开发,最好的环境就是vi+命令行环境(即bsh或sh)。要成为好的开发人员,舍此别无它途。其他任何集成环境或IDE环境,都会在成长过程中在带来帮助的同时,造成困扰。
比如,会屏蔽掉一些容易犯错的内容,但现网实际运行环境中,往往并不允许安装开发环境,这种时候的调试和检查,都必须回到vi+bsh,然后通过对log和屏幕输出信息的检查,来处理问题。
5.Python是怎么运行的?网上查的资料这样写的
Python运行,是从文件的上面往下走的,看到命令执行命令,一直至最后一行,当我们定义函数和类的时候,他们只是定义,而没有执行,所以python看到他们,先存起来,直到看到定义外的具体命令,才真正的执行。如果这个命令调用上面的函数,那么就把存起来的函数执行一下。(其中提到的先将内容存起来 是存在哪里的?它的内部是怎样处理的我弄不明白)
Tom:
Python是解释型语言(另外说一句,在很多时候,解释型语言,又被称为脚本语言),与java相同,不同于c语言这种编译型语言(至于什么是编译型语言、什么是解释型语言,就请自行google了)。
所有的计算机语言,都会在读到函数定义或变量定义的时候,把这些内容放入到缓冲区中,这个缓冲区,可以理解为就是内存。然后对于解释型语言来说,会再继续读到(扫描到)执行命令时,根据执行命令中使用到的定义内容,从缓冲区中将定义匹配出来并执行。
为了更方便的理解,可以这么来记住:脚本语言(解释型语言)都是顺序执行的。一行行的执行下去,当遇到变量引用的时候,就去缓冲区中按定义把该变量替换成实际值,然后执行(当然,如果此时变量没有定义或有错,就直接报错了)。函数执行过程也是一样的,到了调用的时候,就转过去执行,同样也是一行行的,有错就跳出了。
BTW:
关于脚本语言的调试:
就是在出错的地方,先把当前涉及到所有变量都把实际值输出(打印出来),然后把当前这行命令中的变量或参数用实际值替换掉(简称为手动命令行)。然后到python的命令行执行模式下,执行手动命令行,来查找问题所在。
6.文件夹file中有一个new.txt, new.zip 想从file中读取文件,应该怎么判断取到的文件是zip还txt?我是用os.listdir(dir)得到文件目录的,我想应该要先得到"."后缀然后再进行判断到底是.txt还是.zip?这个应该怎么获取呢?
Tom:
我不是太了解Os.listdir(dir)产生的输出是什么。
但所有的语言都提供对文件操作的一些接口函数:
1、 文件全名(就是包含文件名和文件后缀名在内的一个字符串):在有了文件全名之后,就可以自己写代码把这个字符串做处理。此时,扫描后缀名的方法就是从右至左,扫描到字符"."即认为发现该文件的后缀名了。然后把截取出来的后缀名跟所需要判断的字符串做比较即可。在你这里就是”.gz”或”.zip”等
2、 文件路径:包括相对路径和绝对路径。这里的操作就不展开了
7.还有一个问题就是在用tomcat调用cgi脚本的时候,页面前端显示的是乱码不知是什么原因?配置tomcat服务器是将web.xml中可运行cgi部分的代码注释去掉的 还有路径的映射也是去掉了的。并修改了context.xml中的<Context privileged="true">
Tom:
Tomcat根据我查看的资料,是可以配置出对cgi的支持的。但我手中暂时没有合适的环境,而且这个内容不是实际的工作环境,就不答复了。
只是从情况看,这个应该是你的配置文件有错造成的。
等有空的时候再来看好了。
8.这个是关于由python编写的cgi程序调用.os动态库(由c语言编写)的问题。
August:
首先python是编写的cgi程序,将其放在aphache服务器cgi-bin目录下,本次cgi没有调用.so动态库去处理数据,访问可以成功执行,并且能够传值-计算-返回客户端;
其次python调用c语言的动态链接库.so,在linux环境中可以执行,正常;
然后问题出现了:当我们由python写的cgi程序调用.so后,虽然在服务器上可以执行,但是却不能访问了!意思是此的cgi不能正常运行了!一直报错
前后折腾了很多时间,更改路径,更改权限,重新编写cgi,重新编写.so无论怎么尝试问题都不能解决!!!为此还周末来加了个班,还是没有解决到。
周一上班的时候,灵机一动,何不把CFUNCTYPE(c_int)(lambda: None)删除了试试!结果运行成功!汗!然后到网上去查,又是看ctypes前面的注释。好像是作者也不知道最后这句是做什么用的,我的个天,不晓得我是不是看错了……
这个错误,虽然是解决了,但是自己还是不太明白其原理究竟是怎么回事,故记录下来,后来同学可以警戒,有知道答案还请补充!!!
9.修改权限的问题
Daisy:
用chown -R apache:apache /var/www/cgi-bin 修改组属
用chmod -R 777 /var/www/cgi-bin 给权限
10.重新启动apache服务器
Daisy:
/etc/init.d/httpd restart:
11.今天运行.py程序时出现了如下图所示的错,
Daisy:
在网上查了一些相关资料 说需要修改httpd.conf文件,然后我按照网上说的将其修改为
但还是出现此问题,后来突然发现是在地址栏写访问地址时少写了目录
http:192.168.1.212/tadd.py 正确的是:http:192.168.1.212/cgi-bin/tadd.py 把此问题写下来提醒自已以后仔细一点。
12.模板文件的路径问题
Daisy:
模板文件的路径可以放在子目录中调用 如t=get_template('dateapp/add.html')
13.关于Django的{{block.super}}
Daisy:
Django模板中{{block.super}}这个标签非常有用,可以做到不仅是覆盖父模板,而是在父模板基础上追加内容,当然也可以覆盖。
14.设置settigns.py中的配置文件
Daisy:
在settings.py中设置TEMPLATE_DIRS,添加路径元素,绝对路径,用/号分隔,末尾不含/号 一般在项目中用templates目录放置模板文件
TEMPLATE_DIRS中允许多个路径,加载模板时会按如下这个顺序搜索模板文件
Import os.path
TEMPLATE_DIRS=(
Os.path.join(os.path.dirname(__file__),'templates').replace('\\','/')
)
15.python中处理静态内容一直出现问题 比如显示一个静.jpg的图片
我的处理方式如下 修改settings.py文件
BASEROOT = os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/')
MEDIA_ROOT = BASEROOT + '/static/'
ADMIN_MEDIA_PREFIX = '/media/'
Html文件访问时<img src="{{MEDIA_URL}}img/djxtestpic.jpg" />显示
页面的结果仍然是一个红色的小叉 不清楚问题出在哪里
16.关于mod_wsgi在linux下的安装,本机是红旗的linux系统,mod_wsgi的安装有以下方法:
(1)、首先是在官方网站上去下载mod_wsgi的源码,然后解压,配置,编译,安装。这条路如果linux系统上的apache装的比较完整的话(包含apx),那么你可以成功。否则,不要尝试了。
首先,在./congfigure的时候,会提示你找不到,apxs之类的东西;然后你去找apxs安装,但是apxs又要通过,httpd-devel才可以安装;然后是httpd-devel又要依赖apr-devel等等各种东西去安装,然后又是。。。
(2)、第二种方法是用rpm安装,rpm -i *.rpm。不过linux下的合适版本的rpm包很难找到。
(3)、最简单的方法是输入命令安装:sudo yum install mod_wsgi。不过我用的红旗,没有注册,没法用这个。
17.Python调用Linux下的动态库:
18.Python下的内存分配问题:
由于本次业务是需要接收由c语言,传递进python的大量字符串数据。所以涉及到对于接收数据的内存分配问题。先前看到,python的字符串变量大小可以自由的扩展;如果是这样的话,问题就会变的容易解决。所以写了段程序,测试如下:
Python代码:
测试结果:
测试成功。
19.Django提交表单的时出现了CSRF verification failed. Request aborted.的问题
Daisy:
在用户用POST方法提交页面信息的时候,有时会遇到这样的错误
在settings.py里面的MIDDLEWARE_CLASSES
中加入'django.middleware.csrf.CsrfResponseMiddleware', 错误就消除了。 此答案在网上查到的,不知道为何要加入这句。
20.用python程序直接获取网页中的值
Daisy:
startTime = request.REQUEST.get('startTime')
request.REQUEST先尝试POST请求,再尝试GET请求,
19 数据库连接问题:
将setting.py中
DATABASES = {
'default': {
'ENGINE': 'mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'pmanage', # Or path to database file if using sqlite3.
'USER': 'root', # Not used with sqlite3.
'PASSWORD': '31107361990', # Not used with sqlite3.
'HOST': 'localhost', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '3306', # Set to empty string for default. Not used with sqlite3.
}
}
改为DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'pmanage', # Or path to database file if using sqlite3.
'USER': 'root', # Not used with sqlite3.
'PASSWORD': '31107361990', # Not used with sqlite3.
'HOST': 'localhost', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '3306', # Set to empty string for default. Not used with sqlite3.
}
}