首页 > 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' ) |