Django常见问题以及解决方案

1.中文URL:

这个其实是很常识的东西,但是之前做web一直没注意过,在使用HttpResponseRedirect的时候,如果Redirect的URL中带中文的话,会报UnicodeEncodeError错误。

解决的办法是使用urlquote对URL进行编码
from django.utils.http import urlquote
#return的时候在URL前加上urlquote
return HttpResponseRedirect(urlquote("/wiki/%s" % page.pagename)) 

这个URL在ie的地址栏看到的就是一堆%的东西,Firefox等好像看到的是中文

2.django的信号使用无法触发信号里的内容
解决方案:在django 1.7后,使用信号时候需要在应用配置类中的ready() 方法中连接。 

所以我们需要配置先ready() 

需要在项目的app.py,init.py两个文件中写入配置

3.django-admin.py:未找到命令
解决方案:将django的安装路径添加到环境变量中, 
一般的安装路径在python目录下的\Lib\site-packages\Django-1.8-py2.7.egg\django\bin, 
可能有不同,总之在python安装目录下找到django\bin即可。 

添加完环境变量后记得重启命令提示符,否则还是提示错误。

4.当我把 DEBUG = True设为False的时候运行 python manage.py runserver 的时候
报错 : CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False. 

解决方案: 在 setting.py 中添加 ALLOWED_HOSTS = [‘127.0.0.1‘, ‘localhost‘]

5.外部机器无法访问本站点
然后在settings里修改ALLOWED_HOSTS = [], 

改为ALLOWED_HOSTS = [‘*’,]

6.django解决跨域请求的问题
解决方案:添加中间件,安装django-cors-headers 
配置settings.py文件,添加 
MIDDLEWARE_CLASSES = ( 
… 
‘corsheaders.middleware.CorsMiddleware’, 
‘django.middleware.common.CommonMiddleware’, # 注意顺序 
… 

#跨域增加忽略 
CORS_ALLOW_CREDENTIALS = True 
CORS_ORIGIN_ALLOW_ALL = True 
CORS_ORIGIN_WHITELIST = ( 
‘*’ 

)

7.django传值的时候,接口得到的值并不是原数据

这是传数据时前端from表单使用的原数据,而此时后台接受到的就是带#的数据 ,由于django需要接受的是一个json数据,需要在前端用json进行解析 

8.商品要排序,汉字如何排序

将 goodsname  convert为gbk ,就可以使用排序

还有一种便是使用中文库import locale,

# -*- coding: utf-8 -*-
import locale
locale.setlocale(locale.LC_COLLATE, 'zh_CN.UTF8')
cmp = locale.strcoll

items = list('自挂东南枝'.decode('utf-8'))
print 'before'.center(10, '=')
print ''.join(items)
items.sort(lambda x, y: cmp(x, y))
print 'after'.center(10, '=')
print ''.join(items)
输出
==before==
自挂东南枝
==after===
东挂南枝自

版本错误
一丶项目目录的不同:
1、Django1.7.7会在创建项目目录后自动创建一个与项目目录同名的Python包,将1.2.7中在项目目录下的“__init__.py"、”admin.py"、"urls.py"三个文件包含到这个同名的文件中,并新增一个“wsgi.py"文件。
2、项目目录中创建了app后,1.7.7会比1.2.7在app目录中出"admin.py"及"migrations"两个文件。
二丶settings配置文件的不同:
以mysql为例:
在1.2.7中,数据库引擎字段(ENGINE)应为"mysql""
而在1.7.7中,数据库引擎字段(ENGINE)为”django.db.backends.mysql"
且1.7.7中数据库配置默认只有"ENGINE"和"NAME"字段,“USER"、"PASSWORD"、"HOST"、”PORT“字段需要自己加上。
三丶模板路径配置
1.2.7中的settings.py文件中存在"TEMPLATE_DIRS"的设置项,且默认为空元组
而在1.7.7中的settings.py文件中没有"TEMPLATE_DIRS"的设置项,需要自己加进来,且需要设置为
TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]


猜你喜欢

转载自blog.csdn.net/miantian180/article/details/79379281