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

ops/2024/9/23 5:23:16/

靓号管理

  • 靓号列表显示
    • 表结构
    • 根据表结构的需求,在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中创建类

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

python">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编写

在这里插入图片描述

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

views.py中 函数编写

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

python">#靓号列表
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编写

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

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

views.py中 函数编写

  • ModelForm类——记得导入
  • 实例化对象
  • 通过render将对象传入到HTML中
  • 通过模板的循环展示所有的字段
    在这里插入图片描述
    代码如下:
python">#导入
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 %}

数据校验

方式一:(正则表达式)
python">class PrettyModelForm(forms.ModelForm):#################额外交验,浏览器自带以外的校验-额外交验,浏览器自带以外的校验-额外交验,浏览器自带以外的校验####################方式一额外验证——额外验证——额外验证mobile=forms.CharField(label="手机号",#可以添加一个或者多个校验-可以添加一个或者多个校验-可以添加一个或者多个校验#1开头[3-9]+9个数validators=[RegexValidator(r'^1[3-9]\d{9}$','手机号格式错误'),])
方式二:(方法)
python">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编写

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

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

views.py编写

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

python">#继承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})

页面效果

在这里插入图片描述

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

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

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

python">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

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

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

python">#验证方式二#导入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编写

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

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

views.py编写

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

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

http://www.ppmy.cn/ops/33974.html

相关文章

HNU-人工智能-实验1-A*算法

人工智能-实验1 计科210x 甘晴void 一、实验目的 掌握有信息搜索策略的算法思想&#xff1b; 能够编程实现搜索算法&#xff1b; 应用A*搜索算法求解罗马尼亚问题。 二、实验平台 课程实训平台https://www.educoder.net/shixuns/vgmzcukh/challenges 三、实验内容 3.…

JAVA JAR 打包 EXE

JPACKAGE 简单 打包JAR 可能需要配置依赖包&#xff0c;未知 JLINK Wix JPACKAGE 模块化 生成exe安装向导&#xff08;打包成功&#xff0c;安装时报错2203&#xff0c;需要关闭杀毒软件&#xff0c;安装执行成功&#xff09; EXE4J 未试 launch4j 执行报错 launch4j mav…

PG后台进程个人解读和与oracle 的比较

1.background writer &#xff08;后台写进程&#xff09; 与OracleDBWR进程工作原理类似&#xff0c;都是负责把缓冲区里面的脏块写到数据文件中&#xff0c;写的目的有两个&#xff1a; 1.为了保存数据。 2.为了释放内存空间。 触发background writer 写的条件&#xff1a…

论文阅读_使用有向无环图实现流程工程_AgentKit

英文名称: AgentKit: Flow Engineering with Graphs, not Coding 中文名称: AgentKit&#xff1a;使用图而非编码进行流程工程 链接: https://arxiv.org/pdf/2404.11483.pdf 代码: https://github.com/holmeswww/AgentKit 作者: Yue Wu, Yewen Fan, So Yeon Min, Shrimai Prabh…

webpack配置、插件使用案例

概念 本质上&#xff0c;webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时&#xff0c;它会在内部从一个或多个入口点构建一个 依赖图(dependency graph)&#xff0c;然后将你项目中所需的每一个模块组合成一个或多个 bundles&…

图文并茂手把手教你安装windows搭建sqlserver(SqlServer数据库安装保姆级教程)

sqlserver是什么 SQL Server 是由美国微软公司&#xff08;Microsoft&#xff09;开发的一款关系型数据库管理系统&#xff08;RDBMS&#xff09;。作为全球主流的数据库平台之一&#xff0c;SQL Server 设计用于高效管理和处理大量结构化数据&#xff0c;支持各种规模的应用场…

图像处理--空域滤波增强(原理)

一、均值滤波 线性滤波算法&#xff0c;采用的主要是邻域平均法。基本思想是使用几个像素灰度的某种平均值来代替一个原来像素的灰度值。可以新建一个MN的窗口以为中心&#xff0c;这个窗口S就是的邻域。假设新的新的像素灰度值为&#xff0c;则计算公式为 1.1 简单平均法 就是…

智慧旅游引领未来风尚,科技助力旅行更精彩:科技的力量推动旅游业创新发展,为旅行者带来更加便捷、高效和智能的旅行服务

目录 一、引言 二、智慧旅游的概念与特点 &#xff08;一&#xff09;智慧旅游的概念 &#xff08;二&#xff09;智慧旅游的特点 三、科技推动旅游业创新发展 &#xff08;一&#xff09;大数据技术的应用 &#xff08;二&#xff09;人工智能技术的应用 &#xff08;…