Due to specific reasons, I’m required to convert a Django code to Flask. I’m a complete beginner in Flask, so here’s my Django code:
# serializers.py
from rest_framework import serializers
from .models import Element, Reaction
class ElementSerializer(serializers.ModelSerializer):
class Meta:
model = Element
fields = '__all__'
class ReactionSerializer(serializers.ModelSerializer):
class Meta:
model = Reaction
fields = '__all__'
# views
class ElementViewSet(viewsets.ModelViewSet):
queryset = Element.objects.all()
serializer_class = ElementSerializer
class ReactionViewSet(viewsets.ModelViewSet):
queryset = Reaction.objects.all()
serializer_class = ReactionSerializer
@csrf_exempt
@require_POST
def test_reaction_api(request):
try:
data = json.loads(request.body.decode('utf-8'))
element1_symbol = data.get('element1')
element2_symbol = data.get('element2')
if not element1_symbol or not element2_symbol:
return JsonResponse({"error": "Both element1 and element2 are required."}, status=400)
try:
element1 = Element.objects.get(symbol=element1_symbol)
element2 = Element.objects.get(symbol=element2_symbol)
except Element.DoesNotExist:
return JsonResponse({"error": "One or both elements do not exist."}, status=404)
reaction = Reaction.objects.filter(element1=element1, element2=element2).first()
if not reaction:
reaction = Reaction.objects.filter(element1=element2, element2=element1).first()
element1_data = ElementSerializer(element1).data
element2_data = ElementSerializer(element2).data
product_data = ElementSerializer(reaction.product).data if reaction else "No reaction"
response_data = {
"product": product_data,
"element1": element1_data,
"element2": element2_data,
}
return JsonResponse(response_data)
except json.JSONDecodeError:
return JsonResponse({"error": "Invalid JSON data"}, status=400)
And here’s my Flask code:
class ElementResource(Resource):
def get(self):
elements = Element.query.all()
return {'elements': [element.json() for element in elements]}
def post(self):
data = request.get_json()
name = data.get('name')
symbol = data.get('symbol')
if not name or not symbol:
return {"error": "Name and symbol are required."}, 400
element = Element(name=name, symbol=symbol)
db.session.add(element)
db.session.commit()
return element.json(), 201
class ReactionResource(Resource):
def get(self):
reactions = Reaction.query.all()
return {'reactions': [reaction.json() for reaction in reactions]}
def post(self):
parser = reqparse.RequestParser()
parser.add_argument('element1_name', type=str, required=True, help='Element 1 Name is required')
parser.add_argument('element2_name', type=str, required=True, help='Element 2 Name is required')
parser.add_argument('product_name', type=str, required=True, help='Product Name is required')
args = parser.parse_args()
element1 = Element.query.filter_by(name=args['element1_name']).first()
element2 = Element.query.filter_by(name=args['element2_name']).first()
if not element1 or not element2:
return {"error": "One or both elements do not exist."}, 404
reaction = Reaction(element1_name=args['element1_name'], element2_name=args['element2_name'], product_name=args['product_name'])
db.session.add(reaction)
db.session.commit()
return {
"reaction": reaction.json(),
}, 201
api.add_resource(ElementResource, '/api/elements/', '/elements/<int:element_id>')
api.add_resource(ReactionResource, '/api/reactions/', '/reactions/<int:reaction_id>')
Error: [1] ERROR RuntimeError: NG0900: Error trying to diff ‘[object Object]’. Only arrays and iterables are allowed
Error: [1] ERROR RuntimeError: NG0900: Error trying to diff ‘[object Object]’. Only arrays and iterables are allowed
New contributor
user23298973 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.