VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • Django常见出错解决方案汇总(2)

我把 [登录注册] url后面也写成 = 而并非+= ,这就造成了url覆盖,所以就加载不了静态文件,同时首页也会打不开。

 

三、编码错误

错误类型如下:

1
2
DjangoUnicodeDecodeError at /admin/books/book/
'ascii' codec can't decode byte 0xe8 in position 0: ordinal not in range(128). You passed in()

解决方案:

 

混淆了 python2 里边的 str 和 unicode 数据类型。

 

(0)、你需要的是让编码用实际编码而不是 ascii

 

(1)、对需要 str->unicode 的代码,可以在前边写上

1
2
3
import sys
reload(sys)
sys.setdefaultencoding('utf8')

把 str 编码由 ascii 改为 utf8 (或 gb18030)

 

(2)、python3 区分了 unicode str 和 byte arrary,并且默认编码不再是 ascii

 

参考:http://vososo.com/vo/558

 

四、其他错误

Django POST请求错误forbidden(403) CSRF verification failed. Request aborted

 

在 settings.py 中的MIDDLEWARE_CLASSES 设置下 添加

'django.middleware.csrf.CsrfResponseMiddleware',

重新 runserver.   OK

重点参考:http://blog.csdn.net/feng88724/article/details/7221449

 

我用的是django1.2.3,当使用session时,也会像上面出错,这时把下面注释掉即可:

 

# 'django.middleware.csrf.CsrfViewMiddleware', #这段代码理应注释掉,在使用session的时候

login:login() takes exactly 1 argument (2 given)

 

这在登录视图函数的时候特别常见,原因就是函数login与login模块的名字冲突,如登录url这样写:

1
(r'^account/login/$''login'),  #登录

 那么,对应的视图函数如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def login(request):
    if request.method == "POST":
        try:
            username = request.POST.get('username')
            password = request.POST.get('password')
            user = authenticate(username=username,password=password)
            if user is not None:
                if user.is_active:
                    login(request,user)
                    return HttpResponse('ok')
                else:
                    return HttpResponse('error')
        except Exception,e:
            log.error("login:%s" % str(e))
    return render_to_response('account/login.html')

相关教程