Django项目:CRM(客户关系管理系统)--71--61PerfectCRM实现CRM学生上传作业
Posted 颜言
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django项目:CRM(客户关系管理系统)--71--61PerfectCRM实现CRM学生上传作业相关的知识,希望对你有一定的参考价值。
![](https://image.cha138.com/20210605/f20233ce6c0e4d72abfefa0faac933c1.jpg)
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\'^student_course/$\', student_views.student_course, name=\'student_course\'), #学生报名的课程 8 url(r\'^studyrecords/(\\d+)/$\', student_views.studyrecords, name=\'studyrecords\'), # #学生上课记录列表StudyRecord 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学生上课记录————————
![](https://image.cha138.com/20210605/f20233ce6c0e4d72abfefa0faac933c1.jpg)
1 # student_views.py 2 # ————————60PerfectCRM实现CRM学生上课记录———————— 3 from django.shortcuts import render #页面返回 4 from crm import models #数据库 5 from django.contrib.auth.decorators import login_required # 登陆后页面才能访问 6 #学生报名的课程 7 @login_required # 登陆后页面才能访问 8 def student_course(request): 9 enrollmentlist=request.user.stu_account.enrollment_set.all()#根据账号表关联的ID获取06学员报名信息表 10 return render(request, \'bpm_student/student_course.html\', locals()) 11 12 #学生上课记录列表 13 @login_required # 登陆后页面才能访问 14 def studyrecords(request,enroll_obj_id): 15 enroll_obj=models.Enrollment.objects.get(id=enroll_obj_id)#根据ID获取06学员报名信息表 16 studyrecordlist=enroll_obj.studyrecord_set.all()#根据06学员报名信息表的ID获取09学习纪录 17 return render(request,\'bpm_student/studyrecords.html\',locals()) 18 19 # ————————60PerfectCRM实现CRM学生上课记录———————— 20 21 # ————————61PerfectCRM实现CRM学生上传作业———————— 22 from django.contrib.auth.decorators import login_required #登陆才能访问 23 from PerfectCRM import settings #静态配置文件 #作业上传 # 上传路径 24 import os,json,time #系统操作 25 from django.shortcuts import HttpResponse #页面返回 26 from django.shortcuts import redirect #页面返回 27 #作业详情 28 @login_required#登陆才能访问 29 def homework_detail(request,enroll_obj_id,studyrecord_id): 30 studyrecord_obj=models.StudyRecord.objects.get(id=studyrecord_id)#取学习记录 对象 31 enroll_obj=models.Enrollment.objects.get(id=enroll_obj_id)#取班级对象 32 33 # 作业根目录 班级ID 上课记录ID 学习记录ID 34 homework_path="{base_dir}/{class_id}/{course_record_id}/{studyercord_id}/".format( 35 base_dir=settings.HOMEWORK_DATA, #静态配置文件 36 class_id=studyrecord_obj.student.enrolled_class_id,#09学习纪录#学生名字#所报班级ID号 37 course_record_id=studyrecord_obj.course_record_id,#09学习纪录#每节课上课纪录表 38 studyercord_id=studyrecord_obj.id##09学习纪录 39 ) 40 print(\'homework_path路径:\',studyrecord_obj.student.enrolled_class_id,studyrecord_obj.course_record_id,studyrecord_obj.id) 41 42 if os.path.exists(homework_path):#判断目录是否存在 43 file_lists = [] # 已经上传的文件列表 44 for file_name in os.listdir( homework_path ): 45 f_path = \'%s/%s\' % (homework_path, file_name) # 文件名字 46 modify_time = time.strftime( "%Y-%m-%d %H:%M:%S", time.gmtime( os.stat( f_path ).st_mtime ) ) # 文件上传时间 47 file_lists.append( [file_name, os.stat( f_path ).st_size, modify_time] ) # 添加到文件列表#文件名字#文件大小文件上传时间 48 49 50 if request.method=="POST":#上传 51 ret=False 52 data=request.POST.get(\'data\') #ajax 53 if data:#如果有删除动作 54 del_f_path="%s/%s"%(homework_path,data)#文件路径 55 print(\'删除文件,路径:\',del_f_path) 56 os.remove(del_f_path) #删除 57 ret=True 58 return HttpResponse(json.dumps(ret))#ret=False 59 if request.is_ajax(): # ajax上传图片 #异步提交 60 print("POST",request.POST) 61 if not os.path.isdir( homework_path ): # 没有目录 #isdir返回true,如果路径名是指现有的目录。 62 os.makedirs( homework_path, exist_ok=True ) # 创建目录 63 for k,v in request.FILES.items():#上传的文件 64 with open(\'%s/%s\'%(homework_path,v.name),\'wb\') as f:#chunk 写入文件 65 for chunk in v.chunks(): #循环写文件 66 f.write(chunk) 67 return HttpResponse( json.dumps( {"status": 0, \'mag\': "上传完成!", \'file_lists\': file_lists} ) ) # 上传文件返回 68 69 if request.method=="POST":#上传 70 link = request.POST.get( \'link\' ) # 让页面POST提交的值,在页面GET后仍然存在显示 71 if link: 72 homework_link=models.StudyRecord.objects.filter( id=studyrecord_id ).update(homework_link=link) 73 return redirect(\'/bpm/homework_detail/%s/%s/\' %(enroll_obj_id,studyrecord_id) )#跳转到enrollment_rejection 74 return render(request,\'bpm_student/homework_detail.html\',locals()) 75 # ————————61PerfectCRM实现CRM学生上传作业————————
![](https://image.cha138.com/20210605/f20233ce6c0e4d72abfefa0faac933c1.jpg)
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 202 # ————————61PerfectCRM实现CRM学生上传作业———————— 203 HOMEWORK_DATA=\'%s/bpm/static/homeworks\'%BASE_DIR #作业上传 # 上传路径 204 # ————————61PerfectCRM实现CRM学生上传作业————————
![](https://image.cha138.com/20210605/f20233ce6c0e4d72abfefa0faac933c1.jpg)
1 #models.py 2 3 # ————————01PerfectCRM基本配置ADMIN———————— 4 5 from django.db import models 6 # Create your models here. 7 8 """ 9 #运行 Terminal 10 # 生成 数据表 11 # python manage.py makemigrations 12 # 数据表 迁移 13 # python manage.py migrate 14 """ 15 16 """01校区表""" 17 class Branch(models.Model): 18 name = models.CharField(max_length=128,unique=True) #校区名#CharField作用是保存文本,定长的变量类型 19 addr = models.CharField(max_length=128) #地址 20 def __str__(self):#__str__()是Python的一个“魔幻”方法,这个方法定义以上是关于Django项目:CRM(客户关系管理系统)--71--61PerfectCRM实现CRM学生上传作业的主要内容,如果未能解决你的问题,请参考以下文章
Django项目:CRM(客户关系管理系统)--66--56PerfectCRM实现CRM客户报名缴费链接
Django项目:CRM(客户关系管理系统)--65--55PerfectCRM实现CRM客户报名状态颜色变化
Django项目:CRM(客户关系管理系统)--45--36PerfectCRM实现CRM用户登陆注销02