Django实践-03模型-02基于admin管理表

news2024/9/22 10:09:23

文章目录

  • Django实践-03模型
    • 利用Django后台管理模型
      • 1. 将admin应用所需的表迁移到数据库中。
      • 2. 创建访问admin应用的超级用户账号,
      • 3. 运行项目
      • 4.注册模型类
      • 5.对模型进行CRUD操作。
      • 6.实现学科页和老师页效果
        • 1. 修改polls/views.py文件。
        • 2.修改templates/polls/subjects.html和tteachers.html模板页
          • subjects.html
          • teachers.html
        • 3.访问
    • django模块介绍
      • django.shortcuts.render
      • django.shortcuts.redirect
    • 总结

在这里插入图片描述

Django实践-03模型

官网:https://www.djangoproject.com/
博客:https://www.liujiangblog.com/
git:https://gitcode.net/mirrors/jackfrued/Python-100-Days

Django静态文件问题备注:
参考:
Django测试开发-20-settings.py中templates配置,使得APP下的模板以及根目录下的模板均可生效
解决django 多个APP时 static文件的问题

django.short包参考:https://docs.djangoproject.com/en/4.1/topics/http/shortcuts/

利用Django后台管理模型

在创建好模型类之后,可以通过Django框架自带的后台管理应用(admin应用)实现对模型的管理。

1. 将admin应用所需的表迁移到数据库中。

python manage.py makemigrations
python manage.py migrate

(vip3-django) E:\vscode\vip3-django\djangoproject>python manage.py makemigrations
Migrations for ‘polls’:
polls\migrations\0001_initial.py
- Create model Subject
- Create model Teacher
(vip3-django) E:\vscode\vip3-django\djangoproject>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, polls, sessionsRunning migrations:
Applying contenttypes.0001_initial… OK
Applying auth.0001_initial… OK
Applying admin.0001_initial… OK
Applying admin.0002_logentry_remove_auto_add… OK
Applying admin.0003_logentry_add_action_flag_choices… OK
Applying contenttypes.0002_remove_content_type_name… OK
Applying auth.0002_alter_permission_name_max_length… OK
Applying auth.0003_alter_user_email_max_length… OK
Applying auth.0004_alter_user_username_opts… OK
Applying auth.0005_alter_user_last_login_null… OK
Applying auth.0006_require_contenttypes_0002… OK
Applying auth.0007_alter_validators_add_error_messages… OK
Applying auth.0008_alter_user_username_max_length… OK
Applying auth.0009_alter_user_last_name_max_length… OK
Applying auth.0010_alter_group_name_max_length… OK
Applying auth.0011_update_proxy_permissions… OK
Applying auth.0012_alter_user_first_name_max_length… OK
Applying polls.0001_initial… OK
Applying sessions.0001_initial… OK

2. 创建访问admin应用的超级用户账号,

这里需要输入用户名、邮箱和口令。

python manage.py createsuperuser

在这里插入图片描述

说明:输入口令时没有回显也不能退格。

3. 运行项目

python manage.py runserver

在浏览器中访问

http://127.0.0.1:8000/admin

输入刚才创建的超级用户账号admin和密码admin进行登录。
在这里插入图片描述

在这里插入图片描述

4.注册模型类

我们暂时还没能在admin应用中看到之前创建的模型类,为此需要在polls应用的admin.py文件中对需要管理的模型进行注册。

from django.contrib import admin

from polls.models import Subject, Teacher

admin.site.register(Subject)
admin.site.register(Teacher)

刷新

http://127.0.0.1:8000/admin

在这里插入图片描述
注册模型类后,就可以在后台管理系统中看到它们。可以在管理员平台对模型进行C(新增)、R(查看)、U(更新)、D(删除)操作,如下图所示。
在这里插入图片描述

5.对模型进行CRUD操作。

注册模型管理类。

可能大家已经注意到了,刚才在后台查看部门信息的时候,显示的部门信息并不直观,为此我们再修改admin.py文件,通过注册模型管理类,可以在后台管理系统中更好的管理模型。

from django.contrib import admin

from polls.models import Subject, Teacher


class SubjectModelAdmin(admin.ModelAdmin):
    list_display = ('no', 'name', 'intro', 'is_hot')
    search_fields = ('name', )
    ordering = ('no', )


class TeacherModelAdmin(admin.ModelAdmin):
    list_display = ('no', 'name', 'sex', 'birth', 'good_count', 'bad_count', 'subject')
    search_fields = ('name', )
    ordering = ('no', )


