From a550ac07cb5e6ae25a3fc3bc1ef8fd038b900e89 Mon Sep 17 00:00:00 2001 From: Parthiban Date: Tue, 26 Aug 2025 18:49:41 +0530 Subject: [PATCH] fix: update Django deprecated code and model adjustments - Replaced deprecated `render_to_response` with `render` - Updated models __repr__ - Tested views and migrations for correct functionality --- README.md | 17 +++++++++++++++++ onvifApp/camera/models.py | 20 ++++++++++++++++---- onvifApp/camera/urls.py | 2 +- onvifApp/camera/views.py | 16 ++++++++++++++-- onvifApp/onvifApp/urls.py | 5 +++-- onvifApp/requirements.txt | 2 ++ 6 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 onvifApp/requirements.txt diff --git a/README.md b/README.md index 08dff3b..8f01c18 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,28 @@ # onvif-python Onvif django app for viewing camera device information, system date time, and system logs. +## Requirements + +- Python 3.10+ +- Django 5.2.5 +- Other dependencies: see `requirements.txt` + ## Installation: `pip install django` `pip install --upgrade onvif_zeep` +## Initial Setup + +After cloning the repository and installing dependencies, set up the database: + +# Generate migration files +python manage.py makemigrations + +# Apply migrations to create tables +python manage.py migrate + + ## Update Got the finalist prize of Onvif Spotlight challenge for creating this app. diff --git a/onvifApp/camera/models.py b/onvifApp/camera/models.py index 0548302..945bb97 100644 --- a/onvifApp/camera/models.py +++ b/onvifApp/camera/models.py @@ -1,17 +1,29 @@ from django.db import models +import json # Create your models here. class Camera(models.Model): ip = models.CharField( - max_length=200, blank=False, null=False) + max_length=200, blank=False, null=False) port = models.CharField(max_length=200, blank=False) password = models.CharField(max_length=200, blank=False) username = models.CharField(max_length=200, blank=False) def __str__(self): - return self.ip - + return self.ip + + def __repr__(self): + # Build a dict of values + data = { + "camera_ip": self.ip, + "camera_port": self.port, + "camera_username": self.username, + "camera_password": self.password, + } + # Return JSON string + return json.dumps(data) + def save(self, *args, **kwargs): - super(Camera, self).save(*args, **kwargs) \ No newline at end of file + super(Camera, self).save(*args, **kwargs) \ No newline at end of file diff --git a/onvifApp/camera/urls.py b/onvifApp/camera/urls.py index 2474392..cade22f 100644 --- a/onvifApp/camera/urls.py +++ b/onvifApp/camera/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import url +from django.urls import re_path as url from .views import(CameraView, CameraLoginView) urlpatterns = [ diff --git a/onvifApp/camera/views.py b/onvifApp/camera/views.py index e8ecfc3..7906934 100644 --- a/onvifApp/camera/views.py +++ b/onvifApp/camera/views.py @@ -2,12 +2,16 @@ from django.views.generic.base import View from onvif import ONVIFCamera from django.shortcuts import redirect -from django.shortcuts import render, render_to_response +from django.shortcuts import render import os from django.template import RequestContext from onvifApp.settings import BASE_DIR from camera.models import Camera from onvif import ONVIFService +import onvif +import json + +from django.http import JsonResponse # import zeep # from zeep.wsse.username import UsernameToken @@ -17,11 +21,13 @@ class CameraView(View): def get(self, request, *args, **kwargs): + #Check WSDL path + WSDL_PATH = os.path.join(os.path.dirname(onvif.__file__), 'wsdl') # Get Hostname cam_obj = Camera.objects.get(id=kwargs['id']) mycam = None try: - mycam = ONVIFCamera(cam_obj.ip, cam_obj.port, cam_obj.username, cam_obj.password, '/usr/local/lib/python2.7/site-packages/wsdl/') + mycam = ONVIFCamera(cam_obj.ip, int(cam_obj.port), cam_obj.username, cam_obj.password) except Exception as e: print('Exception message : ' , str(e)) cam_obj.delete() @@ -90,7 +96,13 @@ def post(self, request, *args, **kwargs): port = request.POST.get('port', '') username = request.POST.get('username', '') password = request.POST.get('password', '') + + # cameras_list = list(Camera.objects.all().values()) + + + # return JsonResponse(cameras_list,safe=False) # Check if camera is valid obj = Camera.objects.create(ip=ip, port=port, username=username, password=password) + return redirect( 'camera_detail', obj.id) \ No newline at end of file diff --git a/onvifApp/onvifApp/urls.py b/onvifApp/onvifApp/urls.py index be26f90..282adc8 100644 --- a/onvifApp/onvifApp/urls.py +++ b/onvifApp/onvifApp/urls.py @@ -15,9 +15,10 @@ """ from django.contrib import admin from django.urls import path -from django.conf.urls import include, url +from django.urls import include, path, re_path + urlpatterns = [ path('admin/', admin.site.urls), - url(r'^', include('camera.urls')), + re_path(r'^', include('camera.urls')), ] diff --git a/onvifApp/requirements.txt b/onvifApp/requirements.txt new file mode 100644 index 0000000..2289dcf --- /dev/null +++ b/onvifApp/requirements.txt @@ -0,0 +1,2 @@ +django==5.2.5 +onvif_zeep==0.2.12