一系列让你的django生活更轻松的工具。
hand的Python项目详细描述
不同工具、快捷方式、装饰器、窗体和模型字段的集合 让你的django生活更轻松。
安装
pip install handy
概述
下面是对handy的快速概述。 你也可以阅读full docs。
避免使用@render_to()装饰符HttpResponse和render_to_response()biolerplate。 这个函数将把结果dict呈现为'app_name/foo.html':
@render_to()deffoo(request):return{'bar':Bar.objects.all()# You can easily override default template, content type,# status code and add cookies to response:'STATUS':410,'CONTENT_TYPE':'text/plain'}
使用@render_to_json()decorator的简单json响应程序:
@render_to_json()defposts_by_tag(request,tag=None):posts=Post.object.values().filter(tag=tag)returnlist(posts)
以及更高阶的@ajaxdecorator来处理更复杂的异步操作:
@ajax@ajax.login_required@ajax.catch(Post.DoesNotExist)defenable_post(request):post=Post.objects.get(pk=request.GET['id'])ifpost.author!=request.user:raiseajax.error('permission_denied')post.enabled=Truepost.save()
发送模板中呈现的电子邮件:
render_to_email(article.author.email,'approved.html',{'article':article})
模型字段的集合,附带表单字段和小部件。存储值或选项数组的最显著的不同数组字段:
DAYS=zip(range(7),'Sun Mon Tue Wed Thu Fri Sat'.split())classCompany(models.Model):phones=StringArrayField('Phone numbers',blank=True,default=lambda:[])workdays=IntegerArrayField('Work days',choices=DAYS)company=Company(phones=['234-5016','516-2314'],workdays=[1,2,3,4])company.save()
在模型形式中,phones字段将表示为CommaSeparatedInput,并且 workdays作为多个复选框:
classCompanyForm(forms.ModelForm):classMeta:model=Company
方便的@cached_property实用程序:
classUserProfile(models.Model):phones=models.ManyToManyField(Phone)...@cached_propertydefpublic_phones(self):# this queryset will be constructed only once, thanks to @cached_propertyreturnself.phones.filter(public=True)
一堆数据库查询实用程序,不再修改cursor():
best_offer=fetch_val('select max(value) from offers where ...')forrowinfetch_named('select * from blog_post'):printrow.id,row.title
还有一个中间件,通过去掉不必要的空格,使html输出更精简:
MIDDLEWARE_CLASSES=(...'handy.middleware.StripWhitespace',)
更多信息:
- 简单的日志总结
- CommaSeparatedInput和MultilineInput数组字段小部件
- JSONField、AdditionalAutoField和BigAutoField
- 以及一系列数据库、电子邮件、文本和调试实用程序
注意:功能工具,即@memoize和@cache,移动到 funcy
如何帮助
- 给我任何反馈。什么位子最有用?可以添加或更改什么?
- 带上您的想法和/或代码,让我们所有的Django体验更加有趣
待办事项
- 文本文档和实用程序文档
- 在json装饰器中添加对queryset和模型的支持