使用 djangorestframework 装饰器时如何调试 django ajax 函数?

Posted

技术标签:

【中文标题】使用 djangorestframework 装饰器时如何调试 django ajax 函数?【英文标题】:How to debug django ajax function when using djangorestframework decorator? 【发布时间】:2017-10-12 20:09:48 【问题描述】:

使用 djangorestframework 装饰器时如何调试 ajax 函数。

@api_view(['POST', ])
def authfb(request):
    require_more_data = True
    if request.method == 'POST':
        first_name = request.data['fb_first_name']
        last_name = request.data['fb_last_name']
        fb_picture = request.data['fb_picture']
        fb_friends_number = request.data['fb_friends_number']
        fb_username = request.data['fb_username']
        fb_id = int(request.data['fb_id'])
        fb_link = request.data['fb_link']
        username = fb_username.replace(' ', '')

        # print(username)
        password = '112358'
        user = auth.authenticate(username=username, password=password)


    return Response(request.data)

代码示例。通过 ajax 请求调用视图函数时,Django 不会告诉任何错误。这使我使用 print 并手动搜索错误的行,但仍然不知道到底出了什么问题。如何调试它,如何像往常一样制作 django 日志错误?

【问题讨论】:

【参考方案1】:

对于调试 ajax 函数,最好从 Django 视图返回响应数据(json 格式的数据,以提高透明度),可以通过 ajax 错误方法将其记录到控制台中。然后,通用方法总是可以方便地调试任何请求(打印语句,try & except 语句)

我建议更频繁地使用 try 语句,因为经验丰富的编码人员非常喜欢它,并且也易于调试。

举个简单的例子:

def authfb(request):
    if request.method == "POST":
        msg = "Unknown error"
        status = False
        try:
            #do something
            msg = "Everything's​ Goood"
            status = True
        except Exception as e:
            msg = str(e)
    return JsonResponse ('status':status, 'msg':msg, 'anything':'that_thing')

虽然这只是我的建议,但还有许多其他更好的方法。 在我看来,调试没有正确的方法,每一种方法在它自己的角度都是正确的。

希望你得到你想要的。

【讨论】:

响应正常,有响应。在我的情况下数据或请求数据。但它对 django 调试没有帮助。例如,当您创建模型的新实例并且没有插入一个字段时 如果每个字段都是必需的,那么添加非空约束的模型元字段选项将对django调试有所帮助。

以上是关于使用 djangorestframework 装饰器时如何调试 django ajax 函数?的主要内容,如果未能解决你的问题,请参考以下文章

csrf_exempt装饰器在基于Dajngo函数的视图中不起作用

04: DjangoRestFramework使用

DjangoRestFramework - 如何使用模型序列化程序访问 OneToOneField 反向关系的其他字段?

尝试使用 djangorestframework-simplejwt 和操作符 rxjs 刷新令牌时出错

需要如何使用 djangorestframework-api-key 的示例

DjangoRestFramework 类序列化程序缺少“元”属性?