开发实践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 按照这个文章,得到验证…

记csv、parquet数据预览一个bug的解决

文章目录 一、概述二、实现过程1. 业务流程2. 业务逻辑3. 运行结果 三、bug现象1. 单元测试2.运行结果 三、解决思路1. 思路一2. 思路二 一、概述 工作中遇到通过sparksession解析csv、parquet文件并预览top100的需求。 二、实现过程 1. 业务流程 #mermaid-svg-Tzp1pJTvJunU…

227. Basic Calculator II

227. Basic Calculator II class Solution:def calculate(self, s: str) -> int:ititer(re.split(r([\\-\*\/]),s))lastansint(next(it))for op in it:nint(next(it))if op in -:if op-:n-nansnelse:if op*:nlast*nelse:nint(last/n)ansans-lastnlastnreturn ans 注意这个…

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

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

多线程实现方式二

这里写目录标题 RunnableRunable接口实现多线程使用Runnable接口实现多线程的好处线程同步 - 三个窗口买票lock实现同步锁 Runnable Runable接口实现多线程 实现 Runnable 接口 定义一个类 MyRunnable 实现 Runnable 接口 在 MyRunnable 类中重写 run() 方法 创建 Thread 类…

Python系列(3)—— 变量

变量 一、变量命名规范二、变量赋值三、变量的数据类型四、变量的作用域五、变量类型转换 Python编程中&#xff0c;变量是存储数据的容器。它们用于存储各种数据类型&#xff0c;如整数、浮点数、字符串、列表、字典等。理解变量及其工作原理是Python编程的基础。 一、变量命…

在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…

力扣27-移除元素

移除元素 题目链接 解题思路 ans为左指针 循环遍历为右指针 右指针开始遍历整个列表&#xff0c;如果指针所指的元素与val值不等&#xff0c;那么这个元素不能被删除&#xff0c;将其放入到左指针索引处。 因为return的是列表的长度&#xff0c;ans恰好也是删除完元素后列表的…

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

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

FX图中的节点代表什么操作

在 FX 图中&#xff0c;每个节点代表一个操作。这些操作可以是函数调用、方法调用、模块实例调用&#xff0c;也可以是 torch.nn.Module 实例的调用。每个节点都对应一个调用站点&#xff0c;如运算符、方法和模块。 一.节点操作 下面是一些节点可能代表的操作&#xff1a; 1…

js中的数据类型

JavaScript 中有以下几种常见的数据类型&#xff1a; 基本类型&#xff08;原始类型&#xff09;&#xff1a; 字符串&#xff08;String&#xff09;&#xff1a;表示文本数据。数字&#xff08;Number&#xff09;&#xff1a;表示数值数据。布尔&#xff08;Boolean&#xf…

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

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

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

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

对于计算机考研的个人攻略

对于计算机考研的个人攻略 一&#xff1a;专业课复习 ​ 首先从时间上来说&#xff0c;对专业课的复习是在数学基础部分看完以后&#xff0c;这个时候是数学题目和专业课同步进行的。 这里我们按照 408 的划分来复习 408 分数占比为&#xff1a; 数据结构 45 分 计算机组成…

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…