Ajax请求马匹
项目描述
你有多少次发现自己需要编写一些Django视图来处理AJAX请求?你又有多少次只是复制粘贴了一个同步请求的视图,并编辑它们以返回一个JSON对象?因此,你又有多少次忘记@login_required
实际上会在匿名用户的情况下将请求重定向到登录页面?如果你遇到这种情况的次数和我们一样多,你可能会开始考虑使用django-ajaxutils。
Django-ajaxutils允许你定义一个视图作为AJAX视图,它将返回一个JSON对象,并且能够正确处理用户未认证和无效请求等错误。一切通过简单的装饰器!
安装
只需
pip install django-ajaxutils
来完成魔法。
用法
如果你想定义一个处理AJAX请求的视图,你只需用@ajax
装饰它,并返回一个代表要作为JSON返回的对象的字典。如果你缺乏想象力,请查看以下示例
from ajaxutils.decorators import ajax @ajax() def check_for_some_task(request): exit_status = get_status_of_some_task() if exit_status is None: return { 'status': 'pending' } return { 'status': 'completed', 'exit_status': exit_status }
需要认证
如果你的视图需要用户认证,只需写
@ajax(login_required=True) def some_very_private_view(request): data = perform_something_private() return { 'data': data }
在不认证的请求的情况下,将返回一个包含以下JSON对象的401: Unauthorized
响应
{ 'status': 'error', 'error': 'Unauthorized', }
需要GET / POST
@ajax
还允许你快速要求视图的特定方法。例如,如果你的视图将编辑一些服务器端数据,你可能只接受POST请求。使用@ajax
这就像记住π的前两个小数位数(顺便说一下,它们是1和4)一样简单
@ajax(login_required=True, require_POST=True) def submit_my_data(request): new_obj = save_my_data() return { 'id': new_obj.pk }
在不合法请求的情况下,这将返回一个包含以下JSON对象的405: Method not allowed
响应
{ 'status': 'error', 'error': 'Method not allowed', }
当然,您可以为GET请求设置 require_GET=True。
您还可以使用这种替代语法
@ajax(require="GET") def my_cool_view(request): return { 'hello': 'world!' }
自定义状态码
如果您不想返回HTTP 200,您想返回404吗?请编写
from django.http import Http404 @ajax() def my_cool_view(request): raise Http404
这会返回
{ 'status': 'error', 'error': 'Not found', }
或者可能是400 - 错误请求
from django.http import HttpResponseBadRequest @ajax() def my_cool_view(request): return HttpResponseBadRequest('My error message')
这会返回
{ 'status': 'error', 'error': 'My error message', }
并且HTTP响应的状态码为400。
另一种语法,更符合Flask风格
@ajax() def my_cool_view(request): return { "i'm a": 'teapot' }, 418
从infinity导入json
厌倦了编写无限导入语句来选择最佳的json模块?让ajaxutils为您完成
from ajaxutils import json
目前,ajaxutils更倾向于使用simplejson而不是stdlib json。没有使用其他json模块。未来我们可能会通过Django设置提供对ujson的支持。
变更日志
v0.2
将JsonResponse移动到ajaxutils.http
添加了自定义状态码处理
添加了@ajax(require=METHOD)的文档
添加了“from ajaxutils import json”
项目详情
django-ajaxutils-0.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0a9a7ced6342c09eb4a339af6734e172fa0ba994b60a8ce53ef99e16e1b52df5 |
|
MD5 | 039f0072d7939c65eef4649c7dadebba |
|
BLAKE2b-256 | 8b57afc9f562dff5ee0c5aa6120d79575c624adb3daf606b2337c7090223a834 |