yht há 21 horas atrás
pai
commit
709abe9dd4

BIN
pythonweb/db.sqlite3


+ 1 - 1
pythonweb/serviceApp/admin.py

@@ -3,4 +3,4 @@ from .models import Doc
 
 
 # Register your models here.
-admin.register(Doc)
+admin.site.register(Doc)

+ 2 - 2
pythonweb/serviceApp/migrations/0001_initial.py

@@ -1,4 +1,4 @@
-# Generated by Django 4.2.30 on 2026-05-08 13:20
+# Generated by Django 4.2.30 on 2026-05-09 15:24
 
 from django.db import migrations, models
 import django.utils.timezone
@@ -23,7 +23,7 @@ class Migration(migrations.Migration):
             options={
                 'verbose_name': '资料',
                 'verbose_name_plural': '资料',
-                'ordering': ['publishDate'],
+                'ordering': ['-publishDate'],
             },
         ),
     ]

+ 0 - 17
pythonweb/serviceApp/migrations/0002_alter_doc_options.py

@@ -1,17 +0,0 @@
-# Generated by Django 4.2.30 on 2026-05-09 14:10
-
-from django.db import migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('serviceApp', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.AlterModelOptions(
-            name='doc',
-            options={'ordering': ['-publishDate'], 'verbose_name': '资料', 'verbose_name_plural': '资料'},
-        ),
-    ]

+ 11 - 5
pythonweb/serviceApp/models.py

@@ -2,15 +2,21 @@ from django.db import models
 import django.utils.timezone as timezone
 
 # Create your models here.
+
+
 class Doc(models.Model):
-    title = models.CharField(max_length=250,verbose_name="资料名称")
-    file = models.FileField(upload_to='Service/',blank=True,verbose_name="文件资料")
-    publishDate = models.DateTimeField(max_length=20,default=timezone.now,verbose_name="发布时间")
+    title = models.CharField(max_length=250, verbose_name='资料名称')
+    file = models.FileField(upload_to='Service/',
+                            blank=True,
+                            verbose_name='文件资料')
+    publishDate = models.DateTimeField(max_length=20,
+                                       default=timezone.now,
+                                       verbose_name='发布时间')
 
     def __str__(self):
         return self.title
 
     class Meta:
         ordering = ['-publishDate']
-        verbose_name = "资料"
-        verbose_name_plural = verbose_name
+        verbose_name = '资料'
+        verbose_name_plural = verbose_name

+ 147 - 78
pythonweb/serviceApp/views.py

@@ -1,117 +1,186 @@
-import base64
+from django.shortcuts import render
+from django.shortcuts import HttpResponse
+from .models import Doc
+from django.core.paginator import Paginator
+from django.shortcuts import get_object_or_404
+from django.http import StreamingHttpResponse
 import os
-
-import cv2
 import numpy as np
-from django.http import StreamingHttpResponse, JsonResponse
-from django.shortcuts import render, get_object_or_404
-from django.shortcuts import HttpResponse
+import urllib
+import json
+import cv2
 from django.views.decorators.csrf import csrf_exempt
+from django.http import JsonResponse
 
-from .models import Doc
-
-face_detector_path = 'serviceApp/haarcascade_frontalface_default.xml'
-face_detector = cv2.CascadeClassifier(face_detector_path)
 
 # Create your views here.
-def download(request):
-    return render(request,'docList.html',{'active_menu':'download'})
+def read_file(file_name, size):
+    with open(file_name, mode='rb') as fp:
+        while True:
+            c = fp.read(size)
+            if c:
+                yield c
+            else:
+                break
 
 
-def platform(request):
-    return render(request,'platForm.html',{'active_menu':'platform'})
+def download(request):
+    submenu = 'download'
+    docList = Doc.objects.all().order_by('-publishDate')
+    p = Paginator(docList, 5)
+    if p.num_pages <= 1:
+        pageData = ''
+    else:
+        page = int(request.GET.get('page', 1))
+        newList = p.page(page)
+        left = []
+        right = []
+        left_has_more = False
+        right_has_more = False
+        first = False
+        last = False
+        total_pages = p.num_pages
+        page_range = p.page_range
+        if page == 1:
+            right = page_range[page:page + 2]
+            print(total_pages)
+            if right[-1] < total_pages - 1:
+                right_has_more = True
+            if right[-1] < total_pages:
+                last = True
+        elif page == total_pages:
+            left = page_range[(page - 3) if (page - 3) > 0 else 0:page - 1]
+            if left[0] > 2:
+                left_has_more = True
+            if left[0] > 1:
+                first = True
+        else:
+            left = page_range[(page - 3) if (page - 3) > 0 else 0:page - 1]
+            right = page_range[page:page + 2]
+            if left[0] > 2:
+                left_has_more = True
+            if left[0] > 1:
+                first = True
+            if right[-1] < total_pages - 1:
+                right_has_more = True
+            if right[-1] < total_pages:
+                last = True
+        pageData = {
+            'left': left,
+            'right': right,
+            'left_has_more': left_has_more,
+            'right_has_more': right_has_more,
+            'first': first,
+            'last': last,
+            'total_pages': total_pages,
+            'page': page,
+        }
+    return render(
+        request, 'docList.html', {
+            'active_menu': 'service',
+            'sub_menu': submenu,
+            'docList': docList,
+            'pageData': pageData,
+        })
+
 
