【银角大王——Django课程——靓号页面的基本操作(列表,新建,删除)】

靓号管理

  • 靓号列表显示
    • 表结构
    • 根据表结构的需求,在models.py中创建类
    • URL.py编写
    • views.py中 函数编写
    • 列表显示HTML
    • 页面效果
  • 新建靓号编写(添加)
    • URL.py编写
    • views.py中 函数编写
    • 新建靓号HTML
      • 数据校验
        • 方式一:(正则表达式)
        • 方式二:(方法)
  • 编辑靓号
      • 列表页面加上编辑——/pretty/数字/edit/
    • urls.py编写
    • views.py编写
    • 页面效果
  • 编辑靓号和添加靓号时,数据校验的要求不相同
      • 编辑中手机号码的要求是:
      • 添加时手机号码的要求是:
  • 删除靓号
    • urls.py编写
    • views.py编写

靓号列表显示

表结构

列名有哪些

  1. id
  2. mobile
  3. level(choice)——类似于性别
  4. status——1表示未占用,2表示已占用

根据表结构的需求,在models.py中创建类

请添加图片描述
代码如下:

class PrettyNum(models.Model):# 靓号表mobile=models.CharField(verbose_name='手机号',max_length=32)# 想要参数为空添加null=True,blank=Trueprice=models.IntegerField(verbose_name='价格')level_choices=((1,'1级'),(2,'2级'),(3,'3级'),(4,'4级'),)#默认等级为default=1level=models.SmallIntegerField(verbose_name='级别',choices=level_choices,default=1)status_choices=((1,'已占用'),(2,'未占用'))status=models.SmallIntegerField(verbose_name='状态',choices=status_choices,default=2)

URL.py编写

在这里插入图片描述

