码迷,mamicode.com
首页 > Web开发 > 详细

Django项目:CRM(客户关系管理系统)--71--61PerfectCRM实现CRM学生上传作业

时间:2018-05-06 20:04:36      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:modify   http 状态码   ram   uil   col   安全   ica   详情   topic   

技术分享图片

 

技术分享图片
 1 # student_urls.py
 2 # ————————60PerfectCRM实现CRM学生上课记录————————
 3 from django.conf.urls import url
 4 from bpm.student import student_views
 5 
 6 urlpatterns = [
 7     url(r^my_course/$, student_views.my_course, name=my_course),   #学生报名的课程
 8     url(r^studyrecords/(\d+)/$, student_views.studyrecords, name=studyrecords),  # #学生上课记录列表
 9 
10     # ————————61PerfectCRM实现CRM学生上传作业————————
11     url(r^homework_detail/(\d+)/(\d+)/$, student_views.homework_detail, name=homework_detail),  # 作业详情
12     # ————————61PerfectCRM实现CRM学生上传作业————————
13 ]
14 # ————————60PerfectCRM实现CRM学生上课记录————————
# student_urls.py

 

 

技术分享图片

 

技术分享图片

 

技术分享图片
 1 # student_views.py
 2 # ————————60PerfectCRM实现CRM学生上课记录————————
 3 from django.shortcuts import render
 4 from crm import models
 5 
 6 #学生报名的课程
 7 def my_course(request):
 8     return  render(request, bpm_student/my_course.html, locals())
 9 
10 #学生上课记录列表
11 def studyrecords(request,enroll_obj_id):
12     enroll_obj=models.Enrollment.objects.get(id=enroll_obj_id)
13     return render(request,bpm_student/studyrecords.html,locals())
14 
15 # ————————60PerfectCRM实现CRM学生上课记录————————
16 
17 # ————————61PerfectCRM实现CRM学生上传作业————————
18 from django.shortcuts import HttpResponse #页面返回
19 from PerfectCRM import settings #配置
20 import os,json,time
21 from  django.contrib.auth.decorators import login_required #登陆才能访问
22 #作业详情
23 @login_required#登陆才能访问
24 def homework_detail(request,enroll_obj_id,studyrecord_id):
25     studyrecord_obj=models.StudyRecord.objects.get(id=studyrecord_id)#取学习记录 对象
26     enroll_obj=models.Enrollment.objects.get(id=enroll_obj_id)#取班级对象
27     #               作业根目录    班级ID      上课记录ID               学习记录ID
28     homework_path="{base_dir}/{class_id}/{course_record_id}/{studyercord_id}/".format(
29         base_dir=settings.HOMEWORK_DATA, #静态配置文件
30         class_id=studyrecord_obj.student.enrolled_class_id,#09学习纪录#学生名字#所报班级ID号
31         course_record_id=studyrecord_obj.course_record_id,#09学习纪录#每节课上课纪录表
32         studyercord_id=studyrecord_obj.id##09学习纪录
33     )
34     print(homework_path路径:,studyrecord_obj.student.enrolled_class_id,studyrecord_obj.course_record_id,studyrecord_obj.id)
35 
36     if not os.path.isdir(homework_path):#没有目录 #isdir返回true,如果路径名是指现有的目录。
37         os.makedirs(homework_path,exist_ok=True)#创建目录  
38 
39 
40 
41     if request.method=="POST":#上传
42         print("POST",request.POST)
43         for k,v in request.FILES.items():#上传的文件
44             with open(%s/%s%(homework_path,v.name),wb) as f:#chunk 写入文件
45                 for chunk in v.chunks(): #循环写文件
46                     f.write(chunk)
47 
48     file_lists=[]#已经上传的文件列表
49     for file_name in os.listdir(homework_path):
50         f_path=%s/%s%(homework_path,file_name)#文件名字
51         modify_time =time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime(os.stat(f_path).st_mtime))#文件上传时间
52         file_lists.append([file_name,os.stat(f_path).st_size,modify_time])#添加到文件列表#文件名字#文件大小文件上传时间
53 
54     if request.method=="POST":
55         ret=False
56         data=request.POST.get(data) #ajax
57         if data:#如果有删除动作
58             del_f_path="%s/%s"%(homework_path,data)#文件路径
59             print(删除文件,路径:,del_f_path)
60             os.remove(del_f_path) #删除
61             ret=True
62             return HttpResponse(json.dumps(ret))#ret=False
63         print("删除POST",request.POST)
64         return HttpResponse(json.dumps({"status":0,mag:"上传完成!",file_lists:file_lists}))#上传文件返回
65     return render(request,bpm_student/homework_detail.html,locals())
66 # ————————61PerfectCRM实现CRM学生上传作业————————
# student_views.py

 

