开发实践5_后台管理^/ 分_页器

以下学习 朔宁夫 开发课 。(Python)

一 基本使用

创建超级用户 terminal //

python manage.py createsuperuser 

 访问地址 //Log in | Django site adminicon-default.png?t=N7T8http://127.0.0.1:8000/admin/login/?next=/admin/

    superuserr login

django自带admin功能。其中group与permission可见是两张manyTOmanyField关系的表 //

setting中的时区主要用于记录admin_log。

以下延用model_app

model_app admin.py //

from django.contrib import adminfrom model_app.models import Course, Student, Relationmodels = [Course, Student, Relation,
]admin.site.register(models)

再回到8000端口的admin页面即可见上述自己选择性注册的一些表。默认为objectname+编号,models定义类时作注释可改变展示的字段:

class Student(models.Model):xxxdef __str__(self):return self.nameclass Relation(models.Model):xxxdef __str__(self):return f"{self.student.name} - {self.course.name}"

model中注释meta可修改admin页面表名的展示方式,attribute中指定verbose_name可对属性名注释:

class Course(models.Model):name = models.CharField(max_length=32, verbose_name="showASKECHENG")class Meta:verbose_name = "课程"verbose_name_plural = verbose_name + 'Ss'

二 后台管理权限

dmin页面,可在group中将一些table&读写状态作组合,所得group即不同程度的权限,可赋给某个新建的user。

三 分页器

使用方法:

from django.core.paginator import Paginator

实例化分页器对象:

paginator = Paginator(数据源,每页最多显示的条数) 

演示:

terminal // python manage.py startapp page_app

setting // install

total url//

path('page/', include('page_app.urls', namespace="page")),

models //

from django.db import modelsclass Index(models.Model):name = models.CharField(max_length=32, verbose_name="statistical index")category = models.CharField(max_length=32, verbose_name="application field")preference = models.FloatField(verbose_name="subjective recommendation degree")description = models.CharField(max_length=128, verbose_name="brief documentation", null=True)def __str__(self):return f"{self.name}_{self.category}"class Meta:verbose_name = "Index"verbose_name_plural = verbose_name + 'es'@classmethoddef get_list(cls, **kwargs):filters = {}return cls.objects.filter(**filters)  # objects.all()

注册表单到admin主页,添加测试数据//

from django.contrib import adminfrom page_app.models import Indexmodels = [Index,
]admin.site.register(models)

views //

from django.shortcuts import render
from django.core.paginator import Paginator, InvalidPagefrom djangoProject.settings import PAGE_SIZE
from page_app.models import Indexdef list_index(request):page_num = request.GET.get("page_num", default=1)  # 页码 可以通过/?page=k传参,路由与视图函数不必维护paramindexes = Index.get_list()  # <queryset>paginator = Paginator(indexes, PAGE_SIZE)try:data = paginator.page(page_num)except InvalidPage:data = paginator.page(1)return render(request, "staticindex.html", {"data": data, "paginator": paginator})# 记得不要locals().减少缓存中的数据量。

setting //

# 设置分页大小
PAGE_SIZE = 3

templates //

<body>
<table><thead><tr><th>Name</th><th>Category</th><th>Personal Preference</th><th>Description</th></tr></thead><tbody>{% for i in data %}<tr><td>{{ i.name }}</td><td>{{ i.category }}</td><td>{{ i.preference }}</td><td>{{ i.description }}</td></tr>{% endfor %}</tbody>
</table>
<center><a href="{% url 'page:list' %}">First</a> <!-- OR , EQUAL, %}?page_num=1-->{% if data.has_previous %}<a href="{% url 'page:list'%}?page_num{{ data.previous_page_number }}">Previous</a>{% else %}<a href="javascript:alert('No previous.')">Next</a>{% endif %}{% if data.has_next %}<a href="{% url 'page:list' %}?page_num={{ data.next_page_number }}">Next</a>{% else %}<a href="javascript:alert('WE reached the End of Universe.')">Next</a>{% endif %}<a href="{% url 'page:list' %}?page_num={{ paginator.num_pages }}">Last</a>
</center>
</body>

