一、创建项目:
django-admin startproject student_info_management
二、创建app:
python manage.py startapp education_source_management
三、编写代码:
settings.py文件设置时区编码:
LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai'
student_info_management/education_source_management/models.py
# -*- coding: utf-8 -*- from __future__ import unicode_literals import json from django.db import models from .ttypes import GENDER class StuClass(models.Model): name = models.CharField(verbose_name="课程名称", max_length=256, null=False, blank=False) teacher = models.ForeignKey('Teacher', verbose_name="任课教师", null=False, blank=False) room = models.CharField(verbose_name="授课地点", max_length=128, null=False, blank=False) def __unicode__(self): return self.name class Meta: db_table = "stu_class" verbose_name = u"课程管理" class Teacher(models.Model): name = models.CharField(verbose_name="教师姓名", max_length=32, null=False, blank=False) birth = models.DateTimeField(verbose_name="出生日期") gender = models.SmallIntegerField(verbose_name="性别", choices=GENDER) def __unicode__(self): return self.name class Meta: db_table = "teacher" verbose_name = u"教师基本信息管理" class Student(models.Model): name = models.CharField(verbose_name="学生姓名", max_length=32, null=False, blank=False) birth = models.DateTimeField(verbose_name="出生日期") gender = models.SmallIntegerField(verbose_name="性别", choices=GENDER) number = models.CharField(verbose_name="学生编号", max_length=32, null=False, blank=False) admission = models.DateTimeField(verbose_name="入学时间") password = models.CharField(verbose_name="密码", max_length=32, null=True) def __unicode__(self): return self.name def to_json(self): student_info = { "name": self.name, "number": self.number, "birth": str(self.birth)[:10], "gender": self.gender, "admission": str(self.admission)[:10], "score": [] } for score in self.score.all(): student_info["score"].append(score.to_dict()) return json.dumps(student_info, ensure_ascii=False) class Meta: db_table = "student" verbose_name = u"学生基本信息管理" class Score(models.Model): class_name = models.ForeignKey(StuClass, verbose_name="课程名称", null=False, default=False) student_name = models.ForeignKey(Student, related_name="score", verbose_name="学生姓名", null=False, default=False) score = models.IntegerField(verbose_name="分数", default=0, blank=False, null=False) def __unicode__(self): return "学生成绩" def to_dict(self): score = { "class_name": self.class_name.name, "score": self.score } return score class Meta: db_table = "score" verbose_name = u"学生成绩管理"student_info_management/education_source_management/admin.py
# -*- coding: utf-8 -*- from __future__ import unicode_literals import hashlib import json from redis import Redis from django.contrib import admin from .models import Teacher, Student, StuClass, Score from student_info_management.settings import REDIS_EPG_DB class TeacherAdmin(admin.ModelAdmin): list_display = ['name', 'birth', 'gender'] fields = ['name', 'birth', 'gender'] search_fields = ['name', 'gender'] list_filter = ['gender'] class StudentAdmin(admin.ModelAdmin): list_display = ['name', 'birth', 'gender', 'number', 'admission'] fields = ['name', 'birth', 'gender', 'number', 'admission', 'password'] search_fields = ['name', 'gender', 'number'] list_filter = ['gender'] actions = ['publish_student_info'] def save_model(self, request, obj, form, change): try: if 'password' in form.changed_data: md5 = hashlib.md5() md5.update(obj.password) md5_pwd = md5.hexdigest() obj.password = md5_pwd except Exception, e: print e super(StudentAdmin, self).save_model(request, obj, form, change) def publish_student_info(self, request, queryset): redis = Redis(**REDIS_EPG_DB) students_dict = redis.get("students-dict") students_dict = json.loads(students_dict) if students_dict else {} for stu in queryset: student = Student.objects.get(id=stu.id) pwd = student.number + student.password md5 = hashlib.md5() md5.update(pwd) token = md5.hexdigest() students_dict[student.number] = { "pwd": student.password, "token": token } redis.set("stu-"+token, student.to_json()) redis.set("students-dict", json.dumps(students_dict, ensure_ascii=False)) self.message_user(request, "学生信息发布成功") publish_student_info.short_description = '发布选中的学生信息' class StuClassAdmin(admin.ModelAdmin): list_display = ['name', 'teacher', 'room'] fields = ['name', 'teacher', 'room'] search_fields = ['name', 'teacher__name'] list_filter = ['teacher'] class ScoreAdmin(admin.ModelAdmin): list_display = ['class_name', 'student_name', 'score'] fields = ['class_name', 'student_name', 'score'] search_fields = ['class_name__name', 'student_name__name'] admin.site.register(Teacher, TeacherAdmin) admin.site.register(Student, StudentAdmin) admin.site.register(StuClass, StuClassAdmin) admin.site.register(Score, ScoreAdmin)
运行程序:
python manage.py runserver 0.0.0.0:8000
效果图如下:
下载链接:点击此处
Django+Karlooper+ios重构学校的学生成绩管理系统(三)服务端rest接口开发