Python module that allows to cast django request data for POST and GET methods easyly
Allows you to capture errors in parameters and give them default values, to protect your application with little code and easy to read.
You can use pip to install this module
pip install request_castingGets a parameter from a djangorestframework or django view and cast it to a bool object. For example
from request_casting import request_casting
from rest_framework.decorators import api_view
from rest_framework.response import Response
@api_view(['GET', 'POST'])
def myview(request):
a=request_casting.RequestBool(request, "a")
return Response({"a": a, "class": a.__class__.__name__}, status=status.HTTP_200_OK)You can call this view with a GET method with requests, curl, axios...
curl http://localhost:8000/myview/?a=true
curl -X POST http://localhost:8000/myview/ -d"a=false"You'll get this answer in both cases
{"a":true,"class":"bool"}
All request_casting methods allow to set a default value. By default this value is None in all Request methods. This value is returned when cast fails.
curl http://localhost:8000/myview/?a=BADBOOLYou'll get this answer in both cases
{"a":null,"class":"NoneType"}
Use this method inside a view to get a casted date. Use dates in Iso format
# ... The same as RequestBool example
a=request_casting.RequestDate(request, "a")You'll get this answers
curl http://localhost:8000/myview/?a=BADDATE => a will be None
curl http://localhost:8000/myview/?a=2021-1-1 => a will be date(2023,1,1)
Use this method inside a view to get a casted Decimal
# ... The same as RequestBool example
a=request_casting.RequestDecimal(request, "a", Decimal(0))You'll get this answers
curl http://localhost:8000/myview/?a=12.1212 => a will be Decimal(12.1212)
curl http://localhost:8000/myview/?a=2021-1-1 => a will be Decimal(0)
Use this method inside a view to get a datetime with timezone. Use dates in Iso format
# ... The same as RequestBool example
a=request_casting.RequestDtaware(request, "a")You'll get this answers
curl http://localhost:8000/myview/?a=2011-10-05T14:48:00.000Z => a will be a datetime with timezone
curl http://localhost:8000/myview/?a=2021-1-1 => a will be None
Use this method inside a view to get a validated email
# ... The same as RequestBool example
a=request_casting.RequestEmail(request, "a")You'll get this answers
curl http://localhost:8000/myview/?a=hi@hi.com => a will be an email
curl http://localhost:8000/myview/?a=hi.hi.com => a will be None
Use this method inside a view to get a casted Integer
# ... The same as RequestBool example
a=request_casting.RequestInteger(request, "a")You'll get this answers
curl http://localhost:8000/myview/?a=12 => a will be 12
curl http://localhost:8000/myview/?a=BADINTEGER => a will be None
Use this method inside a view to get a list of Booleans
# ... The same as RequestBool example
a=request_casting.RequesListOfBools(request, "a")You'll get this answers
curl "http://localhost:8000/myview/?a[]=true&a[]=false" => a will be a list [True,False]Use this method inside a view to get a list of Integers
# ... The same as RequestBool example
a=request_casting.RequestListOfIntegers(request, "a")You'll get this answers
curl "http://localhost:8000/myview/?a[]=1&a[]=2" => a will be a list [1,2]Use this method inside a view to get a list of strings
# ... The same as RequestBool example
a=request_casting.RequestListOfStrings(request, "a")You'll get this answers
curl "http://localhost:8000/myview/?a[]=a&a[]=b" => a will be a list ["a","b"]Use this method inside a view to get a casted String
# ... The same as RequestBool example
a=request_casting.RequestString(request, "a")You'll get this answers
curl http://localhost:8000/myview/?a=12 => a will be "12"
curl http://localhost:8000/myview/?a=BADINTEGER => a will be "BADINTEGER"
Use this method inside a view to get a django model object using its hyperlinked url
# ... The same as RequestBool example
a=request_casting.RequestUrl(request, "a", models.Record, model_url="records")You'll get this answers
curl "http://localhost:8000/myview/?a=http://localhost:8000/api/records/1/" => a will be a Record object with pk=1Use this method inside a view to get a list of django model object using its hyperlinked url
# ... The same as RequestBool example
a=request_casting.RequestListOfUrls(request, "a",models.Record, model_url="records")You'll get this answers
curl "http://localhost:8000/myview/?a[]=http://localhost:8000/api/records/1/&a[]=http://localhost:8000/api/records/2/" => a will be a list with Record objects with pk=1 and pk=2Returns True if all function arguments are None. It's very usefull to compare view parameters faster.
request_casting.all_args_are_none(None, None, None) #Returns True
request_casting.all_args_are_none(1, None, None)# Returns False
request_casting.all_args_are_none(1, 1, 1) #Return False Returns True if all function arguments are different to None and ""
It's very usefull to compare view parameters fast.
request_casting.all_args_are_not_empty(None, "", None) #Returns False
request_casting.all_args_are_not_empty("", "", "")# Returns False
request_casting.all_args_are_not_empty(1, 1, 1) #Return TrueReturns True if all function arguments are different to None
It's very usefull to compare view parameters fast.
request_casting.all_args_are_not_none(None, "", None) #Returns False
request_casting.all_args_are_not_none("", "", "")# Returns True
request_casting.all_args_are_not_none(1, 1, 1) #Return TrueRun poe coverage to test module.