Django入门 快速实现学生注册以及显示学生信息(连接mysql)

 


一、创建django项目以及app

1.在pycharm终端下面按照你的路径创建或者cmd创建项目 

 

Django入门 快速实现学生注册以及显示学生信息(连接mysql)_第1张图片

 2.创建app

dd5ac64e7a3945b098dc3130a46f8288.png

创建好之后stu项目下 setting文件里添加app

Django入门 快速实现学生注册以及显示学生信息(连接mysql)_第2张图片

二、配置路由以及views

 

 1.配置主路由(url) 以及根路由(url)  在app里面创建urls.py文件

 主路由文件以及根路由文件:

from django.contrib import admin
from django.urls import path, include
from django.conf.urls import url
urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'student/', include('stuapp.urls'))
]

2.这里同时在stuapp文件夹下创建views.py(来进行逻辑的处理)同时将views文件导入

from django.conf.urls import url
from . import views

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

3.在views文件中渲染页面 首先在stuapp下创建templates文件夹 再文件夹下创建register.html文件(templates是django项目setting下默认存放页面的文件夹名)

代码如下:

from django.shortcuts import render
def student_register(request):
    if request.method == 'GET':
        return render(request, 'register.html')
    else:
        retrun None

OK 这里我们可以通过127.0.0.1:8000/student  访问到这个register.html 页面

下面是register代码:(记得在表单中添加{% csrf_token %}不然会报错  为了防止跨域攻击)




    
    注册



{% csrf_token %}

Python   Java   Html5  

终端输入:python manage.py runserver启动服务器 访问127.0.0.1:8000/student

效果图如下:

Django入门 快速实现学生注册以及显示学生信息(连接mysql)_第3张图片

三、连接mysql数据库 创建模型类对数据库进行操作

1.进入项目下setting.py文件 修改database(数据库里面得先创建stu数据库)

Django入门 快速实现学生注册以及显示学生信息(连接mysql)_第4张图片

 2.创建模型类(这里创建三张表 学生 班级 课程 学生和班级一对一关系 学生和课程多对多关系)

代码如下:

from django.db import models
# Create your models here.
#数据库表之间的关系 班级表 课程表 学生表(学生与班级关系一对多:外键参照班级表 学生与课程关系多对多:manytomanyfiled(Course))
#关系多对多 会创建新的表存放 两个表的autofiled id字段  来表示多对多关系
class Clazz(models.Model):
    cno = models.AutoField(primary_key=True)
    cname = models.CharField(max_length=30)
    def __str__(self):
        return u'班级:%s', self.cname
class Course(models.Model):
    cour_no = models.AutoField(primary_key=True)
    cour_name = models.CharField(max_length=30)
    def __str__(self):
        return u'课程:%s', self.cour_name
class Student(models.Model):
    sno = models.AutoField(primary_key=True)
    sname = models.CharField(max_length=30)
    sclass = models.ForeignKey(Clazz, on_delete=models.CASCADE)
    cour = models.ManyToManyField(Course)
    def __str__(self):
        return u'姓名:%s', self.sname

3.将页面数据插入数据库 

views代码如下:

from django.shortcuts import render
from .models import *
from django.http import HttpResponse
# Create your views here.
def student_register(request):
    if request.method == 'GET':
        return render(request, 'register.html')
    else:
        # 接收页面参数 姓名 班级 选课 没有返回空
        sname = request.POST.get('sname', '')
        sclass = request.POST.get('cname', '')
        courname = request.POST.getlist('courname', [])
        # 将数据写入数据库
        flag = registerStu(sname, sclass, *courname)
        if flag:
            return HttpResponse("注册成功")
        return HttpResponse("注册失败")
# 插入数据到数据库
def registerStu(sname, cname, *courname):
    # 插入班级表数据
    cls = getclass(cname)
    # 插入课程数据
    courlist = getcourList(*courname)
    stu = Student.objects.create(sname=sname, sclass=cls)
    # 插入中间表数据
    stu.cour.add(*courlist)
    return True
# 通过班级名获取班级对象 有则获取没有则创建
#bug:
def getclass(cname):
    try:
        cls = Clazz.objects.get(cname=cname)
    except Clazz.DoesNotExist:
        cls = Clazz.objects.create(cname=cname)
    return cls
# 获取课程列表
def getcourList(*courname):
    courList = []
    for i in courname:
        try:
            c = Course.objects.get(cour_name=i)
        except Course.DoesNotExist:
            c = Course.objects.create(cour_name=i)
        courList.append(c)
    return courList

4.效果展示:

Django入门 快速实现学生注册以及显示学生信息(连接mysql)_第5张图片

Django入门 快速实现学生注册以及显示学生信息(连接mysql)_第6张图片

mysql数据库:

0496edd92f21455cb33afe0340bf3c91.png

ab593c0cfab7460bb0e24d6bad427f29.png

 2fca2242a867454d993bf1929b090873.png

 ec88aa1975a14ab395112f84e2ac3c98.png

OK 这里注册成功了 下面显示学生信息:

四、显示所有班级信息 以及班级详情信息 

 1.同样添加根路由 创建html文件 在views下做逻辑判断以及渲染页面

Django入门 快速实现学生注册以及显示学生信息(连接mysql)_第7张图片

Django入门 快速实现学生注册以及显示学生信息(连接mysql)_第8张图片

2.代码显示:

  showall.html




    
    显示所有信息



    {% for c in cls %}
    
    {% endfor %}
编号 班级名称 操作
{{forloop.counter}} {{c.cname}} 详情

 stulist.html




    
    显示详情



    {% for stu in stus %}
    
    {% endfor %}
编号 姓名 班级名称 课程名称
{{forloop.counter}} {{stu.sname}} {{stu.sclass.cname}} {% for cou in stu.cour.all %} {{cou.cour_name}} {% endfor %}

   views代码:

# 显示所有班级信息
def showall_stu(request):
    # 查询班级表中所有数据
    cls = Clazz.objects.all()
    return render(request, 'showall.html', {'cls': cls})
#显示当前班级下的所有学生信息
def getstu(request):
    cno = request.GET.get('cno', '')
    no = int(cno)
    #根据班级编号查询学生信息
    stus = Clazz.objects.get(cno=no).student_set.all()
    return render(request, 'stulist.html', {'stus': stus})

 3.效果展示:

Django入门 快速实现学生注册以及显示学生信息(连接mysql)_第9张图片

 Django入门 快速实现学生注册以及显示学生信息(连接mysql)_第10张图片

 

 

你可能感兴趣的:(python,开发语言,django)