admin.site.register(Subject, SubjectModelAdmin)
admin.site.register(Teacher, TeacherModelAdmin)

在这里插入图片描述
为了更好的查看模型,我们为Subject类和Teacher类添加__str__魔法方法,并在该方法中返回学科名字。

    def __str__(self) -> str:
        return self.name

在这里插入图片描述

6.实现学科页和老师页效果

1. 修改polls/views.py文件。

修改polls/views.py文件,编写视图函数实现对学科页和老师页的渲染。

from django.shortcuts import render
from django.shortcuts import redirect

# Create your views here.

from polls.models import Subject, Teacher


def show_subjects(request):
    subjects = Subject.objects.all().order_by('no')
    return render(request, 'polls/subjects.html', {'subjects': subjects})


def show_teachers(request):
    try:
        sno = int(request.GET.get('sno'))
        teachers = []
        if sno:
            subject = Subject.objects.only('name').get(no=sno)
            teachers = Teacher.objects.filter(subject=subject).order_by('no')
        return render(request, 'polls/teachers.html', {
            'subject': subject,
            'teachers': teachers
        })
    except (ValueError, Subject.DoesNotExist):
        return redirect('/')

2.修改templates/polls/subjects.html和tteachers.html模板页

修改templates/polls/subjects.html和templates/polls/teachers.html模板页

subjects.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学科信息</title>
    <style>
        #container {
            width: 80%;
            margin: 10px auto;
        }
        .user {
            float: right;
            margin-right: 10px;
        }
        .user>a {
            margin-right: 10px;
        }
        #main>dl>dt {
            font-size: 1.5em;
            font-weight: bold;
        }
        #main>dl>dd {
            font-size: 1.2em;
        }
        a {
            text-decoration: none;
            color: darkcyan;
        }
    </style>
</head>
<body>
    <div id="container">
        <div class="user">
            <a href="login.html">用户登录</a>
            <a href="register.html">快速注册</a>
        </div>
        <h1>XX学堂所有学科</h1>
        <hr>
        <div id="main">
            {% for subject in subjects %}
            <dl>
                <dt>
                    <a href="/teachers/?sno={{ subject.no }}">{{ subject.name }}</a>
                    {% if subject.is_hot %}
                    <img src="/static/images/hot-icon-small.png">
                    {% endif %}
                </dt>
                <dd>{{ subject.intro }}</dd>
            </dl>
            {% endfor %}
        </div>
    </div>
</body>
</html>
teachers.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>老师信息</title>
    <style>
        #container {
            width: 80%;
            margin: 10px auto;
        }
        .teacher {
            width: 100%;
            margin: 0 auto;
            padding: 10px 0;
            border-bottom: 1px dashed gray;
            overflow: auto;
        }
        .teacher>div {
            float: left;
        }
        .photo {
            height: 140px;
            border-radius: 75px;
            overflow: hidden;
            margin-left: 20px;
        }
        .info {
            width: 75%;
            margin-left: 30px;
        }
        .info div {
            clear: both;
            margin: 5px 10px;
        }
        .info span {
            margin-right: 25px;
        }
        .info a {
            text-decoration: none;
            color: darkcyan;
        }
    </style>
</head>
<body>
    <div id="container">
        <h1>{{ subject.name }}学科的老师信息</h1>
        <hr>
        {% if not teachers %}
            <h2>暂无该学科老师信息</h2>
        {% endif %}
        {% for teacher in teachers %}
        <div class="teacher">
            <div class="photo">
                <img src="/static/images/{{ teacher.photo }}" height="140" alt="">
            </div>
            <div class="info">
                <div>
                    <span><strong>姓名:{{ teacher.name }}</strong></span>
                    <span>性别:{{ teacher.sex | yesno:'男,女' }}</span>
                    <span>出生日期:{{ teacher.birth | date:'Y年n月j日'}}</span>
                </div>
                <div class="intro">{{ teacher.intro }}</div>
                <div class="comment">
                    <a href="">好评</a>&nbsp;(<strong>{{ teacher.good_count }}</strong>)
                    &nbsp;&nbsp;&nbsp;&nbsp;
                    <a href="">差评</a>&nbsp;<strong>{{ teacher.bad_count }}</strong>)
                </div>
            </div>
        </div>
        {% endfor %}
        <a href="/">返回首页</a>
    </div>
</body>
</html>

3.访问

http://127.0.0.1:8000/
在这里插入图片描述

点击Python全栈+人工智能学科的老师信息跳转到
http://127.0.0.1:8000/teachers/?sno=1
在这里插入图片描述