urlpatterns = [#靓号列表path('pretty/list/', views.pretty_list),]

views.py中 函数编写

在这里插入图片描述
代码如下:

#靓号列表
def pretty_list(request):#搜索时没有条件就传入空字典,也就相当于.all()data_dict={}#构件搜索#获取q值——名字为q的input框的值#get中参数——有值拿值,没有值传空search_data=request.GET.get('q',"")if search_data:# 为列表赋值data_dict["mobile__contains"] = search_data#将筛选的值通过filter(**data_dict)传递过去queryset=models.PrettyNum.objects.filter(**data_dict).order_by("-level")#可以进行排序# models.PrettyNum.objects.all().order_by("-id")#按照等级来显示# queryset=models.PrettyNum.objects.all().order_by("-level")return render(request,'pretty_list.html',{"queryset":queryset,"search_data":search_data})

列表显示HTML

{% extends 'layout.html'%}
{% block content %}<div class="container"><div style="margin-bottom: 10px" class="clearfix">
<!--        新建用户按钮--><a class="btn btn-success" href="/pretty/add/" ><span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span>新建靓号</a>
<!--            添加搜索框-添加搜索框-添加搜索框--><div style="float:right ;width:300px;"><form method="get"><div class="input-group"><!--                                使得name="q",传递值-->
<!--                                给input框设置一个默认的值——value="{{search_data}}"——将用户输入的值保留在框内,不会因为跳转而消失--><input type="text" name="q" class="form-control" placeholder="Search for..." value="{{search_data}}"><span class="input-group-btn"><button class="btn btn-default" type="submit"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></button></span></div><!-- /input-group --></form></div></div><div class="panel panel-default"><!-- Default panel contents --><div class="panel-heading"><span class="glyphicon glyphicon-list" aria-hidden="true"></span>靓号列表</div><div class="panel-body"><p>欢迎进入到靓号管理页面,请安全操作!</p></div><!-- Table --><table class="table table-bordered"><thead><tr><th>ID</th><th>号码</th><th>价格</th><th>级别</th><th>状态</th><th>操作</th></tr></thead><tbody>
<!--        数据库部门列表循环-->{% for obj in queryset %}<tr><td>{{obj.id}}</td><td>{{obj.mobile}}</td><td>{{obj.price}}</td>
<!--              显示choices--><td>{{obj.get_level_display}}</td><td>{{obj.get_status_display}}</td><td>
<!--                Django框架中传递参数的正则表达式--><a class="btn btn-primary btn-xs"  href="/pretty/{{obj.id}}/edit/">编辑</a>
<!--                通过get请求传递参数跳转页面--><a class="btn btn-danger btn-xs" href="/pretty/{{obj.id}}/delete/" >删除</a></td></tr>{% endfor %}</tbody></table></div></div>{% endblock %}

页面效果

在这里插入图片描述

新建靓号编写(添加)

URL.py编写

在这里插入图片描述
代码如下:

urlpatterns = [#靓号添加path('pretty/add/', views.pretty_add), 
]

views.py中 函数编写

  • ModelForm类——记得导入
  • 实例化对象
  • 通过render将对象传入到HTML中
  • 通过模板的循环展示所有的字段
    在这里插入图片描述
    代码如下:
#导入
from django.core.validators import RegexValidator
#异常错误
from django.core.exceptions import ValidationError
#继承modelForm类
class PrettyModelForm(forms.ModelForm):#################额外交验,浏览器自带以外的校验-额外交验,浏览器自带以外的校验-额外交验,浏览器自带以外的校验####################方式一额外验证——额外验证——额外验证# mobile=forms.CharField(#     label="手机号",##     #可以添加一个或者多个校验-可以添加一个或者多个校验-可以添加一个或者多个校验#     #1开头[3-9]+9个数#     validators=[RegexValidator(r'^1[3-9]\d{9}$','手机号格式错误'),]# )class Meta:#靓号实例化model=models.PrettyNum#靓号属性fields=["mobile","price","level","status"]# fields="__all__"# exclude=['level']#添加样式——添加样式-添加样式-添加样式-添加样式def __init__(self,*args,**kwargs):super().__init__(*args ,**kwargs)#循环找到所有插件,添加了class=“form-control”样式for name ,field in self.fields.items():# print(id,field)#某一项去除样式# if name=="password":#     continuefield.widget.attrs = {"class":"form-control","placeholder":field.label}#验证方式二#导入from django.core.exceptions import ValidationErrordef clean_mobile(self):#获取用户传入的mobile数据txt_mobile=self.cleaned_data["mobile"]#额外校验#校验不通过#查验数据库中手机号是否已经存在——查验数据库中手机号是否已经存在-查验数据库中手机号是否已经存在exists=models.PrettyNum.objects.filter(mobile=txt_mobile).exists()if exists:raise ValidationError("手机号已经存在!!!")# if len(txt_mobile)!=11:#     raise ValidationError("格式错误!")#校验通过_返回当前的值return txt_mobile#添加靓号
def pretty_add(request):if request.method == 'GET':#实例化PrettyModelFormform=PrettyModelForm()return render(request,'pretty_add.html',{'form':form})else:form=PrettyModelForm(data=request.POST)#校验成功if form.is_valid():form.save()return redirect('/pretty/list/')#校验失败return render(request,'pretty_add.html',{"form":form})

新建靓号HTML

{% extends 'layout.html' %}{% block content %}<div class="container"><div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title"> 新建靓号 </h3></div><div class="panel-body">
<!--              novalidate关掉页面校验  --><form method="post" novalidate>
<!--                    隐含参数-->{% csrf_token %}{% for field in form %}<div class="form-group"><label >{{ field.label }}</label>{{ field }}<span style="color:red;">{{field.errors.0}}</span><!--                        <input type="text" class="form-control"  placeholder="标题" name="user">--></div>{% endfor %}<button type="submit" class="btn btn-primary">提 交</button></form></div></div></div>{% endblock %}

数据校验

方式一:(正则表达式)
class PrettyModelForm(forms.ModelForm):#################额外交验,浏览器自带以外的校验-额外交验,浏览器自带以外的校验-额外交验,浏览器自带以外的校验####################方式一额外验证——额外验证——额外验证mobile=forms.CharField(label="手机号",#可以添加一个或者多个校验-可以添加一个或者多个校验-可以添加一个或者多个校验#1开头[3-9]+9个数validators=[RegexValidator(r'^1[3-9]\d{9}$','手机号格式错误'),])
方式二:(方法)
class PrettyModelForm(forms.ModelForm):#验证方式二#导入from django.core.exceptions import ValidationErrordef clean_mobile(self):#获取用户传入的mobile数据txt_mobile=self.cleaned_data["mobile"]#额外校验#校验不通过if len(txt_mobile)!=11:raise ValidationError("格式错误!")#校验通过_返回当前的值return txt_mobile
  • 保存到数据库

  • 跳转回靓号列表

编辑靓号

列表页面加上编辑——/pretty/数字/edit/

urls.py编写

在这里插入图片描述
代码如下:

urlpatterns = [#靓号编辑path('pretty/<int:nid>/edit/', views.pretty_edit),
]

views.py编写

(1)根据ID获取当前编辑的对象
(2)ModelForm配合,默认显示数据。
(3)提交修改
请添加图片描述
代码如下:

#继承modelForm类
#添加和编辑使用不同的类
class PrettyEditModelForm(forms.ModelForm):
#将手机号码显示出来但是不可更改_将手机号码显示出来但是不可更改_将手机号码显示出来但是不可更改###############33# mobile=forms.CharField(disabled=True,label="手机号")class Meta:#靓号实例化model=models.PrettyNum#靓号属性#不能修改手机号码,fields=["mobile","price","level","status"]# fields="__all__"# exclude=['level']#添加样式——添加样式-添加样式-添加样式-添加样式def __init__(self,*args,**kwargs):super().__init__(*args ,**kwargs)#循环找到所有插件,添加了class=“form-control”样式for name ,field in self.fields.items():# print(id,field)#某一项去除样式# if name=="password":#     continuefield.widget.attrs = {"class":"form-control","placeholder":field.label}# 验证方式二# 导入from django.core.exceptions import ValidationErrordef clean_mobile(self):#当前编辑哪一行的ID# 获取用户传入的mobile数据txt_mobile = self.cleaned_data["mobile"]# 额外校验# 校验不通过# 查验数据库中手机号是否已经存在,除去自身以外的——查验数据库中手机号是否已经存在,除去自身以外的-查验数据库中手机号是否已经存在,除去自身以外的#id=self.instance.pk获取id————instance就是传过来的对象exists = models.PrettyNum.objects.exclude(id=self.instance.pk).filter(mobile=txt_mobile).exists()if exists:raise ValidationError("手机号已经存在!!!")# 校验通过,返回当前的值return txt_mobile#靓号编辑
def pretty_edit(request,nid):#拿到对象row_object=models.PrettyNum.objects.filter(id=nid).first()#get请求响应if request.method=="GET":#拿到数据库的字段并且显示出来form=PrettyEditModelForm(instance=row_object)return render(request,'pretty_edit.html',{'form':form})else:#提交方式为POSTform=PrettyEditModelForm(data=request.POST,instance=row_object)if form.is_valid():form.save()return redirect('/pretty/list/')return render(request,'pretty_edit.html',{'form':form})

页面效果

在这里插入图片描述

编辑靓号和添加靓号时,数据校验的要求不相同

编辑中手机号码的要求是:

在这里插入图片描述
代码如下:

def clean_mobile(self):#当前编辑哪一行的ID# 获取用户传入的mobile数据txt_mobile = self.cleaned_data["mobile"]# 额外校验# 校验不通过# 查验数据库中手机号是否已经存在,除去自身以外的——查验数据库中手机号是否已经存在,除去自身以外的-查验数据库中手机号是否已经存在,除去自身以外的#id=self.instance.pk获取id————instance就是传过来的对象exists = models.PrettyNum.objects.exclude(id=self.instance.pk).filter(mobile=txt_mobile).exists()if exists:raise ValidationError("手机号已经存在!!!")# 校验通过,返回当前的值return txt_mobile

添加时手机号码的要求是:

请添加图片描述
代码如下:

#验证方式二#导入from django.core.exceptions import ValidationErrordef clean_mobile(self):#获取用户传入的mobile数据txt_mobile=self.cleaned_data["mobile"]#额外校验#校验不通过#查验数据库中手机号是否已经存在——查验数据库中手机号是否已经存在-查验数据库中手机号是否已经存在exists=models.PrettyNum.objects.filter(mobile=txt_mobile).exists()if exists:raise ValidationError("手机号已经存在!!!")# if len(txt_mobile)!=11:#     raise ValidationError("格式错误!")#校验通过_返回当前的值return txt_mobile

删除靓号

urls.py编写

请添加图片描述
代码如下:

urlpatterns = [path('pretty/<int:nid>/delete/', views.pretty_delete)]

views.py编写

在这里插入图片描述
代码如下:

#靓号删除
def pretty_delete(request,nid):models.PrettyNum.objects.filter(id=nid).delete()return redirect('/pretty/list/')

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

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

相关文章

微信IDE vscode插件:获取插件位置,并打开文件

背景 有没有觉得在微信开发工具里面添加一些插件可以很方便。因为微信IDE的编辑本身是依赖vscode开发&#xff0c;所以编写vscode插件自然可以在微信IDE使用。这样做好处就是可以满足到自己一些开发使用习惯。 1.获取插件的目录位置 那么如何获取插件里面的目录&#xff0c;…

【AI】openai-quickstart 运行Jupyter Lab

openai-quickstart/openai_api /README-CN.md 【AI】指定python3.10安装Jupyter Lab 可以安装3.10版本的jupyter lab 但是直接输入命令无法启动 突然发现自己电脑2023年安装过anaconda3 C:\ProgramData\anaconda3\python.exe C:\ProgramData\anaconda3\cwp.py C:\ProgramData…

[ARM系列]coresight(一)

原文链接 目的&#xff1a;对复杂SOC实现debug和trace的架构 典型环境 包含&#xff1a;2个ARM core&#xff0c;一个DSP&#xff0c;众多coresight组件 coresight组件实现对core、DSP的debug和trace功能 环境中包含3个通路 trace通路&#xff1a;将core和DSP内部信息输出到…

跨域问题(服务器和浏览器之间)待补充

一、为什么产生&#xff1a; 同源策略&#xff08;域名&#xff0c;协议&#xff0c;端口&#xff09;&#xff0c;安全问题 二、怎么解决&#xff1a; 1、cros:修改响应头 2、jp&#xff1a;采用js标签 3、代理&#xff08;创建服务器&#xff0c;定义规则&#xff0c;服…

JVM笔记3-经典的垃圾收集器

上图展示了7种&#xff0c;适用于不同分代中的收集器。如果两者之间由连线&#xff0c;说明可以搭配使用。 PS&#xff1a;在JDK8中将SerialCMS和ParNewSerial Old的组合声明为废弃&#xff0c;并且在JDK9中完全取消了这两种组合的支持。 1、Serial收集器 Serial收集器是JVM中…

C++:重写和重载

重写&#xff08;Override&#xff09;和重载&#xff08;Overload&#xff09;是面向对象编程中常用的两个概念&#xff0c;它们虽然都涉及到方法的定义&#xff0c;但是在实现和使用上有着不同的特点。 重写&#xff08;Override&#xff09;&#xff1a; 重写是指在子类中重…

【备战软考(嵌入式系统设计师)】07 - 计算机网络模型

七层模型 计算机网络中比较常见的有OSI七层模型和TCP/IP四层模型。 软考中主要考七层模型&#xff0c;但是实际中使用的还是四层模型比较多&#xff0c;我们主要是为了考试&#xff0c;那就主要讲讲七层模型。不过实际上四层模型就是将七层模型压缩了三层&#xff0c;本质上是…

深度学习中的注意力机制一(Pytorch 15)

一 简介 灵长类动物的视觉系统接受了大量的感官输入&#xff0c;这些感官输入远远超过了大脑能够完全处理的程度。然而&#xff0c; 并非所有刺激的影响都是相等的。意识的聚集和专注使灵长类动物能够在复杂的视觉环境中将注意力引向感 兴趣的物体&#xff0c;例如猎物和天敌。…

电子电器架构 --- 主机厂产线的两种刷写方法

电子电器架构 — 主机厂产线的两种刷写方法 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证…

DS:顺序表、单链表的相关OJ题训练(1)

欢迎各位来到 Harper.Lee 的学习小世界&#xff01; 博主主页传送门&#xff1a;Harper.Lee的博客主页 想要一起进步的uu可以来后台找我交流哦&#xff01; 在DS&#xff1a;单链表的实现 和 DS&#xff1a;顺序表的实现这两篇文章中&#xff0c;我详细介绍了顺序表和单链表的…

IDEA基于Maven构建项目

IDEA基于Maven构建项目 一、Maven简介 Apache Maven 是一个软件项目管理和理解工具。基于项目对象模型的概念&#xff08;POM&#xff09;&#xff0c;Maven 可以从中心信息中管理项目的构建、报告和文档。 Apache Maven 可以用于构建和管理任何基于 Java 的项目。 下载地址…

【可实战】被测需求理解(需求文档是啥样的、从哪些角度进行需求评审、需求分析需要分析出哪些内容、如何提高需求分析能力)

产品人员会产出一个需求文档&#xff0c;然后组织一个需求的宣讲。测试人员的任务就是在需求宣讲当中&#xff0c;分析需求有没有存在一些问题&#xff0c;然后在需求宣讲结束之后通过分析需求文档&#xff0c;分析里面的测试点并预估一个排期。 一、需求文档是什么样的&#x…

视频教程下载:为 GPTs 商店构建 10 个 GPTs获得被动收入

欢迎来到 AI 驱动的内容创作新时代 - GPT 商店。这门综合课程是您成为定制和利用 GPT 模型解决多样化应用的专家的路线图。无论你是错过了应用商店革命的初始浪潮还是乘着它取得了成功&#xff0c;这都是你站在下一个重大数字飞跃前沿的机会。 课程模块&#xff1a; - 介绍 Ch…

Unity 性能优化之动态批处理(四)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、动态合批是什么&#xff1f;二、使用动态批处理1.打开动态合批2.满足条件 三、检查动态合批是否成功五、动态合批弊端总结 前言 动态批处理是常用优…

libmodbus使用

安装可以看这个博客&#xff1a; https://blog.csdn.net/hanhui22/article/details/105786762 它的安装可以&#xff0c;但是编译测试看不太懂&#xff0c;我没跟着它的编译&#xff0c;完了后把/lib下的 放到开发板的/usr/lib下 编写代码: #include <stdio.h> #inclu…

UI组件库和内容文字的中英文切换

同时实现UI组件库(这里以ElementPlus为例)和内容文字的中英文切换 1. 安装vueI18n和element-plus pnpm i vue-i18n element-plus 2. 然后在项目中src目录下新建lang文件夹&#xff0c;里面新建en.ts和zh.ts还有index.ts index.ts import { createI18n } from vue-i18n impor…

jvm重要参数可视化和线上问题排查

jvm重要参数可视化和线上问题排查 目标jvm参数分类(了解)运行时数据区相关的&#xff08;jdk1.8&#xff09;处理 OOM 相关的垃圾回收器相关的GC 日志记录相关的意义,默认值,调优原则&#xff08;重要&#xff0c; 待拆分&#xff09; 排查 OOM 流程 和 常见原因参考文章 目标 …

c#数据库:1.c#创建并连接数据库

安装软件:SQL Server Management Studio Management Studio Visual Studio 2022 启动服务: 打开SQL Server Management Studio Management Studio ,连接到服务器(GUANZU是我的计算机名) 新建数据库,随便起个名字叫aq: c#代码: using System; using System.Collections.Gener…

深度学习:基于Keras,使用长短期记忆神经网络模型LSTM和RMSProp优化算法进行销售预测分析

前言 系列专栏&#xff1a;【机器学习&#xff1a;项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学习模型、处理非…

[C++核心编程-02]----C++引用详解和使用方法分析

前言 在C中&#xff0c;引用是一个别名&#xff0c;它允许将一个已存在的变量或对象用不同的名称来访问。引用在定义时必须初始化&#xff0c;并且一旦初始化就不能再绑定其他对象&#xff0c;因此引用在声明时被初始化后就不能再改变引用对象。引用使用&符号进行声明。 引…