技术分享图片

 

技术分享图片
  1 # settings.py
  2 
  3 """
  4 Django settings for PerfectCRM project.
  5 
  6 Generated by ‘django-admin startproject‘ using Django 2.0.3.
  7 
  8 For more information on this file, see
  9 https://docs.djangoproject.com/en/2.0/topics/settings/
 10 
 11 For the full list of settings and their values, see
 12 https://docs.djangoproject.com/en/2.0/ref/settings/
 13 """
 14 
 15 import os
 16 
 17 # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
 18 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 19 
 20 
 21 # Quick-start development settings - unsuitable for production
 22 # See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/
 23 
 24 # SECURITY WARNING: keep the secret key used in production secret!
 25 SECRET_KEY = atkhzsd7emv4_okn@ynhji)p)qbpuvhq+a7@yx5=chaa0$l_br
 26 
 27 # SECURITY WARNING: don‘t run with debug turned on in production!
 28 DEBUG = True
 29 
 30 ALLOWED_HOSTS = []
 31 
 32 
 33 # Application definition
 34 
 35 INSTALLED_APPS = [
 36     django.contrib.admin,
 37     django.contrib.auth,
 38     django.contrib.contenttypes,
 39     django.contrib.sessions,
 40     django.contrib.messages,
 41     django.contrib.staticfiles,
 42     
 43 # ————————04PerfectCRM实现King_admin注册功能————————
 44     # ‘crm.apps.CrmConfig‘,
 45     crm,
 46 # ————————04PerfectCRM实现King_admin注册功能————————
 47 
 48 # ————————02PerfectCRM创建ADMIN页面————————
 49     king_admin,
 50 # ————————02PerfectCRM创建ADMIN页面————————
 51     # ————————38PerfectCRM实现全局账号登录注销————————
 52     gbacc,
 53     # ————————38PerfectCRM实现全局账号登录注销————————
 54 
 55     # ————————48PerfectCRM实现CRM客户报名流程学生合同————————
 56     bpm,
 57     # ————————48PerfectCRM实现CRM客户报名流程学生合同————————
 58 
 59 ]
 60 
 61 MIDDLEWARE = [
 62     django.middleware.security.SecurityMiddleware,
 63     django.contrib.sessions.middleware.SessionMiddleware,
 64     django.middleware.common.CommonMiddleware,
 65     django.middleware.csrf.CsrfViewMiddleware,
 66     django.contrib.auth.middleware.AuthenticationMiddleware,
 67     django.contrib.messages.middleware.MessageMiddleware,
 68     django.middleware.clickjacking.XFrameOptionsMiddleware,
 69 ]
 70 
 71 ROOT_URLCONF = PerfectCRM.urls
 72 
 73 TEMPLATES = [
 74     {
 75         BACKEND: django.template.backends.django.DjangoTemplates,
 76 # ————————02PerfectCRM创建ADMIN页面————————
 77         DIRS: [os.path.join(BASE_DIR, templates),
 78                   os.path.join(BASE_DIR, king_admin/king_templates),
 79 
 80 # ————————03PerfectCRM创建基本数据————————
 81                   os.path.join(BASE_DIR, DBadd/DBadd_templates),
 82 # ————————03PerfectCRM创建基本数据————————
 83                 # ————————38PerfectCRM实现全局账号登录注销————————
 84                   os.path.join(BASE_DIR, gbacc/gbacc_templates),
 85                 # ————————38PerfectCRM实现全局账号登录注销————————
 86 
 87                 # ————————47PerfectCRM实现CRM客户报名流程————————
 88                 os.path.join(BASE_DIR, bpm/bpm_templates), ]
 89                 # ————————47PerfectCRM实现CRM客户报名流程————————
 90 
 91 ,
 92 # ————————02PerfectCRM创建ADMIN页面————————
 93         APP_DIRS: True,
 94         OPTIONS: {
 95             context_processors: [
 96                 django.template.context_processors.debug,
 97                 django.template.context_processors.request,
 98                 django.contrib.auth.context_processors.auth,
 99                 django.contrib.messages.context_processors.messages,
100             ],
101         },
102     },
103 ]
104 
105 WSGI_APPLICATION = PerfectCRM.wsgi.application
106 
107 
108 # Database
109 # https://docs.djangoproject.com/en/2.0/ref/settings/#databases
110 
111 DATABASES = {
112     default: {
113         ENGINE: django.db.backends.sqlite3,
114         NAME: os.path.join(BASE_DIR, db.sqlite3),
115     }
116 }
117 
118 
119 # Password validation
120 # https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators
121 
122 AUTH_PASSWORD_VALIDATORS = [
123     {
124         NAME: django.contrib.auth.password_validation.UserAttributeSimilarityValidator,
125     },
126     {
127         NAME: django.contrib.auth.password_validation.MinimumLengthValidator,
128     },
129     {
130         NAME: django.contrib.auth.password_validation.CommonPasswordValidator,
131     },
132     {
133         NAME: django.contrib.auth.password_validation.NumericPasswordValidator,
134     },
135 ]
136 
137 
138 # Internationalization
139 # https://docs.djangoproject.com/en/2.0/topics/i18n/
140 
141 # ————————01PerfectCRM基本配置ADMIN————————
142 #LANGUAGE_CODE = ‘en-us‘
143 
144 #英文转中文方法
145 LANGUAGE_CODE = zh-Hans
146 # ————————01PerfectCRM基本配置ADMIN————————
147 
148 TIME_ZONE = UTC
149 
150 USE_I18N = True
151 
152 USE_L10N = True
153 
154 USE_TZ = True
155 
156 
157 # Static files (CSS, JavaScript, Images)
158 # https://docs.djangoproject.com/en/2.0/howto/static-files/
159 
160 STATIC_URL = /static/
161 
162 # ————————01PerfectCRM基本配置ADMIN————————
163 STATICFILES_DIRS = [os.path.join(BASE_DIR,king_admin/static),
164 # ————————01PerfectCRM基本配置ADMIN————————
165                     # ————————38PerfectCRM实现全局账号登录注销————————
166                     os.path.join(BASE_DIR, gbacc/static),
167                     # ————————38PerfectCRM实现全局账号登录注销————————
168                     
169                     # ————————47PerfectCRM实现CRM客户报名流程————————
170                     os.path.join(BASE_DIR, bpm/static),]
171                     # ————————47PerfectCRM实现CRM客户报名流程————————
172 
173 
174 # ————————34PerfectCRM实现CRM自定义用户————————
175 AUTH_USER_MODEL = crm.UserProfile#使用自定的admin 表单
176 # ————————34PerfectCRM实现CRM自定义用户————————
177 
178 
179 
180 # ————————44PerfectCRM实现账号快速注册登陆————————
181 # send e-mail
182 EMAIL_BACKEND = django.core.mail.backends.smtp.EmailBackend  #email后端
183 EMAIL_USE_TLS = False   #是否使用TLS安全传输协议
184 EMAIL_USE_SSL = True    #是否使用SSL加密,qq企业邮箱要求使用
185 EMAIL_HOST = smtp.sina.cn   #发送邮件的邮箱 的 SMTP服务器       #根据情况重新配置
186 EMAIL_PORT = 465                 #发件箱的SMTP服务器端口 #一般不需要修改465
187 EMAIL_HOST_USER = perfectcrm@sina.cn    #发送邮件的邮箱账号     #根据情况重新配置  #perfectcrm@sina.cn   pydjango@sina.cn
188 EMAIL_HOST_PASSWORD = admin123456         #发送邮件的邮箱密码    #根据情况重新配置
189 
190 # ————————44PerfectCRM实现账号快速注册登陆————————
191 
192 
193 # ————————46PerfectCRM实现登陆后页面才能访问————————
194 LOGIN_URL = /gbacc/gbacc_login/# login_url 配置      #默认 /accounts/login/  #注意: / (绝对路径)
195 # ————————46PerfectCRM实现登陆后页面才能访问————————
196 
197 # ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片————————
198 ENROLLED_DATA=%s/bpm/static/enrolled_data%BASE_DIR#证件上传 # 上传路径
199 # ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片————————
200 
201 # ————————61PerfectCRM实现CRM学生上传作业————————
202 HOMEWORK_DATA=%s/bpm/static/homeworks%BASE_DIR  #作业上传 # 上传路径
203 # ————————61PerfectCRM实现CRM学生上传作业————————
# settings.py

 

 

