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

 


一、创建django项目以及app

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

 

dfa0a51c6b05482397623a15a74e04e8.png

 2.创建app

dd5ac64e7a3945b098dc3130a46f8288.png

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

d784798dd7564df896a6d644c3cbc5fb.png

二、配置路由以及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 %}不然会报错  为了防止跨域攻击)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>

<form action="/student/" method="post">
    {% csrf_token %}
    <p>
        <label for="sn">姓名:</label><input type="text" name="sname" id="sn"/>
    </p>
    <p>
        <label for="sc">所属班级:</label>
        <select name="cname" id="sc">
            <option value="计算机科学与技术一班">计算机科学与技术一班</option>
            <option value="计算机科学与技术二班">计算机科学与技术二班</option>
            <option value="软件一班">软件一班</option>
            <option value="软件二班">软件二班</option>
        </select>
    </p>
    <p>
        <label>选课</label>
        <input type="checkbox" name="courname" value="Python"/>Python &emsp;
        <input type="checkbox" name="courname" value="Java"/>Java &emsp;
        <input type="checkbox" name="courname" value="Html5"/>Html5 &emsp;
    </p>
    <p>
        <input type="submit" value="注册"/>
    </p>
</form>
</body>
</html>

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

效果图如下:

d301112b44dc4991a4fee8f9f5e1ee20.png

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

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

996eacd39e984a7b98f072314a685b71.png

 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.效果展示:

8ced9ee0c66b43bea1d8ac10fbee6fea.png

fa3b449870dc4b7f8cf15784c17a52d9.png

mysql数据库:

0496edd92f21455cb33afe0340bf3c91.png

ab593c0cfab7460bb0e24d6bad427f29.png

 2fca2242a867454d993bf1929b090873.png

 ec88aa1975a14ab395112f84e2ac3c98.png

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

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

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

ffc1793219814a5289134c22b8eaa7de.png

e65d99b0e99143c3af0e863897d56d86.png

2.代码显示:

  showall.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>显示所有信息</title>
</head>
<body>
<table border="1" cellspacing="0" width="500px">
    <tr>
      <th>编号</th>
      <th>班级名称</th>
      <th>操作</th>
    </tr>
    {% for c in cls %}
    <tr>
      <!--  forloop.counter模板语法for的一种用法 表示当前循环的次数   -->
      <td>{{forloop.counter}}</td>
      <td>{{c.cname}}</td>
      <td>
          <a href="/student/getstu/?cno={{ c.cno }}">详情</a>
      </td>
    </tr>
    {% endfor %}
</table>
</body>
</html>

 stulist.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>显示详情</title>
</head>
<body>
<table border="1" cellspacing="0" width="500px">
    <tr>
      <th>编号</th>
      <th>姓名</th>
      <th>班级名称</th>
      <th>课程名称</th>
    </tr>
    {% for stu in stus %}
    <tr>
      <!--  forloop.counter模板语法for的一种用法 表示当前循环的次数   -->
      <td>{{forloop.counter}}</td>
      <td>{{stu.sname}}</td>
      <td>{{stu.sclass.cname}}</td>
      <td>
          {% for cou in stu.cour.all %}
          {{cou.cour_name}}
          {% endfor %}
      </td>
    </tr>
    {% endfor %}
</table>
</body>
</html>

   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.效果展示:

b1c40a5331cf49c6953f00a8800ec7ae.png

 72dff36f51a143bbba0af66ae0fb937f.png

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值