【银角大王——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;…

MongoDB:非关系型数据库的翘楚

MongoDB&#xff1a;非关系型数据库的翘楚 文章目录 MongoDB&#xff1a;非关系型数据库的翘楚一、引言二、MongoDB简介三、MongoDB的特点四、MongoDB的应用场景五、MongoDB的使用方法1.安装和配置1.下载MongoDB安装包2.解压安装包3.创建数据目录和日志文件4.配置环境变量5.启动…

运维各种中间件的手动安装(非常详细)

压缩文件夹 tar -zcvf newFolder.tar.gz oldFolder 把oldFolder文件夹压缩成newFolder.tar.gz解压文件夹 tar -zxvf 压缩文件名.tar.gzlinux安装jdk &#xff08;参考 https://blog.csdn.net/qq_42269466/article/details/124079963 &#xff09; 1、创建目录存放jdk包 mkd…

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

css基础之显示模式、背景、三大特性

显示模式、背景 一、元素显示模式 1.块级元素 独占一行&#xff0c;例如div,p&#xff0c;hr,h1-h6,ul,ol,form,table 可以设置高度宽度&#xff0c;外边距&#xff0c;内边距 宽度默认容器宽度 里面可以放行内或块级元素 注意&#xff1a; 文字类元素不能使用块级元素 <…

Ajax的请求方式

1 get 1 $.get() //通过远程Http Get请求载入信息 $.get("请求地址",{id:1;name:"一一"},function(data) {//请求成功执行的代码写在这里 }) //或者直接拼接参数 $.get("请求地址?id"id"&name"name,function(data) {//请求成功…

[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; 重写是指在子类中重…

js开启子线程及其使用

众所周知&#xff0c;js是单线程&#xff0c;但是可以开启子线程来帮忙处理一些数据&#xff0c;但是这个子线程是有限制的 1.必须是同源 2.完全受主线程控制 3.不能在子线程中操作dom节点 4.子线程没有window&#xff0c;可以使用self 5.等等 具体的查看官网 进程切换是要耗时…

如何在Gin框架中使用Websocket?

在Gin框架中使用Websocket&#xff0c;你需要使用一个第三方库&#xff0c;例如github.com/gorilla/websocket。以下是一个基本的示例&#xff0c;展示了如何在Gin中设置一个Websocket服务器&#xff1a; 首先&#xff0c;你需要安装gorilla/websocket包&#xff0c;你可以使用…

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

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

openssl相关命令

报错keytool error: java.lang.Exception: Input not an X.509 certificate 该报错表示需要 X.509 格式的证书,可以通过下面的命令转换 openssl x509 -in <原证书> -out <X.509证书> # 例如 openssl x509 -in test.crt -out test509.crt 参考: Error Importing…

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

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

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

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

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

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

bert 微调合集

暂时没有时间总结&#xff0c;先贴上几个还不错的帖子 trick: PyTorch知识点补全_no_decay ["bias", "layernorm.bias", "layernorm.w-CSDN博客 Bert在fine-tune训练时的技巧&#xff1a;①冻结部分层参数、②weight-decay (L2正则化)、③warmup_…

Go限制运行时操作系统线程数量

Go语言的运行时系统使用了自己的调度器&#xff0c;该调度器使用了M:N模型&#xff0c;即M个goroutine可以在N个操作系统上进行调度。我们可以通过设置环境变量GOMAXPROCS或者使用runtime包中的GOMAXPROCS函数来限制Go程序可以使用的操作系统数。默认情况下&#xff0c;GOMAXPR…

IDEA基于Maven构建项目

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