2-Django項目進階--繼續學生管理系統

目錄

項目框架:

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


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18269.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18269.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18269.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

boost asio異步服務器(2)實現偽閉包延長連接生命周期

閉包 在函數內部實現一個子函數&#xff0c;子函數的作用域內能訪問外部函數的局部變量。閉包就是能夠讀取其他函數內部變量。但是由于閉包會使得函數中的變量都被保存在內存中&#xff0c;內存消耗很大&#xff0c;所以不能濫用閉包&#xff0c;否則會造成程的性能問題&#x…

構造器--5.28

不用一個個屬性賦值的方法&#xff1a; 知道了類的創建與使用&#xff0c;但是每次賦值都是一個個調用&#xff0c;我們可以用構造器使得方法簡單一點&#xff0c;不用一個個調用屬性賦值&#xff0c;直接傳參就OK了&#xff1b; 點擊類名然后ctrl可以查看構造器 public yanxi…

C++完成特色旅游管理信息系統

背景&#xff1a; 繼C完成淄博燒烤節管理系統后&#xff0c;我們來到了特色旅游管理信息系統的代碼編寫&#xff0c;歷史鏈接點下方。 C完成淄博燒烤節管理系統_淄博燒烤總賬管理系統的-CSDN博客 問題描述&#xff1a; 為了更好的管理各個服務小組&#xff0c;開發相應的管…

民國漫畫雜志《時代漫畫》第30期.PDF

時代漫畫30.PDF: https://url03.ctfile.com/f/1779803-1248635414-87c8c8?p9586 (訪問密碼: 9586) 《時代漫畫》的雜志在1934年誕生了&#xff0c;截止1937年6月戰爭來臨被迫停刊共發行了39期。 ps: 資源來源網絡!

webpack打包配置項

