文档章节

django smart_str和smart_unicode

雏草
 雏草
发布于 2015/04/21 22:55
字数 419
阅读 38
收藏 0

Django 为字符编码的转换提供了非常简洁的方法:

1.django.utils.encoding.smart_unicode

2.django.utils.encoding.smart_str

我们在需要将用户提交的数据转换为 Unicode 的时候,可以使用 smart_unicode,而在需要将程序中字符输出到非 Unicode 环境(比如 HTTP 协议数据)时可以使用 smart_str 方法。拿 DDlog 来说,也有不少地方用到了这两个方法。

1、smart_unicode 在 DDlog 中的使用

Blog 的标签(Tag)一般多少会有中文,对于服务器环境来说,不会安装系统级的 UTF-8 环境,那么浏览器请求的 URL 中包含的中文会作为经过 urllib.quote 编码转换后的 UTF-8 字符串(注意,这种情况下,Django 不会自动转换为 Unicode),这里,我们在使用这个数据之前,需要进行一定的转换。

比较原始的方法类似如下:

1.def post_via_tag(request, tag):

2.from urllib import unquote

3.key = unquote(unicode(tag).encode('UTF-8'))

4.tag_as = Tag.objects.select_related().get(tag__iexact = key)

而如果使用 Django 的 smart_unicode,明显简洁得多(也更符合 DRY 原则):

1.def post_via_tag(request, tag):

2.from django.utils.encoding import smart_unicode

3.tag_as = Tag.objects.select_related().get(tag__iexact = smart_unicode(tag))

4.# ... other code

2、smart_str 在 DDlog 中的使用

DDlog 在接受评论的时候,会将评论者的姓名和邮件地址保存到 Cookie 中,以便该用户下次发表评论的时候自动显示相关信息。而评论者的姓名有可能是中文的,如果直接把中文字符串放到 Cookie 中,会引发 UnicodeEncodeError 异常。

这里需要进行去 Unicode 编码:

1.def post_comment(request, slug):

2.# ... other prepare code

3.response.set_cookie('COMMENT_AS_NAME', smart_str(comment_user.name), expired_at)

就这么简单便捷!


本文转载自:http://dirk.sh/diary/using-django-smart_str-smart_unicode/

上一篇: 验证码无法显示
下一篇: bae搭建django
雏草
粉丝 0
博文 10
码字总数 1799
作品 0
南京
私信 提问
Django从1.8升级到2.0注意事项

我公司从2015年开发自动化部署平台,当时选用的开发框架是Django1.8版本。这两年多来,基于其上,很好的满足了我们的开发需求。 由于Django的产品周期问题,我们决定将Django从当前开发的1.8...

天飞
2017/12/28
0
0
django的models部分使用小结

django使用小结 生成某个app的数据库信息 ./manage.py makemigrations myapp 外键 tag = models.ForeignKey(Tag, relatedname = 'fktag') django管理后台显示object解决方法 针对python2.7,......

cs_sharp
2016/02/20
36
0
SaltOps 0.5.0 新增业务配置抓取,界面大幅度美化

SaltOps 0.5.0 发布细节 引入`django-smart-selects`,解决级联查询和新增的问题 新增卸载业务功能 全面使用Django-Jet 新增配置文件抓取,配置文件和业务相关联 优化项目结构,拆分Model与A...

小埋酱
2017/02/22
1K
5
【译】Django官方教程——​编写你的第一个Django app,部分1

编写你的第一个Django app,部分1 【中括号中的绿色字是我自己添加的辅助内容,非官方文档内容,仅供参考】 【英文原文地址:https://docs.djangoproject.com/en/1.6/intro/tutorial01/】 【...

花果山妖
2014/08/03
1K
0
django取出pymongo中存储的中文图片路径后,读取该路径在网页上展示没有出现图片

问题是这样的: 我搭建的环境是:python2.7 + mongoengine + pymongo + django + Ubuntu14 python处理一些带有中文路径的图片,把这个路径存储在数据库pymongo中,保存的时候该路径是转换为:ut...

qingyuanlu
2015/07/16
433
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员Java教程分享Zookeeper基本原理与运用场景

好程序员Java教程分享Zookeeper基本原理与运用场景一、什么是Zookeeper? zookeeper是一个分布式的一致性协调服务。 换句话说,也可以把zookeeper看成一个小型的分布式文件系统。但是和FastD...

好程序员官网
6分钟前
2
0
mysql表情符

1 修改表字段为utf8md4 ALTER table property_info MODIFY `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL 2 MySQL数据库服务器配置文件mysqld.cn......

干死it
26分钟前
2
0
正则表达式的基本语法

本文摘自LTP.NET知识库。 正则表达式的形式一般如下: /love/ 其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。 用户只要把希望查找匹配对象的模式内容放入“/”定界符之...

木庄
28分钟前
3
0
java 框架有哪些?

十大常用框架: 一、SpringMVC 二、Spring 三、Mybatis 四、Dubbo 五、Maven 六、RabbitMQ 七、Log4j 八、Ehcache 九、Redis 十、Shiro 延展阅读: 一、SpringMVC Spring Web MVC是一种基于J...

java框架开发者
28分钟前
6
0
细谈Mysql事务

文章原创于公众号:程序猿周先森。本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号。 上一篇着重谈到了MySQL锁的概念,里面谈到了事务的概念,其实大部分开发者对于事务肯定不陌生,...

程序猿周先森
37分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部