Python+Django初学者问题集

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.
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值