-def getDoc(request,id):
-    doc = get_object_or_404(Doc,id=id)
-    update_to,filename = str(doc.file.split('/'))
-    filepath = '%s/media/%s/%s' % (os.getcwd(),update_to,filename)
-    response = StreamingHttpResponse(read_file(filepath,512))
+def getDoc(request, id):
+    doc = get_object_or_404(Doc, id=id)
+    update_to, filename = str(doc.file).split('/')
+    filepath = '%s/media/%s/%s' % (os.getcwd(), update_to, filename)
+    response = StreamingHttpResponse(read_file(filepath, 512))
     response['Content-Type'] = 'application/octet-stream'
-    response['Content-Disposition'] = 'attachment; filename=%s' % filename
+    response['Content-Disposition'] = 'attachment;filename="{}"'.format(
+        filename)
     return response
 
-def read_file(file_name,size):
-    with open(file_name,'rb') as f:
-        while True:
-            c = f.read(size)
-            if c:
-                yield c
-            else:
-                break
+
+def platform(request):
+    submenu = 'platform'
+    return render(request, 'platForm.html', {
+        'active_menu': 'service',
+        'sub_menu': submenu,
+    })
+    # return HttpResponse(html)
+
+
+def read_image(stream=None):
+    if stream is not None:
+        data_temp = stream.read()
+    img = np.asarray(bytearray(data_temp), dtype="uint8")
+    img = cv2.imdecode(img, cv2.IMREAD_COLOR)
+    return img
+
+
+face_detector_path = "serviceApp\\haarcascade_frontalface_default.xml"
+face_detector = cv2.CascadeClassifier(face_detector_path)
+
 
 @csrf_exempt
 def facedetect(request):
     result = {}
-    if request.method == 'POST':
-        if request.FILES['file'].get('image', None) is not None:
-            img = read_image(stream = request.FILES['image'])
+
+    if request.method == "POST":
+        if request.FILES.get("image", None) is not None:
+            img = read_image(stream=request.FILES["image"])
         else:
             result.update({
-                "#faceNum":-1
+                "#faceNum": -1,
             })
             return JsonResponse(result)
 
         if img.shape[2] == 3:
-            img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
-
-        values = face_detector.detectMultiScale(
-            img,
-            scaleFactor=1.1,
-            minNeighbors=5,
-            minSize=(30, 30),
-            falgs = cv2.CASCADE_SCALE_IMAGE
-        )
+            img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 
-        values = [
-            (int(a),int(b),int(a+c),int(b+d))
-            for (a,b,c,d) in values
-        ]
+        values = face_detector.detectMultiScale(img,
+                                                scaleFactor=1.1,
+                                                minNeighbors=5,
+                                                minSize=(30, 30),
+                                                flags=cv2.CASCADE_SCALE_IMAGE)
 
+        values = [(int(a), int(b), int(a + c), int(b + d))
+                  for (a, b, c, d) in values]
         result.update({
-            "#faceNum":len(values),
-            "face":values,
+            "#faceNum": len(values),
+            "faces": values,
         })
-        return JsonResponse(result)
+    return JsonResponse(result)
 
 
-def read_image(stream = None):
-    if stream is not None:
-        data_temp = stream.read()
-    img = np.asarray(bytearray(data_temp), dtype="uint8")
-    img = cv2.imdecode(img,cv2.IMREAD_COLOR)
-    return img
+import base64
+
 
 @csrf_exempt
 def facedetectDemo(request):
     result = {}
-    if request.method == 'POST':
-        if request.FILES['file'].get('image', None) is not None:
-            img = read_image(stream = request.FILES['file'])
+
+    if request.method == "POST":
+        if request.FILES.get('image') is not None:  #
+            img = read_image(stream=request.FILES["image"])
         else:
-            result.update({
-                "#faceNum":-1
-            })
-            return JsonResponse(result)
+            result["#faceNum"] = -1
+            return JsonResponse(default)
 
         if img.shape[2] == 3:
-            imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
+            imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
         else:
             imgGray = img
 
-        values = face_detector.detectMultiScale(
-            imgGray,
-            scaleFactor=1.1,
-            minNeighbors=5,
-            minSize=(30, 30),
-            falgs = cv2.CASCADE_SCALE_IMAGE
-        )
-
-        values = [
-            (int(a),int(b),int(a+c),int(b+d))
-            for (a,b,c,d) in values
-        ]
-        retval,buffer_img = cv2.imencode('.jpg',img)
+        values = face_detector.detectMultiScale(imgGray,
+                                           scaleFactor=1.1,
+                                           minNeighbors=5,
+                                           minSize=(30, 30),
+                                           flags=cv2.CASCADE_SCALE_IMAGE)
+
+        values = [(int(a), int(b), int(a + c), int(b + d))
+                  for (a, b, c, d) in values]
+
+        for (w, x, y, z) in values:
+            cv2.rectangle(img, (w, x), (y, z), (0, 255, 0), 2)
+
+        retval, buffer_img = cv2.imencode('.jpg', img) 
         img64 = base64.b64encode(buffer_img)
-        img64 = str(img64, 'utf-8')
-        result['img64'] = img64
-        return JsonResponse(result)
+        img64 = str(img64, encoding='utf-8')
+        result["img64"] = img64 
+    return JsonResponse(result)
+