Django+Karlooper+ios重构学校的学生成绩管理系统(二)学生信息管理系统

一、创建项目:

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接口开发


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值