Extra 2 :Some of important concept in views file
In this tutorial we will learn some of the concept that are need while we writing the login in view file.
1.Updating the data while coming from form data
#method-1
_mutable = data._mutable
data._mutable = True
data['task']=task.uuid
data._mutable = _mutable
#method-2
data = request.data
request.POST._mutable = True
peaks = json.loads(data["peak"])
data["peak"] = peaks[0]
data["added_by"] = request.user.uuid
request.POST._mutable = False
closing_stock = obj.inventorystock_set.order_by('created_at').last()
item = InventoryItem.objects.get(Q(sku=sku) | Q(upc=sku))
inventry_group = InventoryGroup.objects.filter(company=company
).values_list("brand", flat=True).distinct()
If list of image is coming from the fronend then used this concept to handle it.
#if more than one files is comes
new_image_list=[]
image_list = request.FILES.getlist("image")
if image_list:
if len(image_list) > 0:
for image in image_list:
new_image_list.append({
"image": image
})
item_gallery = ItemGallerySerializer(
data=new_image_list, many=True, context={"request": request})
item_gallery.is_valid(raise_exception=True)
item_gallery.save()
when you need the recently saved object to be used
inv_group = inventory_group_ser.save(added_by=request.user)
inv_group_obj = InventoryGroup.objects.get(uuid=inv_group.uuid)
for i in inventory_list_ser.data:
item_uuid = i.get("uuid")
inv_item = InventoryItem.objects.get(uuid=item_uuid)
quantity = i.get('opening_stock')
InventoryStock(item_uuid=inv_item, opening_stock=0,
closing_stock=quantity, added_by=request.user).save()
Exception Handling
from django.core.exceptions import ObjectDoesNotExist
try:
user = User.objects.get(pk=1337)
phone = Team.objects.get(pk=1337)
except ObjectDoesNotExist:
logging.error("User or Team does not exist")
except model_name.DoesNotExist:
return Responser('error message')
except ValueError as e:
return Response(str(e))
except Exception as e:
return Response(str(e))
Important concept in views.py
ip=request.META.get('REMOTE_ADDR') # to get the ip address of web browser
last_url=request.META.get('HTTP_REFERER')
return HttpResponseRedirect(last_url)
remove=request.GET.get('remove','off')
file=request.FILES['notefile']
file=request.FILES.get('notefile')
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
#for functional view
@login_required
@staff_member_required
@permission_required('appname.can_add')
#for class view
@method_decorator(login_required,name='dispatch')
Additional
"photo": base64.b64encode(product.photo).decode("utf-8") if product.photo else None
province_id = request.query_params.get("data", None)
"category": product.category.name if product.category else None,
"subcategory": product.sub_category.name if product.sub_category else None
"photo": request.build_absolute_uri(product.photo.url),
image_list = request.FILES.getlist("image")
inventry_group = InventoryGroup.objects.all().values_list("brand", flat=True).distinct()
data.update({"cover_image": request.data.get('cover_image')})if 'cover_image' in data.keys() else data.update({"cover_image": request.data.get('new_image')}
data = json.loads(request.data["success"])
image = request.FILES.getlist('icon')
for idx, data_obj in enumerate(data):
data_obj["icon"] = image[idx]
data_obj["added_by"] = request.user.uuid
email = str(data['email']).strip() if 'email' in data else ''
if not email:
json_error.append('Email can not be blank')
else:
if User.objects.filter(email=email).exists():
pass
else:
json_error.append("Please send correct email.")