sub urls //

from django.urls import path
from .views import *app_name = "page"urlpatterns = [path('indexes/', list_index, name="list"),
]

分页前,可传参查询页面:

分页后:

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

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

相关文章

一文读懂「Prompt Engineering」提示词工程

在了解提示过程之前&#xff0c;先了解一下什么是提示prompt&#xff0c;见最后附录部分 一、什么是Prompt Engingering&#xff1f; 提示工程&#xff08;Prompt Engingering&#xff09;&#xff0c;也被称为上下文提示&#xff08;In-Context Prompting&#xff09;&#x…

Django项目中的默认文件都有什么用

manager.py&#xff1a; 是django用于管理本项目的命令行工具&#xff0c;之后进行站点运行&#xff0c;数据库自动生成等都是通过本文件完成。 djangoStudy/__init__.py&#xff1a; 告诉python该目录是一个python包&#xff0c;暂无内容&#xff0c;后期一些工具的初始化可…

【数据库】间隙锁Gap Lock

什么是间隙锁 间隙锁&#xff08;Gap Lock&#xff09;&#xff1a;间隙锁是&#xff08;RR级别下&#xff09;一个在索引记录之间的间隙上的锁&#xff0c;可以是两个索引记录之间&#xff0c;也可能是第一个索引记录之前或最后一个索引之后的空间。间隙锁&#xff08;Gap Lo…

Github登录时,要二次验证.Github 2FA登录问题

2023下半年, Github登录时,要二次验证. 点击“Enable 2FA now”跳到2FA验证界面。 点setup key是到secret串。 这里有一个可以不用app的验证方法。填入secret串,运行后,会得到验证码. https://blog.csdn.net/dejavu_980323/article/details/132318107 按照这个文章,得到验证…

分布式任务调度平台XXL-JOB使用(二)

说明&#xff1a;之前总结过在CentOS系统里使用XXL-JOB。但在代码开发阶段&#xff0c;我们有时需要在本地环境测试定时任务代码&#xff0c;本文介绍如何在Windows系统使用XXL-JOB。 下载 &#xff08;1&#xff09;下载代码&#xff0c;解压打开 首先&#xff0c;去Github…

在Android原生项目中 创建 Flutter模块

前言 应用场景&#xff1a;在已有的Android原生项目中&#xff0c;引入Flutter模块&#xff0c;摸索了两天&#xff0c;终于给整出来了&#xff1b; 如果是新项目&#xff0c;最好直接创建Flutter项目&#xff0c;然后在Fluter的 android / ios目录中&#xff0c;写原生代码&…

深思熟虑可能性模型介绍与使用

深思熟虑可能性模型介绍与使用 如何联系我 作者&#xff1a;鲁伟林 邮箱&#xff1a;thinking_fioa163.com或vlinyes163.com 版权声明&#xff1a;文章和记录为个人所有&#xff0c;如果转载或个人学习&#xff0c;需注明出处&#xff0c;不得用于商业盈利行为。 背景 20…

[牛客周赛复盘] 牛客周赛 Round 28 20240114

[牛客周赛复盘] 牛客周赛 Round 28 20240114 总结A\B1. 题目描述2. 思路分析3. 代码实现 小红的炸砖块1. 题目描述2. 思路分析3. 代码实现 小红统计区间&#xff08;easy&#xff09;1. 题目描述2. 思路分析3. 代码实现 小红的好数组1. 题目描述2. 思路分析3. 代码实现 小红统…

PPT插件-大珩助手-保留原素材的位置和大小一键替换

保留原素材的位置和大小一键替换 若勾选了一键替换&#xff0c;对于从素材库插入的图形&#xff0c;可以使得它的位置、大小与幻灯片中选中的形状一致 软件介绍 PPT大珩助手是一款全新设计的Office PPT插件&#xff0c;它是一款功能强大且实用的PPT辅助工具&#xff0c;支持W…

在众多的材质中选择灰口铸铁铸造划线平台、铸铁平台等的原因——河北北重

