• 2019.03.22 学生注册表


    需求

    1. 学生注册

    2. 查看所有班级信息

    3. 显示某班学生情况

    实现步骤

    1. 创建模型类(班级,学生,课程)

    2. 配置URL

    3. 创建视图函数

    4. 创建模板页面

    1.创建Django项目

    2.setting 配置应用

    3.修改sql连接数据库

    4.生成迁移文件,执行迁移文件生成数据表。

    5.配置路由,urls.py中还有要写的东西

    6.此时简要的就完成了,可以简单的运行了

    7.做了一些操作请求from urls的重写,处理

    统一层级直接引入就可以。

    24.25查询信息

    这个是直接访问然后直接呈现出来的数据

    还环环相扣

    26.自定义Manager(查询)

    这个是一个类,封装了许多数据库的方法属性。objects就是Manager的实例化,

    因此当不满足方法的时候可以重写。

    重写all()_get_queryset()

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals

    from django.db import models
    from django.db.models.manager import Manager

    class CustomManager(Manager):
    #重写Student.objects.all()
    # def all(self):
    # return Manager.all(self).filter(isdelete=False)


    def get_queryset(self):
    return Manager.get_queryset(self).filter(isdelete=False)

    class DeletedManager(models.Manager):
    def get_queryset(self):
    return Manager.get_queryset(self).filter(isdelete=True)

    # Create your models here.
    class Student(models.Model):
    sname=models.CharField(max_length=30,unique=True)
    isdelete=models.BooleanField(default=False)

    objects=CustomManager()

    delStus=DeletedManager()

    class Meta:
    db_table='t_student'

    def __unicode__(self):
    return u'Student:%s'%self.sname

    当我删除数据库时,只是会变成逻辑删除,isdelete为True 1

    这就是会在数据库中表示删除了

    不对,是他在上面修改了。为什么要重写方法呢?

    重写删除

    单个对象删除

    • Student.objects.first().delete()

    • Student.delete() #重写的是这个的父类delete()方法

    批量删除

    • Student.objects.filter().delete()

    • Student.objects.filter().all() #重写_clone()方法

    • Student.objects.all() #重写get_queryset()方法 查询所有记录

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals

    from django.db import models
    from django.db.models import QuerySet
    from django.db.models.manager import Manager



    class CustomManager(Manager):

      #查询出需要删除的记录
      def get_queryset(self):
          row_queryset = Manager.get_queryset(self).filter(isdelete=False)
          return row_queryset

      #重写父类filter方法
      def filter(self, *args, **kwargs):
          #调用父类的filter方法
          dellist = Manager.filter(self, *args, **kwargs)

          #声明闭包方法进行逻辑删除
          def delete1(delqueryset):
              for delq in delqueryset:
                  delq.isdelete=True
                  delq.save()

          import new
          dellist.delete = new.instancemethod(delete1,dellist,QuerySet)

          return dellist

    Student.objects.filter().delete()


    # Create your models here.
    class Student(models.Model):
      sname=models.CharField(max_length=30,unique=True)
      isdelete=models.BooleanField(default=False)


      objects=CustomManager()
      # 重写Student.delete()
      #实现单条记录的逻辑删除
      # def delete(self, using=None, keep_parents=False):
      #     self.isdelete=True
      #     self.save()



      class Meta:
          db_table='t_student'

      def __unicode__(self):
          return u'Student:%s'%self.sname




    闭包:


      在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。


    重写create()

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals

    from django.db import models
    from django.db.models.manager import Manager

    class CustomManager(Manager):
    # 重写方法Student.objects.create()
    # 实现Student.objects.create(sname='lisi',clazz='B208Python',course=('HTML5','UI','Java','Python'))
    def create(self, **kwargs):
    clsname=kwargs.get('clazz')
    clazz = self.__get_cls(clsname)
    kwargs['clazz']=clazz

    course=kwargs.pop('course')

    stu = Manager.create(self,**kwargs)
    stu.save()

    stu.course.add(*self.__get_course(*course))

    return stu


    def __get_cls(self, clsname):
    try:
    cls = Clazz.objects.get(cname=clsname)
    except Clazz.DoesNotExist:
    cls = Clazz.objects.create(cname=clsname)

    return cls


    def __get_course(self,*course):
    row_course=[]
    for cour in course:
    try:
    r_cour = Course.objects.get(course_name=cour)
    except Course.DoesNotExist:
    r_cour = Course.objects.create(course_name=cour)

    row_course.append(r_cour)
    return row_course

    class Clazz(models.Model):
    cname=models.CharField(max_length=30,unique=True)

    class Meta:
    db_table='t_clazz'

    def __unicode__(self):
    return u'Clazz:%s'%self.cname

    class Course(models.Model):
    course_name=models.CharField(max_length=30,unique=True)

    class Meta:
    db_table='t_course'

    def __unicode__(self):
    return u'Course:%s'%self.course_name


    # Create your models here.
    class Student(models.Model):
    sname=models.CharField(max_length=30,unique=True)
    clazz=models.ForeignKey(Clazz)
    course=models.ManyToManyField(Course)


    objects=CustomManager()

    class Meta:
    db_table='t_student'

    def __unicode__(self):
    return u'Student:%s'%self.sname

     
  • 相关阅读:
    spark视频-Spark Streaming实时计算和流处理
    spark视频-Spark把云计算大数据速度提高100倍以上
    spark视频-Spark on Docker深入揭秘
    spark视频-Spark as a Service
    spark视频-Spark on Yarn
    MyEclipse Web 项目导入 Eclipse 中需要改的文件
    【解决】小米M1刷机教程(卡刷)
    【解决】笔记本发射WiFi
    【解决】U盘装系统(Win7/Win8)& 装双系统
    【解决】Internet访问看似正常(无叹号受限)却打不开网页
  • 原文地址:https://www.cnblogs.com/Py-king/p/10576517.html
Copyright © 2020-2023  润新知