相关疑难解决方法(0)

Django REST例外

我目前有一些基于Django REST Framework的视图代码.我一直在使用客户异常类,但理想情况下我想使用内置的Django REST异常.

从下面的代码中我觉得这可能不是最好或最干净的方式来利用REST Framework异常.

有没有人有任何好的例子,他们正在捕捉问题并使用REST内置异常干净地返回它们?

class JSONResponse(HttpResponse):
    def __init__(self, data, **kwargs):
       content = JSONRenderer().render(data)
       kwargs['content_type'] = 'application/json'
       super(JSONResponse, self).__init__(content, **kwargs)

def queryInput(request):
    try:
        auth_token = session_id = getAuthHeader(request)
        if not auth_token:
            return JSONResponse({'detail' : "fail", "error" : "No X-Auth-Token Found", "data" : None}, status=500)

        if request.method:
            data = JSONParser().parse(request)
            serializer = queryInputSerializer(data=data)

        if request.method == 'POST':
            if serializer.is_valid():
                input= serializer.data["input"]
                fetchData = MainRunner(input=input,auth_token=auth_token)
                main_data = fetchData.main()

            if main_data:
                return JSONResponse({'detail' : "success", "error" : None, "data" : main_data}, …
Run Code Online (Sandbox Code Playgroud)

django rest django-rest-framework

21
推荐指数
2
解决办法
2万
查看次数

Django REST框架:如果相关字段不存在,则在POST上返回404(而不是400)?

我正在开发一个REST API,它接受来自一些真正脑死亡的软件的POST请求,这些软件无法补丁或其他任何东西.POST用于更新数据库中已存在的Model对象.

具体来说,我正在为具有相关字段的对象发布数据(SlugRelatedField,因为POSTer知道'name'属性但不知道'pk').但是,如果POSTer发送数据,其中'name'在SlugRelatedField上没有返回任何内容(例如,相关对象不存在),我需要返回404.我已经通过调试器进行了这项工作,但看起来DRF使用了一些Django信号魔法来实现它DRF Does It™,这将返回400 BAD REQUEST.我不知道如何修改这个 - 只有当它是上述条件而不是真正值得400的POST 时才进入404.

顺便说一句,pre_save()在我看来,在执行失败测试期间不执行.

这是序列化器:

class CharacterizationSerializer(serializers.ModelSerializer):
    """
    Work-in-progress for django-rest-framework use.  This handles (de)serialization
    of data into a Characterization object and vice versa.

    See: http://www.django-rest-framework.org/tutorial/1-serialization
    """
    creator = serializers.Field(source='owner.user.username')
    sample = serializers.SlugRelatedField(slug_field='name',
                                          required=True,
                                          many=False,
                                          read_only=False)

    class Meta:
        model = Characterization
        # leaving 'request' out because it's been decided to deprecate it. (...maybe?)
        fields = ('sample', 'date', 'creator', 'comments', 'star_volume', 'solvent_volume',
                  'solution_center', 'solution_var', 'solution_minimum', 'solution_min_stddev',
                  'solution_test_len',)
Run Code Online (Sandbox Code Playgroud)

这里pre_save是在给定测试中没有运行的视图(但是在其他一些测试中运行): …

python django django-signals django-rest-framework

5
推荐指数
2
解决办法
8390
查看次数