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 |