博客信息

Python Django 模型层(学生注册-关联关系综合案例)

发布时间:『 2019-08-08 21:03』  博客类别:Python  阅读(743)

实现步骤:

1、创建工程

2、创建应用stu

3、主路由配置子路由

4、子路由跳转视图处理方法

5、创建模型类

6、生成迁移文件

7、更改数据源mysql

8、执行迁移文件

9、Models.py定义处理映射关系通用添加方法

10、完成路由视图方法

11、前台html编写

12、测试

 

 

相关代码

 

终端执行命令

python manage.py startapp stu

python manage.py makemigrations stu

pip install MySQL-python-1.2.5-cp27-none-win_amd64.whl

python manage.py migrate

 

主路由

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^stu/', include('stu.urls'))
]


子路由

import views

urlpatterns = [
    url(r'^$', views.add_view)
]


Settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'python',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'mybatis_ssm',
        'PASSWORD': 'xiaoli'
    }
}


models.py

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

from django.db import models


# Create your models here.
class Clazz(models.Model):
    cno = models.AutoField(primary_key=True)
    cname = models.CharField(max_length=30)

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


class Course(models.Model):
    course_no = models.AutoField(primary_key=True)
    course_name = models.CharField(max_length=30)

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


class Student(models.Model):
    sno = models.AutoField(primary_key=True)
    sname = models.CharField(max_length=30)
    cls = models.ForeignKey(Clazz)
    cour = models.ManyToManyField(Course)

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


# 根据班级名称获取班级对象
def getCls(cname):
    try:
        cls = Clazz.objects.get(cname=cname)
    except Clazz.DoesNotExist:
        cls = Clazz.objects.create(cname=cname)
    return cls


# 获取课程对象列表
def getCourseList(*coursenames):
    courseList = []

    for cn in coursenames:
        try:
            c = Course.objects.get(course_name=cn)
        except Course.DoesNotExist:
            c = Course.objects.create(course_name=cn)
        courseList.append(c)

    return courseList


def registerStu(sname, cname, *coursenames):
    # 1.获取班级对象
    cls = getCls(cname)
    # 2.获取课程对象列表
    courseList = getCourseList(*coursenames)
    # 3.插入学生表数据
    try:
        stu = Student.objects.get(sname=sname)
    except Student.DoesNotExist:
        stu = Student.objects.create(sname=sname, cls=cls)
    # 4.插入中间表数据
    stu.cour.add(*courseList)

    return True


Views.py

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

from django.http import HttpResponse
from django.shortcuts import render


# Create your views here.
from stu.models import *

def add_view(request):
    if request.method == 'GET':
        return render(request, 'register.html')
    else:
        # 接收请求参数
        sname = request.POST.get('sname', '')
        cname = request.POST.get('clsname', '')
        coursenames = request.POST.getlist('coursename', [])

        # 将数据注册到数据库
        flag = registerStu(sname, cname, *coursenames)
        if flag:
            return HttpResponse('注册成功!')

        return HttpResponse('注册失败!')


register.html 


结果


小李飞刀_Python


小李飞刀_Python


小李飞刀_Python



从截图中可以看出:

学生表里添加了泰迪

班级表中添加了T224

课程表中添加了JavaPython

中间表中有了学生与课程的关联数据

并且泰迪这个学生已经关联了班级表中的id



over......


关键字:     Python       Django       关联关系  

备案号:湘ICP备19000029号

Copyright © 2018-2019 javaxl晓码阁 版权所有