User-Profile-Image
hankin
  • 5
  • 首页
  • 留言
  • 个人简介
  • 分类
    • 留言
    • 未分类
    • 数据库
    • Django
    • celery
  • 页面
  • 友链
    • 社会我毛哥
Help?

Please contact us on our email for need any support

Support
    首页   ›   Django   ›   正文
Django

Django基础: Utils模块精选实用工具介绍

2020-06-08 17:45:42
532  0 2

Contents

  • 1 django.utils.dateparse模块
  • 2 django.utils.decorators模块
  • 3 django.utils.encoding模块
  • 4 django.utils.safestring模块
  • 5 django.utils.timezone模块
  • 6 django.utils.text模块

Django的Utils模块提供了很多强大的实用工具(utilities),可以简化我们的日常开发工作。小编我就精选几个Utils模块的工具分享给大家。

django.utils.dateparse模块

在日常开发工作中我们经常需要将用户输入的字符串格式的时间和日期转化为日期和时间对象,django.utils.dateparse提供了如下几个方法供我们使用:

  • parse_date(value)

接收字符串,比如’2020-04-30’,返回datetime.date类型的数据。

  • parse_time(value)

接收字符串,比如’12:35:20’返回datetime.time类型的数据。

  • parse_datetime(value)

接收字符串,比如’2020-04-40 12:35:20′, 返回datetime.datetime类型的数据。

django.utils.decorators模块

给基于类的视图(CBV)使用装饰器时,我们需要借助于该模块的method_decorator方法实现。它还支持decorators列表, 如下所示:

from django.utils.decorators import method_decorator

decorators = [login_required, check_user_permission]

@method_decorator(decorators, name='dispatch')
class ArticleCreateView(CreateView):
    model = Article
    form_class = ArticleForm
    template_name = 'blog/article_manage_form.html'

另外该模块的另外两个有用方法是:

  • decorator_from_middleware(middleware_class): 该方法将一个Middleware类转变为一个装饰器,可以用于单个视图函数上。

  • decorator_from_middleware_with_args(middleware_class): 与上一方法作用相同,只不过支持传递额外的参数。

我们常用的@cache_page装饰器就是从中间件CacheMiddleware转换过来的。

cache_page = decorator_from_middleware_with_args(CacheMiddleware)

@cache_page(3600)
def my_view(request):
    pass

django.utils.encoding模块

smart_str(obj, encoding='utf-8', strings_only=False, errors='strict')
该方法可以将一个obj对象转化为str类型的表示形式。如果strings_only设置为True,意味着不转换非字符串类型的对象obj。如果对象里包含中文字符串,设置encoding=”etf-8″可以避免乱码。

django.utils.safestring模块

在前端模板里如果我们希望Django避免对一个字符串进行转义,我们可以|safe模板过滤器或autoescape标签。而在视图里如果我们希望Django避免对一个字符串转义,就需要使用该模块提供的mark_safe方法了。

from django.utils.safestring import mark_safe
def index(request):
    content = "<a href='http://www.baidu.com'>百度</a>"
    marked_content = mark_safe(content)
    return render(request, 'indext.html', {'content': marked_content})

django.utils.timezone模块

在现实开发环境中,存在有多个时区,用户之间很有可能存在于不同的时区,所以每个用户当前时间都是不一样的。Django在存储和操作日期时间类型数据的最佳实践是在数据库中统一存储UTC标准时间,在与用户打交道时使用用户所在时区的时间。

datetime.datetime.now()获取的时间是不带任何时区信息的,不便于与数据表中的日期时间类型数据进行直接比对,而借助于timezone模块提供的now方法,我们可以总是可以获取当前UTC标准时间。借助timezone模块提供的localtime方法,我们还以很快获得当地时间。

借助于该模块提供的now方法,你可以获得用户当前时区的时间,非常有用。

# settings.py
TIME_ZONE = 'Asia/Shanghai'
# python manage.py shell
>>> from django.utils import timezone
>>> now1 = timezone.now() # 获得带时区信息的UTC时间
datetime.datetime(2016, 12, 7, 1, 41, 36, 685921, tzinfo=<UTC>)
>>> local_now = timezone.localtime(now1) # 获得上海时区所在时间
datetime.datetime(2016, 12, 7, 9, 41, 36, 685921, tzinfo=<UTC>)

django.utils.text模块

该模块提供的最常用的方法莫过于slugify方法了。使用allow_unicode=True选项还允许生成含有中文的slug哦。

from django.utils.text import slugify
>>> slugify(' Joel is a slug ')
'joel-is-a-slug'
>>> slugify('你好 World', allow_unicode=True)
'你好-world'

如本文“对您有用”,欢迎随意打赏作者,让我们坚持创作!

2 打赏
评论 (2)

点击这里取消回复。

欢迎您 游客  

目录树
  • 1 django.utils.dateparse模块
  • 2 django.utils.decorators模块
  • 3 django.utils.encoding模块
  • 4 django.utils.safestring模块
  • 5 django.utils.timezone模块
  • 6 django.utils.text模块
疯狂小土豆
专注Python Web开发
13文章 26评论 25点赞 9344浏览

最新评论
+7
随机文章
Django基础:如何获得SSL证书与配置HTTPS
2年前
(数据库平台)转载:美团MySQL数据库巡检系统的设计与应用
2年前
50条有趣的Python一行代码,建议收藏!
4个月前
使用Django+uwsgi+nginx部署Django(附带daphne+celery+supervisor)
2年前
留言
2年前
图像链接
归档文章
  • celery (1)
  • Django (7)
  • 数据库 (1)
  • 未分类 (4)
  • 留言 (1)
Copyright © 2022 网站备案号: 12313213213
                   疯狂的小土豆 主题. Designed by Mundy
主页
页面
博主
疯狂小土豆
疯狂小土豆 管理员
专注Python Web开发
13 文章 26 评论 9344 浏览
测试
测试
赞赏作者

请通过微信、支付宝 APP 扫一扫

感谢您对作者的支持!

 支付宝 微信支付