Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
20 changes: 16 additions & 4 deletions onvifApp/camera/models.py
Original file line number Diff line number Diff line change
@@ -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)
super(Camera, self).save(*args, **kwargs)
2 changes: 1 addition & 1 deletion onvifApp/camera/urls.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from django.conf.urls import url
from django.urls import re_path as url
from .views import(CameraView, CameraLoginView)

urlpatterns = [
Expand Down
16 changes: 14 additions & 2 deletions onvifApp/camera/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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()
Expand Down Expand Up @@ -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)
5 changes: 3 additions & 2 deletions onvifApp/onvifApp/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -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')),
]
2 changes: 2 additions & 0 deletions onvifApp/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
django==5.2.5
onvif_zeep==0.2.12