使用灰口铸铁制作铸铁平台和划线平台的主要原因有以下几点&#xff1a; 强度高&#xff1a;灰口铸铁具有较高的强度和硬度&#xff0c;能够承受较大的载荷和冲击力。这使得灰口铸铁非常适合制作需要承受重压和磨损的平台和设备。 耐磨性好&#xff1a;灰口铸铁具有较高的耐磨性…

MySQL的多版本并发控制(MVCC)

MVCC MVCC&#xff0c;是Multiversion Concurrency Control的缩写&#xff0c;翻译过来是多版本并发控制&#xff0c;和数据库锁样&#xff0c;他也是一种并发控制的解决方案 我们知道&#xff0c;在数据库中&#xff0c;对数据的操作主要有2种&#xff0c;分别是读和写&…

MetaGPT学习笔记 - task1task2

章节&#xff1a;task1&task2 一.github地址&#xff1a;github.com/geekan/MetaGPT 二.MetaGPT: 多智能体框架​ 使 GPT 以软件公司的形式工作&#xff0c;协作处理更复杂的任务 MetaGPT输入一句话的老板需求&#xff0c;输出用户故事 / 竞品分析 / 需求 / 数据结构 / A…

1115: 数组最小值(数组)

题目描述 数组a有n个元素&#xff0c;请输出n个元素的最小值及其下标。若最小值有多个&#xff0c;请输出下标最小的一个。注意&#xff0c;有效下标从0开始。 输入 输入分两行&#xff0c;第一行是一个正整数n&#xff08;n<1000)&#xff0c;第二行是n个整数。 输出 …

Makefile编译原理 变量的使用

一.变量和不同的赋值方法 ->makefile中支持程序设计语言中变量的概念 ->makefile中的变量只代表文本数据&#xff08;字符串&#xff09; ->makefile中的变量名规则 - 变量名可以包含字符&#xff0c;数字&#xff0c;下划线。 - 不能包含 ":" "#&…

你好2024,OpenStreetMap 20 周岁

2004年&#xff0c;OpenStreetMap在英国诞生。2024年&#xff0c;OpenStreetMap 满 20 周岁&#xff0c;其愿景是创建一个免费的、可编辑的世界地图。当时&#xff0c;地图数据的获取往往受到限制或价格昂贵1。 经过20年的发展&#xff0c;该数据集合成为了最为全面的街道级别开…

宿舍维修管理系统:从数据库到前端的全面解析

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

[openGL]在ubuntu20.06上搭建openGL环境

就在刚刚, 我跑上了一个6小时后出结果的测试程序. 离下班还有很久, 于是我打开了接单群 , 发现了很多可以写的openGL项目. 但是!!我的电脑现在是ubuntu呀, 但是不要慌!!!接下来我一步一步教你如何完美搭建一个ubuntu上的openGL环境. 保证一个坑也不会踩! 文章目录 创建项目工作…

《Git学习笔记:IDEA整合Git》

在IDEA中集成Git去使用 通过Git命令可以完成Git相关操作&#xff0c;为了简化操作过程&#xff0c;我们可以在IDEA中配置Git&#xff0c;配置好后就可以在IDEA中通过图形化的方式来操作Git。 在IDEA开发工具中可以集成Git&#xff1a; 集成后在IDEA中可以看到Git相关图标&…

【MySQL】mysql集群

文章目录 一、mysql日志错误日志查询日志二进制日志慢查询日志redo log和undo log 二、mysql集群主从复制原理介绍配置命令 读写分离原理介绍配置命令 三、mysql分库分表垂直拆分水平拆分 一、mysql日志 MySQL日志 是记录 MySQL 数据库系统运行过程中不同事件和操作的信息的文件…

Mac M1 Parallels CentOS7.9 Rancher + K8S + Gitlab + Jenkins +Harbor CICD

一、资源清单 机器名称IP地址角色k8srancher高可用部署: https://blog.csdn.net/qq_41594280/article/details/135312148rancher10.211.55.200管理K8S集群k8svip10.211.55.199K8S VIPmaster0110.211.55.201K8S集群主节点master0210.211.55.202K8S集群主节点master0310.211.55.…