到此为止,页面上需要的图片(静态资源)还没有能够正常展示,我们在下一章节中为大家介绍如何处理模板页上的需要的静态资源。

django模块介绍

django.shortcuts.render

render(request, template_name, context=None, content_type=None, status=None, using=None

django.shortcuts.redirect

redirect(to, *args, permanent=False, **kwargs)

总结

本文主要是Django系列博客。本文是Django模型层models的使用过程。
1.基于实体类生成数据表
python manage.py makemigrations
python manage.py migrate
2.创建超级用户
python manage.py createsuperuser
3.把models交给后台admin管理 可优化
admin.site.register(Subject)
4.修改polls/views.py文件
5.修改templates/polls下的html文件
6.运行项目
python manage.py runserver

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/392966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

THUPC-2023 游记

清华校赛&#xff0c;战火重燃 原文链接 宣传图 上周四同学在洛谷无意间看到了宣传图&#xff0c;当时很有感触。不知觉间&#xff0c;又是一年春&#xff0c;又是一场触动心弦的 THUPC 了。 周五的团建过于有趣&#xff0c;致使我完全将 THUPC 抛之脑后了。 周日上午被省选…

原型链(回顾)

概念prototype__proto__原型链查找机制万物皆对象判断私有/共有属性方法Object.prototype.prototype nullObject.create(proto, [propertiesObject])给类的原型上扩展属性方法的4种方法Fn.prototype.xxx xxxObject.prototype.xxx xxxf1.proto.xxx xxx原型重定向 概念 原型…

虚拟相机 Cinemachine Virtual Camera

一.简介 本质上,虚拟相机应该是相机行为的配置文件,虚拟相机之间的切换实际上就是在进行相机行为之间的切换; 虚拟相机并不会创建任何摄像机,他只会创建虚拟节点,实际上操作的是Cinemachine Brain 虚拟相机属性设置完毕后,应尽量避免在游戏中对齐进行修改, 如有需要可以多创建…

RocketMQ-03

1. 高级功能 1.1 消息存储 分布式队列因为有高可靠性的要求&#xff0c;所以数据要进行持久化存储。 消息生成者发送消息MQ收到消息&#xff0c;将消息进行持久化&#xff0c;在存储中新增一条记录返回ACK给生产者MQ push 消息给对应的消费者&#xff0c;然后等待消费者返回A…

Ubuntu 搭建文件服务器(Nginx)

1&#xff0c;下载Nginx 2&#xff0c;安装Nginx 3&#xff0c;Nginx指令及脚本使用 4&#xff0c;配置Nginx 1&#xff0c;下载Nginx ①去官网下载对应的Nginx版本 nginx: download ②直接在ubuntu使用指令下载 wget http://nginx.org/download/nginx-1.23.3.tar.gz 2…

网上赚钱的兼职有哪些,互联网兼职什么挣钱多?

2023年&#xff0c;大投资的创业并不适合普通人&#xff0c;而小投资的创业形式&#xff0c;轻资产创业也需要资金&#xff0c;所以&#xff0c;很多人考虑到了兼职赚钱&#xff0c;那么&#xff0c;网上赚钱的兼职有哪些&#xff0c;互联网兼职做什么挣钱比较多呢&#xff1f;…

DHCP Snooping讲解

DHCP Snooping时DHCP的一种安全特性&#xff0c;用于保证DHCP客户端从合法的DHCP服务器获取IP地址&#xff0c;并记录DHCP客户端IP地址与MAC地址等参数的对应关系&#xff0c;防止网络上针对DHCP攻击 通过配置信任端口和非信任端口来实现安全防护 信任接口 正常接收DHCP服务器响…

网络安全之暴力破解介绍及暴力破解Tomcat

网络安全之暴力破解介绍及应用场景一、暴力破解介绍1.1 暴力破解介绍1.2 暴力破解应用场景一、暴力破解Tomcat一、暴力破解介绍 1.1 暴力破解介绍 暴力破解字典&#xff1a;https://github.com/k8gege/PasswordDic 1.2 暴力破解应用场景 一、暴力破解Tomcat 登录Tomcat后台&a…

重磅通知!OpenAI又放大招:官宣开放API接口-3.5版本 需求大涨,机遇与挑战并存,谁能拔得头筹?

3月2日&#xff0c;在各大论坛网站霸榜了一个多月&#xff0c;ChatGPT相关话题的热度仍高居不下。这边热度未歇&#xff0c;那边研发ChatGPT的人工智能公司又在互联网上投下一颗重磅“炸弹”&#xff1a;OpenAI在其官方博客宣布&#xff0c;将开放ChatGPT和Whisper的模型API。 …

代码分享:面波数据快速成图

代码分享&#xff1a;面波数据快速成图 前言 目前&#xff0c;物探数据主要用surfer软件成图&#xff0c;surfer软件具有强大的插值和绘图功能&#xff0c;成图比较美观。但是&#xff0c;生产过程中大量的物探数据&#xff0c;依靠excel和surfer来成图耗费人力时间成本。本博…

UML视图—用例图、顺序图、状态图、类图、包图、协作图

大家好&#xff0c;欢迎来到Doker&#xff0c;这是一篇架构设计的基础文章。面向对象的问题的处理的关键是建模问题。建模可以把在复杂世界的许多重要的细节给抽象出。许多建模工具封装了UML&#xff08;也就是Unified Modeling Language™&#xff09;&#xff0c;这篇课程的目…

Linux25 -- 监听队列链接上限测试、命令uname、ulimit

一、监听队列链接上限测试 1、res listen(sockfd,5); //创建监听队列res listen(sockfd,5);不懂版本有不同的限制&#xff0c;2.6早期版本有限制为128&#xff0c;超过默认为128&#xff0c;可使用uname -a 查看版本 2、测试将链接数到达上限&#xff0c; 方法&#xff1…

【安卓开发】探究服务

10.2 Android多线程编程 定义一个线程只需要新建一个类继承自Thread&#xff0c;然后重写父类的run方法&#xff0c;在里面编写耗时逻辑即可 class MyThread extends Thread{Overridepublic void run(){// 处理具体的逻辑} }那么如何启动呢 new Mythread().start() 这样继承的…

Hive拉链表

概述 拉链表&#xff1a;维护历史状态以及最新状态数据的表 作用场景 1. 数据量比较大。 2. 表中的部分字段会被更新&#xff0c;比如用户的地址&#xff0c;银行利率&#xff0c;订单的状态等。 3. 需要查看某一个时间点或者时间段的历史快照信息&#xff0c;比如&#xff0c;…

Linux GCC 编译详解

文章目录一、GCC 编译器简介二、GCC 工作流编程语言的发展GCC 工作流程gcc 和 g 的区别三、使用 GCC 编译GCC 编译格式GCC 编译流程多个源文件编译一、GCC 编译器简介 首先&#xff0c;什么是编译器呢&#xff1f; 我们可以使用编辑器&#xff08;如 linux 下的 vi、windows 下…

Tomcat安装步骤及详细配置教程

Tomcat安装及配置教程主要分为四步&#xff1a; 步骤一&#xff1a;首先确认自己是否已经安装JDK 步骤二&#xff1a;下载安装Tomcat 步骤三&#xff1a;Tomcat配置环境变量 步骤四&#xff1a;验证Tomcat配置是否成功 一、首先确认自己是否已经安装JDK WinR打开运行&…

sklearn手册(持续更新ing...)

诸神缄默不语-个人CSDN博文目录 本文是一个随时使用sklearn时可供参考的手册。我有使用sklearn的基础&#xff0c;且准备后期直接用sklearn官方的教程文档参考撰写系统性学习sklearn包使用方法的sklearn用户教程一文&#xff0c;因此本文就不介绍基础了。 最近更新时间&#…

ubuntu 20.04 Linux下查看当前文件夹的大小

问题描述 由于使用远程的 ssh 连接 ubuntu 20.04&#xff0c;所以不清楚如何查看 当前文件夹的大小 直接使用 df -h&#xff0c;只能查看 当前系统 磁盘的使用情况 需求 通过Linux shell 命令行&#xff0c;查看 当前文件夹占用的大小 其实很简单&#xff0c;使用 Linux sh…

如何使用码匠连接 Oracle

目录 在码匠中集成 Oracle 在码匠中使用 Oracle 关于码匠 Oracle 是一种关系型数据库&#xff0c;可用于存储和管理大量结构化数据。Oracle 数据源支持多种操作系统&#xff0c;包括 Windows、Linux 和 Unix 等&#xff0c;同时也提供了各种工具和服务&#xff0c;例如 Orac…

从设计转到了产品,实习生工作复盘

一、写在前面从设计转到了产品&#xff0c;产品的门槛好像相对于设计确实要低一些。通过产品新人必读书《人人都是产品经理》、知乎产品大神的观点和我个人的理解&#xff0c;可以得出一个结论——并不是每个人都是合格的产品经理&#xff0c;包括我在内的很多人都是因为公司有…