@@ -0,0 +1,56 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+ |
|
3 |
+from __future__ import division |
|
4 |
+ |
|
5 |
+from django_response import response |
|
6 |
+from paginator import pagination |
|
7 |
+ |
|
8 |
+from registration.models import BranchCampusAdministratorInfo |
|
9 |
+ |
|
10 |
+ |
|
11 |
+def add_branch_campus_admin(request): |
|
12 |
+ campus_id = request.POST.get('campus_id', '') |
|
13 |
+ campus_name = request.POST.get('campus_name', '') |
|
14 |
+ name = request.POST.get('name', '') |
|
15 |
+ phone = request.POST.get('phone', '') |
|
16 |
+ |
|
17 |
+ admin = BranchCampusAdministratorInfo.objects.create(campus_id=campus_id, campus_name=campus_name, name=name, phone=phone) |
|
18 |
+ |
|
19 |
+ return response(data={ |
|
20 |
+ 'admin': admin.admin_id, |
|
21 |
+ }) |
|
22 |
+ |
|
23 |
+ |
|
24 |
+def update_branch_campus_admin(request): |
|
25 |
+ admin_id = request.POST.get('admin_id', '') |
|
26 |
+ name = request.POST.get('name', '') |
|
27 |
+ phone = request.POST.get('phone', '') |
|
28 |
+ user_status = request.POST.get('user_status', 0) |
|
29 |
+ |
|
30 |
+ BranchCampusAdministratorInfo.objects.filter(admin_id=admin_id).update(name=name, phone=phone, user_status=user_status) |
|
31 |
+ |
|
32 |
+ return response() |
|
33 |
+ |
|
34 |
+ |
|
35 |
+def get_branch_campus_admin_list(request): |
|
36 |
+ page = request.POST.get('page', 1) |
|
37 |
+ num = request.POST.get('num', 20) |
|
38 |
+ |
|
39 |
+ admins = BranchCampusAdministratorInfo.objects.filter(status=True) |
|
40 |
+ count = admins.count() |
|
41 |
+ admins, left = pagination(admins, page, num) |
|
42 |
+ admins = [a.data for a in admins] |
|
43 |
+ |
|
44 |
+ return response(data={ |
|
45 |
+ 'admins': admins, |
|
46 |
+ 'count': count, |
|
47 |
+ 'left': left, |
|
48 |
+ }) |
|
49 |
+ |
|
50 |
+ |
|
51 |
+def delete_branch_campus_admin(request): |
|
52 |
+ admin_id = request.POST.get('admin_id', '') |
|
53 |
+ |
|
54 |
+ BranchCampusAdministratorInfo.objects.filter(admin_id=admin_id).update(statue=False) |
|
55 |
+ |
|
56 |
+ return response() |
@@ -0,0 +1,52 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+ |
|
3 |
+from __future__ import division |
|
4 |
+ |
|
5 |
+from django_response import response |
|
6 |
+from paginator import pagination |
|
7 |
+ |
|
8 |
+from registration.models import BranchCampusAdministratorInfo, BranchCampusInfo |
|
9 |
+ |
|
10 |
+ |
|
11 |
+def add_branch_campus(request): |
|
12 |
+ campus_name = request.POST.get('campus_name', '') |
|
13 |
+ |
|
14 |
+ campus = BranchCampusInfo.objects.create(campus_name=campus_name) |
|
15 |
+ |
|
16 |
+ return response(data={ |
|
17 |
+ 'campus_id': campus.campus_id, |
|
18 |
+ }) |
|
19 |
+ |
|
20 |
+ |
|
21 |
+def update_branch_campus(request): |
|
22 |
+ campus_id = request.POST.get('campus_id', '') |
|
23 |
+ campus_name = request.POST.get('campus_name', '') |
|
24 |
+ |
|
25 |
+ BranchCampusInfo.objects.filter(campus_id=campus_id).update(campus_name=campus_name) |
|
26 |
+ BranchCampusAdministratorInfo.objects.filter(campus_id=campus_id).update(campus_name=campus_name) |
|
27 |
+ |
|
28 |
+ return response() |
|
29 |
+ |
|
30 |
+ |
|
31 |
+def get_branch_campus_list(request): |
|
32 |
+ page = request.POST.get('page', 1) |
|
33 |
+ num = request.POST.get('num', 20) |
|
34 |
+ |
|
35 |
+ campus = BranchCampusInfo.objects.filter(status=True) |
|
36 |
+ count = campus.count() |
|
37 |
+ campus, left = pagination(campus, page, num) |
|
38 |
+ campus = [c.data for c in campus] |
|
39 |
+ |
|
40 |
+ return response(data={ |
|
41 |
+ 'campus': campus, |
|
42 |
+ 'count': count, |
|
43 |
+ 'left': left, |
|
44 |
+ }) |
|
45 |
+ |
|
46 |
+ |
|
47 |
+def delete_branch_campus(request): |
|
48 |
+ campus_id = request.POST.get('campus_id', '') |
|
49 |
+ |
|
50 |
+ BranchCampusInfo.objects.filter(campus_id=campus_id).update(statue=False) |
|
51 |
+ |
|
52 |
+ return response() |
@@ -0,0 +1,71 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+ |
|
3 |
+from __future__ import division |
|
4 |
+ |
|
5 |
+from django_response import response |
|
6 |
+from paginator import pagination |
|
7 |
+ |
|
8 |
+from api.wx_views import get_course_field_limit_scene_qrcode_url |
|
9 |
+from registration.models import CourseRegisterFieldInfo |
|
10 |
+ |
|
11 |
+ |
|
12 |
+def add_course_field(request): |
|
13 |
+ course_id = request.POST.get('course_id', '') |
|
14 |
+ course_name = request.POST.get('course_name', '') |
|
15 |
+ fields = request.POST.get('fields', []) |
|
16 |
+ |
|
17 |
+ course_field = CourseRegisterFieldInfo.objects.create(course_id=course_id, course_name=course_name, fields=fields) |
|
18 |
+ course_field.limit_scene_qrcode_url = get_course_field_limit_scene_qrcode_url(course_field.field_id) |
|
19 |
+ course_field.save() |
|
20 |
+ |
|
21 |
+ return response(data={ |
|
22 |
+ 'field_id': course_field.field_id, |
|
23 |
+ }) |
|
24 |
+ |
|
25 |
+ |
|
26 |
+def update_course_field(request): |
|
27 |
+ field_id = request.POST.get('field_id', '') |
|
28 |
+ course_id = request.POST.get('course_id', '') |
|
29 |
+ course_name = request.POST.get('course_name', '') |
|
30 |
+ fields = request.POST.get('fields', []) |
|
31 |
+ |
|
32 |
+ CourseRegisterFieldInfo.objects.filter(field_id=field_id).update(course_id=course_id, course_name=course_name, fields=fields) |
|
33 |
+ |
|
34 |
+ return response() |
|
35 |
+ |
|
36 |
+ |
|
37 |
+def get_course_field(request): |
|
38 |
+ field_id = request.POST.get('field_id', '') |
|
39 |
+ |
|
40 |
+ try: |
|
41 |
+ field = CourseRegisterFieldInfo.objects.get(field_id=field_id) |
|
42 |
+ except CourseRegisterFieldInfo.DoesNotExist: |
|
43 |
+ return response() |
|
44 |
+ |
|
45 |
+ return response(data={ |
|
46 |
+ 'field': field.data, |
|
47 |
+ }) |
|
48 |
+ |
|
49 |
+ |
|
50 |
+def get_course_field_list(request): |
|
51 |
+ page = request.POST.get('page', 1) |
|
52 |
+ num = request.POST.get('num', 20) |
|
53 |
+ |
|
54 |
+ fields = CourseRegisterFieldInfo.objects.filter(status=True) |
|
55 |
+ count = fields.count() |
|
56 |
+ fields, left = pagination(fields, page, num) |
|
57 |
+ fields = [f.data for f in fields] |
|
58 |
+ |
|
59 |
+ return response(data={ |
|
60 |
+ 'fields': fields, |
|
61 |
+ 'count': count, |
|
62 |
+ 'left': left, |
|
63 |
+ }) |
|
64 |
+ |
|
65 |
+ |
|
66 |
+def delete_course_field(request): |
|
67 |
+ field_id = request.POST.get('field_id', '') |
|
68 |
+ |
|
69 |
+ CourseRegisterFieldInfo.objects.filter(field_id=field_id).update(statue=False) |
|
70 |
+ |
|
71 |
+ return response() |
@@ -0,0 +1,53 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+ |
|
3 |
+from __future__ import division |
|
4 |
+ |
|
5 |
+from django_response import response |
|
6 |
+from paginator import pagination |
|
7 |
+ |
|
8 |
+from registration.models import CourseInfo, CourseRegisterFieldInfo, CourseRegisterInfo |
|
9 |
+ |
|
10 |
+ |
|
11 |
+def add_course(request): |
|
12 |
+ course_name = request.POST.get('course_name', '') |
|
13 |
+ |
|
14 |
+ course = CourseInfo.objects.create(course_name=course_name) |
|
15 |
+ |
|
16 |
+ return response(data={ |
|
17 |
+ 'course_id': course.course_id, |
|
18 |
+ }) |
|
19 |
+ |
|
20 |
+ |
|
21 |
+def update_course(request): |
|
22 |
+ course_id = request.POST.get('course_id', '') |
|
23 |
+ course_name = request.POST.get('course_name', '') |
|
24 |
+ |
|
25 |
+ CourseInfo.objects.filter(course_id=course_id).update(course_name=course_name) |
|
26 |
+ CourseRegisterFieldInfo.objects.filter(course_id=course_id).update(course_name=course_name) |
|
27 |
+ CourseRegisterInfo.objects.filter(course_id=course_id).update(course_name=course_name) |
|
28 |
+ |
|
29 |
+ return response() |
|
30 |
+ |
|
31 |
+ |
|
32 |
+def get_course_list(request): |
|
33 |
+ page = request.POST.get('page', 1) |
|
34 |
+ num = request.POST.get('num', 20) |
|
35 |
+ |
|
36 |
+ course = CourseInfo.objects.filter(status=True) |
|
37 |
+ count = course.count() |
|
38 |
+ course, left = pagination(course, page, num) |
|
39 |
+ course = [c.data for c in course] |
|
40 |
+ |
|
41 |
+ return response(data={ |
|
42 |
+ 'course': course, |
|
43 |
+ 'count': count, |
|
44 |
+ 'left': left, |
|
45 |
+ }) |
|
46 |
+ |
|
47 |
+ |
|
48 |
+def delete_course(request): |
|
49 |
+ course_id = request.POST.get('course_id', '') |
|
50 |
+ |
|
51 |
+ CourseInfo.objects.filter(course_id=course_id).update(statue=False) |
|
52 |
+ |
|
53 |
+ return response() |
@@ -2,14 +2,43 @@ |
||
2 | 2 |
|
3 | 3 |
from django.conf.urls import url |
4 | 4 |
|
5 |
-from api import oauth_views, wx_views |
|
5 |
+from api import branch_campus_admin_views, branch_campus_views, course_field_views, course_views, oauth_views, wx_views |
|
6 | 6 |
|
7 | 7 |
|
8 | 8 |
urlpatterns = [ |
9 |
+ url(r'^3rd/or$', oauth_views.oauth_redirect, name='3rd_or'), |
|
10 |
+ url(r'^3rd/oauth_redirect$', oauth_views.oauth_redirect, name='3rd_oauth_redirect'), |
|
11 |
+] |
|
12 |
+ |
|
13 |
+urlpatterns += [ |
|
9 | 14 |
url(r'^get_limit_scene_qrcode_url$', wx_views.get_limit_scene_qrcode_url, name='get_limit_scene_qrcode_url'), |
10 | 15 |
] |
11 | 16 |
|
12 | 17 |
urlpatterns += [ |
13 |
- url(r'^3rd/or$', oauth_views.oauth_redirect, name='3rd_or'), |
|
14 |
- url(r'^3rd/oauth_redirect$', oauth_views.oauth_redirect, name='3rd_oauth_redirect'), |
|
18 |
+ url(r'^branch/campus/add$', branch_campus_views.add_branch_campus, name='add_branch_campus'), |
|
19 |
+ url(r'^branch/campus/update$', branch_campus_views.update_branch_campus, name='update_branch_campus'), |
|
20 |
+ url(r'^branch/campus/list$', branch_campus_views.get_branch_campus_list, name='get_branch_campus_list'), |
|
21 |
+ url(r'^branch/campus/delete$', branch_campus_views.delete_branch_campus, name='delete_branch_campus'), |
|
22 |
+] |
|
23 |
+ |
|
24 |
+urlpatterns += [ |
|
25 |
+ url(r'^branch/campus/admin/add$', branch_campus_admin_views.add_branch_campus_admin, name='add_branch_campus_admin'), |
|
26 |
+ url(r'^branch/campus/update$', branch_campus_admin_views.update_branch_campus_admin, name='update_branch_campus_admin'), |
|
27 |
+ url(r'^branch/campus/list$', branch_campus_admin_views.get_branch_campus_admin_list, name='get_branch_campus_admin_list'), |
|
28 |
+ url(r'^branch/campus/delete$', branch_campus_admin_views.delete_branch_campus_admin, name='delete_branch_campus_admin'), |
|
29 |
+] |
|
30 |
+ |
|
31 |
+urlpatterns += [ |
|
32 |
+ url(r'^course/add$', course_views.add_course, name='add_course'), |
|
33 |
+ url(r'^course/update$', course_views.update_course, name='update_course'), |
|
34 |
+ url(r'^course/list$', course_views.get_course_list, name='get_course_list'), |
|
35 |
+ url(r'^course/delete$', course_views.delete_course, name='delete_course'), |
|
36 |
+] |
|
37 |
+ |
|
38 |
+urlpatterns += [ |
|
39 |
+ url(r'^course/field/add$', course_field_views.add_course_field, name='add_course_field'), |
|
40 |
+ url(r'^course/field/update$', course_field_views.update_course_field, name='update_course_field'), |
|
41 |
+ url(r'^course/field/get$', course_field_views.get_course_field, name='get_course_field'), |
|
42 |
+ url(r'^course/field/list$', course_field_views.get_course_field_list, name='get_course_field_list'), |
|
43 |
+ url(r'^course/field/delete$', course_field_views.delete_course_field, name='delete_course_field'), |
|
15 | 44 |
] |
@@ -28,3 +28,18 @@ def get_limit_scene_qrcode_url(request): |
||
28 | 28 |
return response(data={ |
29 | 29 |
'qrurl': qrurl, |
30 | 30 |
}) |
31 |
+ |
|
32 |
+ |
|
33 |
+def get_course_field_limit_scene_qrcode_url(scene): |
|
34 |
+ if not scene: |
|
35 |
+ return '' |
|
36 |
+ |
|
37 |
+ JSAPI = settings.WECHAT.get('JSAPI', {}) |
|
38 |
+ |
|
39 |
+ appid = JSAPI.get('appID', '') |
|
40 |
+ appsecret = JSAPI.get('appsecret', '') |
|
41 |
+ |
|
42 |
+ qrinfo = qrcode_limit_str_scene(scene_str=scene, appid=appid, secret=appsecret, storage=RedisStorage(r)) |
|
43 |
+ qrurl = qrcode_url(qrinfo.get('ticket')) |
|
44 |
+ |
|
45 |
+ return qrurl |
@@ -2,7 +2,8 @@ |
||
2 | 2 |
|
3 | 3 |
from django.contrib import admin |
4 | 4 |
|
5 |
-from registration.models import BranchCampusInfo, BranchCampusAdministratorInfo, CourseInfo, CourseRegisterFieldInfo, CourseRegisterInfo |
|
5 |
+from registration.models import (BranchCampusAdministratorInfo, BranchCampusInfo, CourseInfo, CourseRegisterFieldInfo, |
|
6 |
+ CourseRegisterInfo) |
|
6 | 7 |
|
7 | 8 |
|
8 | 9 |
class BranchCampusInfoAdmin(admin.ModelAdmin): |
@@ -0,0 +1,18 @@ |
||
1 |
+# Generated by Django 2.2.17 on 2021-02-03 23:13 |
|
2 |
+ |
|
3 |
+from django.db import migrations, models |
|
4 |
+ |
|
5 |
+ |
|
6 |
+class Migration(migrations.Migration): |
|
7 |
+ |
|
8 |
+ dependencies = [ |
|
9 |
+ ('registration', '0001_initial'), |
|
10 |
+ ] |
|
11 |
+ |
|
12 |
+ operations = [ |
|
13 |
+ migrations.AddField( |
|
14 |
+ model_name='courseregisterfieldinfo', |
|
15 |
+ name='limit_scene_qrcode_url', |
|
16 |
+ field=models.CharField(blank=True, help_text='字段二维码', max_length=255, null=True, verbose_name='limit_scene_qrcode_url'), |
|
17 |
+ ), |
|
18 |
+ ] |
@@ -18,6 +18,13 @@ class BranchCampusInfo(BaseModelMixin): |
||
18 | 18 |
def __unicode__(self): |
19 | 19 |
return '%d' % self.pk |
20 | 20 |
|
21 |
+ @property |
|
22 |
+ def data(self): |
|
23 |
+ return { |
|
24 |
+ 'campus_id': self.campus_id, |
|
25 |
+ 'campus_name': self.campus_name, |
|
26 |
+ } |
|
27 |
+ |
|
21 | 28 |
|
22 | 29 |
class BranchCampusAdministratorInfo(BaseModelMixin): |
23 | 30 |
PENDING = 0 |
@@ -49,6 +56,17 @@ class BranchCampusAdministratorInfo(BaseModelMixin): |
||
49 | 56 |
def __unicode__(self): |
50 | 57 |
return '%d' % self.pk |
51 | 58 |
|
59 |
+ @property |
|
60 |
+ def data(self): |
|
61 |
+ return { |
|
62 |
+ 'admin_id': self.admin_id, |
|
63 |
+ 'campus_id': self.campus_id, |
|
64 |
+ 'campus_name': self.campus_name, |
|
65 |
+ 'name': self.name, |
|
66 |
+ 'phone': self.phone, |
|
67 |
+ 'user_status': self.user_status, |
|
68 |
+ } |
|
69 |
+ |
|
52 | 70 |
|
53 | 71 |
class CourseInfo(BaseModelMixin): |
54 | 72 |
course_id = ShortUUIDField(_('course_id'), max_length=32, blank=True, null=True, help_text='课程唯一标识', db_index=True, unique=True) |
@@ -62,6 +80,13 @@ class CourseInfo(BaseModelMixin): |
||
62 | 80 |
def __unicode__(self): |
63 | 81 |
return '%d' % self.pk |
64 | 82 |
|
83 |
+ @property |
|
84 |
+ def data(self): |
|
85 |
+ return { |
|
86 |
+ 'course_id': self.course_id, |
|
87 |
+ 'course_name': self.course_name, |
|
88 |
+ } |
|
89 |
+ |
|
65 | 90 |
|
66 | 91 |
class CourseRegisterFieldInfo(BaseModelMixin): |
67 | 92 |
field_id = ShortUUIDField(_('field_id'), max_length=32, blank=True, null=True, help_text='字段唯一标识', db_index=True, unique=True) |
@@ -76,6 +101,8 @@ class CourseRegisterFieldInfo(BaseModelMixin): |
||
76 | 101 |
# } |
77 | 102 |
fields = JSONField(_('fields'), default=[], blank=True, null=True, help_text='字段列表') |
78 | 103 |
|
104 |
+ limit_scene_qrcode_url = models.CharField(_('limit_scene_qrcode_url'), max_length=255, blank=True, null=True, help_text='字段二维码') |
|
105 |
+ |
|
79 | 106 |
class Meta: |
80 | 107 |
verbose_name = _('课程报名字段信息') |
81 | 108 |
verbose_name_plural = _('课程报名字段信息') |
@@ -83,6 +110,15 @@ class CourseRegisterFieldInfo(BaseModelMixin): |
||
83 | 110 |
def __unicode__(self): |
84 | 111 |
return '%d' % self.pk |
85 | 112 |
|
113 |
+ @property |
|
114 |
+ def data(self): |
|
115 |
+ return { |
|
116 |
+ 'field_id': self.field_id, |
|
117 |
+ 'course_id': self.course_id, |
|
118 |
+ 'course_name': self.course_name, |
|
119 |
+ 'fields': self.fields, |
|
120 |
+ } |
|
121 |
+ |
|
86 | 122 |
|
87 | 123 |
class CourseRegisterInfo(BaseModelMixin): |
88 | 124 |
field_id = models.CharField(_('field_id'), max_length=32, blank=True, null=True, help_text='字段唯一标识', db_index=True) |
@@ -1,3 +1,4 @@ |
||
1 | 1 |
from django.test import TestCase |
2 | 2 |
|
3 |
+ |
|
3 | 4 |
# Create your tests here. |
@@ -1,3 +1,4 @@ |
||
1 | 1 |
from django.shortcuts import render |
2 | 2 |
|
3 |
+ |
|
3 | 4 |
# Create your views here. |
@@ -10,6 +10,7 @@ django-redis-connector==1.0.3 |
||
10 | 10 |
django-response==1.1.1 |
11 | 11 |
django-rlog==1.0.7 |
12 | 12 |
django-short-url==1.1.4 |
13 |
+django-shortuuidfield==0.1.3 |
|
13 | 14 |
django-six==1.0.4 |
14 | 15 |
django-uniapi==1.0.10 |
15 | 16 |
django-we==1.5.5 |