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

本文主要是介绍【银角大王——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/')

这篇关于【银角大王——Django课程——靓号页面的基本操作(列表,新建,删除)】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963190

相关文章

Java实现删除文件中的指定内容

《Java实现删除文件中的指定内容》在日常开发中,经常需要对文本文件进行批量处理,其中,删除文件中指定内容是最常见的需求之一,下面我们就来看看如何使用java实现删除文件中的指定内容吧... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细介绍3.1 Ja

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

Python中合并列表(list)的六种方法小结

《Python中合并列表(list)的六种方法小结》本文主要介绍了Python中合并列表(list)的六种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录一、直接用 + 合并列表二、用 extend() js方法三、用 zip() 函数交叉合并四、用

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

Python对PDF书签进行添加,修改提取和删除操作

《Python对PDF书签进行添加,修改提取和删除操作》PDF书签是PDF文件中的导航工具,通常包含一个标题和一个跳转位置,本教程将详细介绍如何使用Python对PDF文件中的书签进行操作... 目录简介使用工具python 向 PDF 添加书签添加书签添加嵌套书签Python 修改 PDF 书签Pytho

对Django中时区的解读

《对Django中时区的解读》:本文主要介绍对Django中时区的解读方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景前端数据库中存储接口返回AI的解释问题:这样设置的作用答案获取当前时间(自动带时区)转换为北京时间显示总结背景设置时区为北京时间 TIM

Python Selenium动态渲染页面和抓取的使用指南

《PythonSelenium动态渲染页面和抓取的使用指南》在Web数据采集领域,动态渲染页面已成为现代网站的主流形式,本文将从技术原理,环境配置,核心功能系统讲解Selenium在Python动态... 目录一、Selenium技术架构解析二、环境搭建与基础配置1. 组件安装2. 驱动配置3. 基础操作模

C++类和对象之初始化列表的使用方式

《C++类和对象之初始化列表的使用方式》:本文主要介绍C++类和对象之初始化列表的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C++初始化列表详解:性能优化与正确实践什么是初始化列表?初始化列表的三大核心作用1. 性能优化:避免不必要的赋值操作2. 强

C#实现查找并删除PDF中的空白页面

《C#实现查找并删除PDF中的空白页面》PDF文件中的空白页并不少见,因为它们有可能是作者有意留下的,也有可能是在处理文档时不小心添加的,下面我们来看看如何使用Spire.PDFfor.NET通过C#... 目录安装 Spire.PDF for .NETC# 查找并删除 PDF 文档中的空白页C# 添加与删