webpack打包配置項 在config.js 中 module.exports {publicPath: process.env.NODE_ENV production ? / : /, //靜態資源目錄outputDir: dist, //打包名稱assetsDir: static,//靜態資源&#xff0c;目錄devServer: {port: port,open: false,overlay: {warnings: false,erro…

SpringBoot自動裝配源碼

自動裝配&#xff1a; 實際上就是如何將Bean自動化裝載到IOC容器中管理&#xff0c;Springboot 的自動裝配時通過SPI 的方式來實現的 SPI&#xff1a;SpringBoot 定義的一套接口規范&#xff0c;這套規范規定&#xff1a;Springboot 在啟動時會掃描外部引用 jar 包中的META-IN…

css 漸變色邊框

效果圖&#xff1a; 代碼&#xff1a; <style>:root{--br-radius: 12px;}.list{position: relative;}.list_tle{margin-top: 15px;margin-bottom: 5px;}.item{position: relative;display: inline-flex;} .br1 {padding: 10px 16px;clip-path: inset(0 round 6px);borde…

官宣|HelpLook現已入駐釘釘應用市場,助力企業知識管理知識

前一陣子OpenAI公司最新的GPT-4o技術震撼發布&#xff0c;人工智能的實際應用前景再次引起行業矚目&#xff0c;或者被GPT4o的數據分析等特色功能折服。如您正尋求將AI技術融入企業知識管理&#xff0c;不要錯過HelpLook&#xff01;HelpLook AI知識庫已經正式入駐釘釘應用市場…

Flutter 中的 SlideTransition 小部件:全面指南

Flutter 中的 SlideTransition 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;SlideTransition 是一個動畫組件&#xff0c;用于創建滑動動畫效果&#xff0c;使得子組件可以沿著一個軸滑動進入或滑動退出視圖。這種動畫效果常用于頁面轉場、菜單展開收起、元素的添加…

2024-5-8——給植物澆水

2024-5-8 題目來源我的題解方法一 模擬 題目來源 力扣每日一題&#xff1b;題序&#xff1a;2079 我的題解 方法一 模擬 依次模擬澆水動作 使用一個變量 cap維護剩余的水量&#xff0c;使用t作為還未澆水的樹的下標。當從第 i?1株植物到達第 i株植物時&#xff1a; 如果 ca…

前端中css穿透樣式:deep的用法

在前端開發中&#xff0c;尤其是使用 Vue.js 這樣的框架時&#xff0c;有時我們需要在子組件中修改或影響由父組件傳遞下來的樣式。然而&#xff0c;由于組件的封裝和樣式隔離&#xff0c;直接修改子組件中的樣式可能不起作用。這時&#xff0c;我們可以使用 ::v-deep 偽元素來…

基于Android的家庭理財APP的設計與實現(論文+源碼)_kaic

摘 要 隨著我國居民收入和生活水平的提高&#xff0c;家庭理財成為人們熱議的焦點問題。在需求分析階段&#xff0c;系統從用戶的實際需求出發&#xff0c;確定了用戶賬戶管理、記賬、數據分析和提醒功能等幾個核心需求。用戶賬戶管理包括用戶注冊、登錄和密碼找回等基本操作…

【4th chapter】信息安全技術—安全技術、安全架構、安全策略、安全管理、軟件的脆弱性

概要 安全技術安全架構安全策略安全管理軟件的脆弱性加密技術&#xff08;Encryption Technology&#xff09;安全域架構&#xff08;Security Domain Architecture&#xff09;訪問控制策略&#xff08;Access Control Policy&#xff09;信息安全管理體系&#xff08;Inform…

面試數據庫八股文十問十答第六期

面試數據庫八股文十問十答第六期 作者&#xff1a;程序員小白條&#xff0c;個人博客 相信看了本文后&#xff0c;對你的面試是有一定幫助的&#xff01;關注專欄后就能收到持續更新&#xff01; ?點贊?收藏?不迷路&#xff01;? 1&#xff09;來說說一條 SQL 語句的執行…

leetcode題目238

除自身以外的數組的乘積 中等 給你一個整數數組 nums&#xff0c;返回 數組 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。 題目數據 保證 數組 nums之中任意元素的全部前綴元素和后綴的乘積都在 32 位 整數范圍內。 請 不要使用除法&…

大數據技術Hbase列數據庫——topic1

目錄 搭建單機版Hbase驗證方法一驗證方法二 搭建單機版Hbase 驗證方法一 使用 jps 命令查看 HMaster 進程是否啟動 首先使用xftp 7上傳hbase-2.1.0安裝壓縮包到虛擬機進行解壓縮到某一地址&#xff0c;這里解壓縮到了上傳的路徑即/root/software/ tar -zxvf hbase-2.1.0-bi…

進程與線程學習

多線程 tthreading.Thread(targettask,arge(11,)) start&#xff08;&#xff09;開始 join&#xff08;&#xff09;等待 主線程在默認情況下會等待所有非守護線程&#xff08;子線程&#xff09;結束后才會結束程序。也就是說&#xff0c;如果主線程在結束前沒有調用所有…

2025第十屆美陳展

展位又遭瘋搶&#xff01;2025第十屆美陳展釋放“無界之美” 美是全球通用的語言&#xff0c;人類對美的追求始終如一&#xff0c;大眾審美在經歷了時代的變遷后開始趨同&#xff0c;東方文明深處的美學經濟開始崛起。 在如今商業邁入存量階段&#xff0c;以品牌為突破口打造…

基于 vuestic-ui 實戰教程 - 登錄篇

1. 簡介 登錄做為一個系統的門面&#xff0c;也是阻擋外界的一道防線&#xff0c;那在vuestic-ui中如何做登錄功能呢。在這里就之間沿用初始版本的Login頁面&#xff0c;作為一個演示模板&#xff0c;后續需要改進的讀者可以在此篇文章的基礎上修改。 2. 登錄接口相關api 與 t…

python連接mysql,并整理(去哪兒網)頁面數據到表

##引入requests/pymysql模塊 本地安裝mysql數據庫&#xff0c;安裝圖形化工具navicat import requests from pymysql import Connect#創建客戶端連接信息 client Connect(host127.0.0.1,port3306,userroot,password, ) #創建游標 cursor client.cursor() cursor.execute(cre…