Джанго: Как отловить ValueError из URL? - PullRequest
0 голосов
/ 19 декабря 2018

Я пишу одну функцию API (так как в этом случае мне не нужен отдых).По сути, это URL с UUID4 в качестве api-ключа.

Функция работает следующим образом:

def jsonapi(request, apikey):
    try:
        test = get_object_or_404(ProfileDetails, apikey=apikey)
        if ProfileDetails.objects.filter(apikey=apikey).exists():

            details = get_object_or_404(ProfileDetails, apikey=apikey)
            if Posts.objects.filter(published=True, user=details).exists():
                data = Posts.objects.filter(published=True, user=details).order_by('-timestamp')
                postData = []
                for a in data:
                    user = a.user.username
                    title = a.title
                    post = a.post
                    date = a.timestamp
                    slug = a.slug
                    url = "https://app.domain.co/@" + a.user.username + "/" + a.slug
                    # print(date.date)

                    newjson = {
                    "username": user,
                    "title": title,        
                    }

                    postData.append(newjson)
                    jsonStr = json.dumps(postData, cls=DjangoJSONEncoder)
                    qwe = json.loads(jsonStr)
                    returndata = JsonResponse(qwe, safe=False)
                    returndata['Access-Control-Allow-Origin'] = '*'

                    return returndata

            else:

                newjson = {
                "error": "Please make sure you have at least 1 item live."
                }
                postData.append(newjson)
                jsonStr = json.dumps(postData, cls=DjangoJSONEncoder)
                qwe = json.loads(jsonStr)
                returndata = JsonResponse(qwe, safe=False)
                returndata['Access-Control-Allow-Origin'] = '*'
                return returndata

        else:
            newjson = {
            "error": "Make sure you have at least one item set as live."
            }
            postData.append(newjson)
            jsonStr = json.dumps(postData, cls=DjangoJSONEncoder)
            qwe = json.loads(jsonStr)
            returndata = JsonResponse(qwe, safe=False)
            returndata['Access-Control-Allow-Origin'] = '*'
            return returndata

    except ValueError:

        return JsonResponse({"Error":"Invalid API Key"})

Теперь, в принципе, мне нужно сделать это, когда я что-то вводю в URLэто не UUID, он возвращает [«что-то» не является действительным UUID. »]

Я бы надеялся, что ValueError обнаружит ошибку и позволит мне написать ответ, но не повезло.

Есть предложения?

Спасибо!

...