技术分享图片

 

技术分享图片

 

技术分享图片技术分享图片技术分享图片

 

技术分享图片

技术分享图片
  1 {#homework_detail.html#}
  2 {## ————————61PerfectCRM实现CRM学生上传作业————————#}
  3 {% extends ‘bpm_master/bpm_sample.html‘ %}
  4 {% load bpm_tags %}
  5 {% block right-container-content %} {#自定义内容开始 右边页面内容#}
  6     <div class="panel-default">
  7         <div class="panel-body">
  8             <h4>当前用户: {{ request.user }} | 学员名字:{{ request.user.stu_account.name }} |
  9                 学员QQ:{{ request.user.stu_account }}</h4>
 10             <div class="row" style="margin-bottom: 20px">
 11                 <ol class="breadcrumb">
 12                     <li><a href="/bpm/my_course/">我的课程</a></li>
 13                     <li><a href="/bpm/studyrecords/{{ enroll_obj.id }}/">{{ enroll_obj.enrolled_class }}</a></li>
 14                     <li><a href="#">第:{{ studyrecord_obj.course_record.day_num }}节</a></li>
 15                 </ol>
 16             </div>
 17 
 18             <h4>作业标题:{{ studyrecord_obj.course_record.homework_title }}</h4>
 19             <h4>作业详情:
 20                 <pre>{{ studyrecord_obj.course_record.homework_content }}</pre>
 21             </h4>
 22             <h4>老师评语:
 23                 <pre>{{ studyrecord_obj.memo }}</pre>
 24             </h4>
 25             <h4>本节成绩: {{ studyrecord_obj.score }} </h4>
 26 
 27 
 28 
 29             <hr>
 30             <h4>已经上传的文件: <a id="refresh">刷新</a></h4>
 31             <div class="row">
 32                 <div class="col-xs-9 col-md-6">
 33                     {% for file in file_lists %}
 34                         <div class="right">
 35                             {% for foo in file %}
 36                                 <a>{{ foo }}</a>  |
 37                             {% endfor %}
 38                             <span class="img_f hide">{{ file.0 }}</span>
 39                             <a class="del_img">删除</a>
 40                         </div>
 41                         <br>
 42                     {% endfor %}
 43                 </div>
 44             </div>
 45             <h4>请上传作业</h4>
 46             <form action="{{ request.path }}" method="post" id="dropz" enctype="multipart/form-data"
 47                   class="form-group dropzone">{% csrf_token %}
 48                 <input type="hidden" name="file_id" ng-model="file_id" id="file_id"/>
 49             </form>
 50         </div>
 51     </div>
 52 {% endblock %}
 53 
 54 
 55 
 56 {% block js %}
 57     <script>
 58         //页面加载时绑定按钮点击事件
 59         $("#refresh").click(function(){
 60             window.location.reload();//刷新当前页面.
 61         });
 62 
 63         $(.del_img).click(function () {
 64             s = $(this);
 65             texts = s.parent().children("span").text();
 66             {#        alert(texts);#}
 67             $.ajax({
 68                 url: "{{ requset.path }}",
 69                 type: "post",
 70                 data: {"data": texts},
 71                 headers: {X-CSRFtoken: $.cookie(csrftoken)},
 72                 success: function (arg) {
 73                     if (arg) {
 74                         alert(删除成功!);
 75                         s.parent(div).addClass(hide); {#  #添加样式#隐藏#}
 76                     }
 77                 }
 78             })
 79         });
 80 
 81         Dropzone.autoDiscover = false;
 82         appElement = document.querySelector(div .inmodal);
 83         myDropzone = new Dropzone("#dropz", {
 84             url: "{{ request.path }}",//文件提交地址
 85             method: "post",  //也可用put
 86             paramName: "file", //默认为file
 87             maxFiles: 1,//一次性上传的文件数量上限
 88             maxFilesize: 2, //文件大小,单位:MB
 89             acceptedFiles: ".zip,.7z", //上传的类型
 90             addRemoveLinks: true,
 91             parallelUploads: 1,//一次上传的文件数量
 92             //previewsContainer:"#preview",//上传图片的预览窗口
 93             dictDefaultMessage: 请将作业压缩打包后上传,
 94             dictMaxFilesExceeded: "您最多只能上传1个文件!",
 95             dictResponseError: 文件上传失败!,
 96             dictInvalidFileType: "文件类型只能是*.zip,*.7z。",
 97             dictFallbackMessage: "浏览器不受支持",
 98             dictFileTooBig: "文件过大上传文件最大支持.",
 99             dictRemoveLinks: "删除",
100             dictCancelUpload: "取消",
101             init: function () {
102                 this.on("addedfile", function (file) {
103                     //上传文件时触发的事件
104                     document.querySelector(div .dz-default).style.display = none;
105                 });
106                 this.on("success", function (file, data) {
107                     //上传成功触发的事件
108                     console.log(ok);
109                     // angular.element(appElement).scope().file_id = data.data.id;
110                 });
111 
112                 this.on("error", function (file, data) {
113                     //上传失败触发的事件
114                     console.log(fail);
115                     var message = ‘‘;
116                     //lavarel框架有一个表单验证,
117                     //对于ajax请求,JSON 响应会发送一个 422 HTTP 状态码,
118                     //对应file.accepted的值是false,在这里捕捉表单验证的错误提示
119                     if (file.accepted) {
120                         $.each(data, function (key, val) {
121                             message = message + val[0] + ;;
122                         });
123                         //控制器层面的错误提示,file.accepted = true的时候;
124                         alert(message);
125                     }
126                 });
127                 this.on("removedfile", function (file) {
128                     //删除文件时触发的方法
129                     //var file_id = angular.element(appElement).scope().file_id;
130                     {#                    if (file_id) {#}
131                     {#                        $.post(/admin/del/ + file_id, {_method: DELETE}, function (data) {#}
132                     {#                            console.log(删除结果: + data.message);#}
133                     {#                        })#}
134                     {#                    }#}
135                     // angular.element(appElement).scope().file_id = 0;
136                     document.querySelector(div .dz-default).style.display = block;
137                 });
138             }
139         });
140     </script>
141 {% endblock %}
142 {## ————————61PerfectCRM实现CRM学生上传作业————————#}
{#homework_detail.html#}

 

 

技术分享图片

 

技术分享图片
 1 {#studyrecords.html#}
 2 {## ————————60PerfectCRM实现CRM学生上课记录————————#}
 3 {% extends ‘bpm_master/bpm_sample.html‘ %}
 4 {% load bpm_tags %}
 5 {% block right-container-content %} {#自定义内容开始 右边页面内容#}
 6     <div class="panel-default">
 7         <div class="panel-body">
 8             <h4>当前用户: {{ request.user }} | 学员名字:{{ request.user.stu_account.name }} |  学员QQ:{{ request.user.stu_account }}</h4>
 9             <ol class="breadcrumb">
10                 <li><a href="/bpm/my_course/">我的课程</a></li>
11                 <li><a href="/bpm/studyrecords/{{ enroll_obj.id }}/">{{ enroll_obj.enrolled_class }}</a></li>
12             </ol>
13             <table class="table table-striped table-responsive">
14                 <thead>
15                 <tr>
16                     <th>课程名称</th>
17                     <th>课程节次</th>
18                     <th>上课日期</th>
19                     <th>签到状态</th>
20                     <th>我的成绩</th>
21                     <th>是否有作业</th>
22                     <th>作业标题</th>
23                     {## ————————61PerfectCRM实现CRM学生上传作业————————#}
24                     <th>作业详情</th>
25                     {## ————————61PerfectCRM实现CRM学生上传作业————————#}
26                 </tr>
27                 </thead>
28                 <tbody>
29                 {% for studyrecord in enroll_obj.studyrecord_set.all %}
30                     <tr>
31                         <td>{{ studyrecord.course_record }}</td>
32                         <td>{{ studyrecord.course_record.day_num }}</td>
33                         <td>{{ studyrecord.course_record.date }}</td>
34                         <td>{{ studyrecord.get_attendance_display }}</td>
35                         <td>{{ studyrecord.get_score_display }}</td>
36                         <td>{{ studyrecord.course_record.has_homework }}</td>
37                         <td>{{ studyrecord.course_record.homework_title }}</td>
38                         {## ————————61PerfectCRM实现CRM学生上传作业————————#}
39                         <td><a href="{% url ‘homework_detail‘ enroll_obj.id studyrecord.id %}">作业管理</a></td>
40                         {## ————————61PerfectCRM实现CRM学生上传作业————————#}
41                     </tr>
42                 {% endfor %}
43                 </tbody>
44             </table>
45         </div>
46     </div>
47 {% endblock %}
48 {## ————————60PerfectCRM实现CRM学生上课记录————————#}
{#studyrecords.html#}

 

技术分享图片

 

技术分享图片

 

 

技术分享图片

 

技术分享图片

 

 

 

老师评语:作业做的很好,继续保持!!!加油!

 

技术分享图片

 

 

本节作业标题: 八荣八耻

本节作业要求:写这个教程的初衷是为了整理一下自己的python技术,算是总结!



技术分享图片

 

Django项目:CRM(客户关系管理系统)--71--61PerfectCRM实现CRM学生上传作业

标签:modify   http 状态码   ram   uil   col   安全   ica   详情   topic   

原文地址:https://www.cnblogs.com/ujq3/p/8999149.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!