目錄
項目框架:
urls.py
views.py
modules.py
class_data.html
add_and_modify.html
add_stu.html
筆記:
繼承語法
模板繼承總結:
班級添加
add_and_modify.html
修改添加公用一個頁面即可
views.py
班級修改
views.py
url.py
班級刪除
views.py
學員信息
學員展示
注意:兩張表在同一個頁面展示,路由只能用一個
choices:get_字段名_display(),獲取對應的值,在html當中,不寫括號
班級:外檢關聯,通過data找到外鍵字段,然后找表當中的字段
學員信息添加
add_stu.html
項目框架:
urls.py
--路由映射
views.py
--app的視圖函數
from django.shortcuts import render,redirect
from demo_one import models# Create your views here.
def index(request):return render(request, "index/index.html")# 展示班級以及學員
def class_data(request):data_list = models.Grade.objects.all()data_stu_list = models.Student.objects.all()# for data in data_stu_list:# print(data.get_gender_display())content = {"data_list": data_list,"data_stu_list": data_stu_list}return render(request, "class_data/class_data.html", content)def add_data(request):if request.method == "GET":title = "添加信息"return render(request, "class_data/add_and_modify.html",{"title":title})grade = request.POST.get("grade")models.Grade.objects.create(grade=grade)return redirect("/class/data/")# 刪除班級
def del_data(request):nid = request.GET.get("nid")models.Grade.objects.filter(id=nid).delete()return redirect("/class/data/")# 修改班級信息
def modify_data(request, nid):if request.method == "GET":title = "修改信息"grade = models.Grade.objects.filter(id=nid).first()return render(request, "class_data/add_and_modify.html", {"title":title, "grade": grade})# 根據輸入框的name值,獲取輸入框輸入的內容grade = request.POST.get("grade")models.Grade.objects.filter(id=nid).update(grade=grade)return redirect("/class/data/")# 學生信息展示,使用class_data# 添加學員信息
def add_stu(request):if request.method == "GET":content = {"gender_choice": models.Student.gender_choice,"grade_list": models.Grade.objects.all()}return render(request, "stu_data/add_stu.html",content)name = request.POST.get("name")age = request.POST.get("age")gender = request.POST.get("gender")tel = request.POST.get("tel")stu_id = request.POST.get("stu_id")class_ = request.POST.get("class_")class_time = request.POST.get("class_time")print(name, gender, class_)models.Student.objects.create(name=name, age=age, gender=gender,tel=tel,stu_id=stu_id,stu_grade_id=class_,class_time=class_time)return redirect("/class/data/")
modules.py
--數據庫的字段
from django.db import models# Create your models here.class Grade(models.Model):grade = models.CharField(verbose_name="年級班級", max_length=12)# class_ = models.CharField(verbose_name="班級", max_length=12)class Student(models.Model):name = models.CharField(verbose_name="姓名", max_length=64)age = models.IntegerField(verbose_name="年齡")gender_choice = ((1, "男"),(2, "女"))gender = models.SmallIntegerField(verbose_name="性別", choices=gender_choice)tel = models.IntegerField(verbose_name="電話")stu_id = models.IntegerField(verbose_name="學號")class_time = models.DateField(verbose_name="報名時間",null=True,blank=True)# 外鍵約束stu_grade = models.ForeignKey(to="Grade", to_field="id", null=True, blank=True, on_delete=models.SET_NULL)
class_data.html
{% extends 'index/index.html' %}
{% load static %}{% block content %}<div class="container">{# 班級表 #}<div class="col-xs-3"><div style="margin-bottom: 10px"><a class="btn btn-success" href="/add/data/"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span>添加信息</a></div><div class="panel panel-warning"><div class="panel-heading"><h3 class="panel-title">班級表</h3></div><div class="panel-body"><table class="table"><thead><tr><th>id</th><th>班級</th><th>操作</th></tr></thead><tbody>{% for data in data_list %}<tr><th>{{ data.id }}</th><td>{{ data.grade }}</td><td><a href="/modify/{{ data.id }}/data/"><span style="color: green" class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a><a href="/del/data?nid={{ data.id }}"><span style="color: red" class="glyphicon glyphicon-trash" aria-hidden="true"></span></a></td></tr>{% endfor %}</tbody></table></div></div></div>{# 學員表 #}<div class="col-xs-9"><div style="margin-bottom: 10px"><a class="btn btn-success" href="/add/stu/"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span>添加學員</a></div><div class="panel panel-warning"><div class="panel-heading"><h3 class="panel-title">學生表</h3></div><div class="panel-body"><table class="table"><thead><tr><th>id</th><th>姓名</th><th>年紀</th><th>性別</th><th>電話</th><th>學號</th><th>班級</th><th>報名時間</th><th>操作</th></tr></thead><tbody>{% for data in data_stu_list %}<tr><th>{{ data.id }}</th><td>{{ data.name }}</td><td>{{ data.age }}</td><td>{{ data.get_gender_display }}</td><td>{{ data.tel }}</td><td>{{ data.stu_id }}</td><td>{{ data.stu_grade.grade }}</td><td>{{ data.class_time }}</td><td><a href="#"><span style="color: green" class="glyphicon glyphicon-pencil" aria-hidden="true"></span></a><a href="#"><span style="color: red" class="glyphicon glyphicon-trash" aria-hidden="true"></span></a></td></tr>{% endfor %}</tbody></table></div></div></div></div>
{% endblock %}
add_and_modify.html
{% extends 'index/index.html' %}{% block content %}<div class="container"><form method="post">{% csrf_token %}<div class="form-group"><label for="exampleInputEmail1">{{ title }}</label><input type="text" class="form-control" placeholder="{{ grade.grade }}" name="grade"><button type="submit" class="btn btn-success">提交</button></div></form></div>
{% endblock %}
add_stu.html
{% extends "index/index.html" %}
{% load static %}{% block css %}<link rel="stylesheet" href="{% static 'css/layui.css' %}">
{% endblock %}{% block content %}<div class="container"><form method="post">{% csrf_token %}<div class="form-group"><label for="exampleInputEmail1">添加姓名</label><input type="text" class="form-control" name="name"><label for="exampleInputEmail1">添加年紀</label><input type="text" class="form-control" name="age"><label for="exampleInputEmail1">添加性別</label><select type="text" class="form-control" name="gender">{% for item in gender_choice %}<option value="{{ item.0 }}">{{ item.1 }}</option>{% endfor %}</select><label for="exampleInputEmail1">添加電話</label><input type="text" class="form-control" name="tel"><label for="exampleInputEmail1">添加學號</label><input type="text" class="form-control" name="stu_id"><label for="exampleInputEmail1">添加班級</label><select type="text" class="form-control" name="class_">{% for item in grade_list %}<option value="{{ item.id }}">{{ item.grade }}</option>{% endfor %}</select><label for="exampleInputEmail1">添加時間</label><input id="ID-laydate-demo" type="text" class="form-control" name="class_time"><button type="submit" class="btn btn-success">提交</button></div></form></div>
{% endblock %}{% block js %}<script src="{% static 'js/layui.js' %}"></script><script>layui.use(function () {var laydate = layui.laydate;// 渲染laydate.render({elem: '#ID-laydate-demo'});});</script>
{% endblock %}
筆記:
-
繼承語法
{% extends 'index/index.html' %} 相當與將index.html頁面上的信息全部復制過來 ? 模板當中占位 {% block content %} {% endblock %} ? 其他文件當中 {% block content %} 新的內容 {% endblock %} ?
模板繼承總結:
1、繼承頁面,相當于復制所有的代碼(包括引入的css,js等)
2、繼承頁面之后,如果需要增加新的內容,需要在模板當中添加block{占位}
* #### class_data.html~~~html{% extends 'index/index.html' %}添加新的css{% block css %}<style>h1 {color: red;}</style>{% endblock %}添加內容{% block content %}<div class="container"><div class="panel panel-warning"><div class="panel-heading"><h3 class="panel-title">班級表</h3></div><div class="panel-body"><table class="table"><caption>Optional table caption.</caption><thead><tr><th>#</th><th>First Name</th><th>Last Name</th><th>Username</th></tr></thead><tbody><tr><th scope="row">1</th><td>Mark</td><td>Otto</td><td>@mdo</td></tr><tr><th scope="row">2</th><td>Jacob</td><td>Thornton</td><td>@fat</td></tr><tr><th scope="row">3</th><td>Larry</td><td>the Bird</td><td>@twitter</td></tr></tbody></table></div></div></div>{% endblock %}添加新的js代碼{% block js %}{% endblock %}
-
班級添加
-
add_and_modify.html
-
修改添加公用一個頁面即可
{% extends 'index/index.html' %} ? {% block content %}<div class="container"><form method="post">{% csrf_token %}<div class="form-group"><label for="exampleInputEmail1">{{ title }}</label><input type="text" class="form-control" placeholder="{{ grade.grade }}" name="grade"><button type="submit" class="btn btn-success">提交</button></div></form></div> {% endblock %}
-
views.py
def add_data(request):if request.method == "GET":return render(request, "class_data/add_data.html") ?grade = request.POST.get("grade")models.Grade.objects.create(grade=grade)return redirect("/class/data/")
班級修改
-
views.py
# 修改班級信息 def modify_data(request, nid):if request.method == "GET":title = "修改信息"grade = models.Grade.objects.filter(id=nid).first()return render(request, "class_data/add_and_modify.html", {"title":title, "grade": grade})# 根據輸入框的name值,獲取輸入框輸入的內容grade = request.POST.get("grade")models.Grade.objects.filter(id=nid).update(grade=grade)return redirect("/class/data/")
-
url.py
path('modify/<int:nid>/data/', views.modify_data),
班級刪除
-
views.py
# 刪除班級 def del_data(request):nid = request.GET.get("nid")models.Grade.objects.filter(id=nid).delete()return redirect("/class/data/")
學員信息
學員展示
-
注意:兩張表在同一個頁面展示,路由只能用一個
-
choices:
get_字段名_display()
,獲取對應的值,在html當中,不寫括號 -
班級:外檢關聯,通過data找到外鍵字段,然后找表當中的字段
學員信息添加
-
add_stu.html
{% extends "index/index.html" %} ? {% block content %}<div class="container"><form method="post">{% csrf_token %}<div class="form-group"><label for="exampleInputEmail1">添加姓名</label><input type="text" class="form-control" name="name"> ?<label for="exampleInputEmail1">添加年紀</label><input type="text" class="form-control" name="age"> ?<label for="exampleInputEmail1">添加性別</label><select type="text" class="form-control" name="gender">{% for item in gender_choice %}<option value="{{ item.0 }}">{{ item.1 }}</option>{% endfor %}</select> ?<label for="exampleInputEmail1">添加電話</label><input type="text" class="form-control" name="tel"> ?<label for="exampleInputEmail1">添加學號</label><input type="text" class="form-control" name="stu_id"> ?<label for="exampleInputEmail1">添加班級</label><select type="text" class="form-control" name="class_">{% for item in grade_list %}<option value="{{ item.id }}">{{ item.grade }}</option>{% endfor %}</select> ?<label for="exampleInputEmail1">添加時間</label><input type="text" class="form-control" name="class_time"> ?<button type="submit" class="btn btn-success">提交</button></div></form></div> {% endblock %}
性別:gender_choice 元組類型:通過遍歷,拿到數字以及對應的男女
班級:grade_list 班級信息在另一張表里面,所以接受另一張表的grade