Structure your Python Module
- 12 Mar 2024
- 1 Minute to read
- Print
- DarkLight
- PDF
Structure your Python Module
- Updated on 12 Mar 2024
- 1 Minute to read
- Print
- DarkLight
- PDF
Article summary
Did you find this summary helpful?
Thank you for your feedback
Your module's main directory example
is a Django app generated with the startapp command.
In the example
directory, you perform multiple functions. For example, you can:
create a
urls.py
file to expose endpointscreate a
viewsets.py
file to leverage Django Rest Framework.
In the following scenario, we’re going to expose a /qrcode
endpoint for our module that takes text and returns a base64 image.
Create a
viewsets.py
file with the following contents.from drf_spectacular.utils import extend_schema, OpenApiParameter, OpenApiExample from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status, serializers import io import qrcode import base64 class TextLikeSerializer(serializers.Serializer): text = serializers.CharField() class QRLikeSerializer(serializers.Serializer): qrcode = serializers.CharField() class QRCodeView(APIView): @extend_schema(request=TextLikeSerializer, responses=QRLikeSerializer) def post(self, request, *args, **kwargs): """ This function takes text as input and returns Qrcode Image converted into base64 string. """ qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=4, border=4, ) qr.add_data(request.data["text"]) qr.make(fit=True) img = qr.make_image() buffered = io.BytesIO() img.save(buffered, format="PNG") img_str = base64.b64encode(buffered.getvalue()).decode("utf-8") return Response({"qrcode": img_str}, status=status.HTTP_200_OK)
Create a
urls.py
file that registers the endpoint in the router.from django.urls import path, include from rest_framework import routers from .viewsets import QRCodeView router = routers.DefaultRouter() urlpatterns = [ path("", include(router.urls)), path("qrcode/", QRCodeView.as_view()), ]
Install the module again.
cb add django-example python manage.py runserver # restart if already running/
Visit
localhost:8000
and you should see this new endpoint.
Was this article helpful?