Django项目开发③:靓号管理 您所在的位置:网站首页 1888888888电话号码价值 Django项目开发③:靓号管理

Django项目开发③:靓号管理

2024-07-17 08:43| 来源: 网络整理| 查看: 265

1 表结构

根据表结构的需求,在models.py中创建类(由类生成数据库中的表)。

class PrettyNum(models.Model): """ 靓号表 """ mobile = models.CharField(verbose_name="手机号", max_length=11) # 想要允许为空 null=True, blank=True price = models.IntegerField(verbose_name="价格", default=0) level_choices = ( (1, "1级"), (2, "2级"), (3, "3级"), (4, "4级"), ) level = models.SmallIntegerField(verbose_name="级别", choices=level_choices, default=1) status_choices = ( (1, "已占用"), (2, "未使用") ) status = models.SmallIntegerField(verbose_name="状态", choices=status_choices, default=2)

自己在数据模拟创建一些数据:

insert into app01_prettynum(mobile,price,level,status)values("111111111",19,1,1); 2 靓号列表

URL

函数

获取所有的靓号

结合html+render将靓号罗列出来

id 号码 价格 级别(中文) 状态(中文) def pretty_list(request): '''靓号列表''' data_dict = {} search_data = request.GET.get('q','') if search_data: data_dict["mobile__contains"] = search_data queryset = models.PrettyNum.objects.filter(**data_dict).order_by('-id').all() page_object = Pagination(request, queryset) context = { "search_data": search_data, "queryset": page_object.page_queryset, # 分完页的数据 "page_string": page_object.html() # 生成页码 } return render(request,'pretty_list.html', context)

pretty_list.html

{% extends 'layout.html' %} {% block content %} 添加靓号 靓号列表 ID 号码 价格 级别 状态 操作 {% for obj in queryset %} {{ obj.id }} {{ obj.mobile }} {{ obj.price }} {{ obj.get_level_display }} {{ obj.get_status_display }} 编辑 删除 {% endfor %} {{ page_string }} {% endblock %} 3 新建靓号

列表点击跳转:/pretty/add/

URL

ModelForm类:utils目录下的form.py中

from django import forms class PrettyModelForm(BootStrapModelForm): mobile = forms.CharField( label="手机号", validators=[RegexValidator(r'^1[3-9]\d{9}$', '手机号格式错误')], ) class Meta: model = models.PrettyNum fields = ['mobile', 'price', 'level', 'status'] # 自己选择的字段 #fields = "__all__" # 所有字段 #exclude = ['mobile', 'level'] # 要排除的字段 def clean_mobile(self): txt_mobile = self.cleaned_data['mobile'] exists = models.PrettyNum.objects.filter(mobile=txt_mobile).exists() if exists: raise ValidationError("手机号已存在") return txt_mobile class PrettyEditModelForm(BootStrapModelForm): #mobile = forms.CharField(disabled=True, label="手机号") mobile = forms.CharField( label="手机号", validators=[RegexValidator(r'^1[3-9]\d{9}$', '手机号格式错误')], ) class Meta: model = models.PrettyNum fields = ['mobile', 'price', 'level', 'status'] # 自己选择的字段 def clean_mobile(self): # 获取当前编辑的那一行记录的ID print(self.instance.pk) txt_mobile = self.cleaned_data['mobile'] exists = models.PrettyNum.objects.exclude(id=self.instance.pk).filter(mobile=txt_mobile).exists() if exists: raise ValidationError("手机号已存在") # 验证通过,返回用户输入的值 return txt_mobile

函数

实例化类的对象 通过render将对象传入到HTML中。 模板的循环展示所有的字段。

点击提交

数据校验 保存到数据库 跳转回靓号列表 def pretty_add(request): if requesthod == 'GET': form = PrettyModelForm() return render(request, 'pretty_add.html', {"form": form}) # 校验用户通过POST提交的数据 form = PrettyModelForm(data=request.POST) if form.is_valid(): form.save() return redirect('/pretty/list/') else: return render(request, 'pretty_add.html', {"form": form}) 4 编辑靓号 列表页面:/pretty/数字/edit/ URL 函数 根据ID获取当前编辑的对象 ModelForm配合,默认显示数据。 提交修改。 def pretty_edit(request, nid): '''编辑靓号''' row_object = models.PrettyNum.objects.filter(id=nid).first() if requesthod == 'GET': # 根据ID获取要修改的那一行数据 form = PrettyEditModelForm(instance=row_object) return render(request, 'pretty_edit.html', {"form": form}) form = PrettyEditModelForm(data=request.POST, instance=row_object) if form.is_valid(): form.save() return redirect('/pretty/list/') else: # 校验失败,在页面上显示错误信息 return render(request, 'pretty_edit.html', {"form": form}) 5 字段校验

不允许手机号重复。

添加:【正则表达式】【手机号不能存在】

# [obj,obj,obj] queryset = models.PrettyNum.objects.filter(mobile="1888888888") obj = models.PrettyNum.objects.filter(mobile="1888888888").first() # True/False exists = models.PrettyNum.objects.filter(mobile="1888888888").exists()

编辑:【正则表达式】【手机号不能存在】

排除自己以外,其他的数据是否手机号是否重复? # id!=2 and mobile='1888888888' models.PrettyNum.objects.filter(mobile="1888888888").exclude(id=2)

 

6 搜索手机号 models.PrettyNum.objects.filter(mobile="19999999991",id=12) data_dict = {"mobile":"19999999991","id":123} models.PrettyNum.objects.filter(**data_dict) models.PrettyNum.objects.filter(id=12) # 等于12 models.PrettyNum.objects.filter(id__gt=12) # 大于12 models.PrettyNum.objects.filter(id__gte=12) # 大于等于12 models.PrettyNum.objects.filter(id__lt=12) # 小于12 models.PrettyNum.objects.filter(id__lte=12) # 小于等于12 data_dict = {"id__lte":12} models.PrettyNum.objects.filter(**data_dict) models.PrettyNum.objects.filter(mobile="999") # 等于 models.PrettyNum.objects.filter(mobile__startswith="1999") # 筛选出以1999开头 models.PrettyNum.objects.filter(mobile__endswith="999") # 筛选出以999结尾 models.PrettyNum.objects.filter(mobile__contains="999") # 筛选出包含999 data_dict = {"mobile__contains":"999"} models.PrettyNum.objects.filter(**data_dict)

pretty_list.html中的搜索form

10.时间插件 $(function () { $('#dt').datepicker({ format: 'yyyy-mm-dd', startDate: '0', language: "zh-CN", autoclose: true }); }) 11.ModelForm和BootStrap

ModelForm可以帮助我们生成HTML标签。

class UserModelForm(forms.ModelForm): class Meta: model = models.UserInfo fields = ["name", "password",] form = UserModelForm() {{form.name}} 普通的input框 {{form.password}} 普通的input框

定义插件

class UserModelForm(forms.ModelForm): class Meta: model = models.UserInfo fields = ["name", "password",] widgets = { "name": forms.TextInput(attrs={"class": "form-control"}), "password": forms.PasswordInput(attrs={"class": "form-control"}), "age": forms.TextInput(attrs={"class": "form-control"}), } class UserModelForm(forms.ModelForm): name = forms.CharField( min_length=3, label="用户名", widget=forms.TextInput(attrs={"class": "form-control"}) ) class Meta: model = models.UserInfo fields = ["name", "password", "age"] {{form.name}} BootStrap的input框 {{form.password}} BootStrap的input框

重新定义的init方法,批量设置

class UserModelForm(forms.ModelForm): class Meta: model = models.UserInfo fields = ["name", "password", "age",] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 循环ModelForm中的所有字段,给每个字段的插件设置 for name, field in self.fields.items(): field.widget.attrs = { "class": "form-control", "placeholder": field.label } class UserModelForm(forms.ModelForm): class Meta: model = models.UserInfo fields = ["name", "password", "age",] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 循环ModelForm中的所有字段,给每个字段的插件设置 for name, field in self.fields.items(): # 字段中有属性,保留原来的属性,没有属性,才增加。 if field.widget.attrs: field.widget.attrs["class"] = "form-control" field.widget.attrs["placeholder"] = field.label else: field.widget.attrs = { "class": "form-control", "placeholder": field.label } class UserEditModelForm(forms.ModelForm): class Meta: model = models.UserInfo fields = ["name", "password", "age",] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 循环ModelForm中的所有字段,给每个字段的插件设置 for name, field in self.fields.items(): # 字段中有属性,保留原来的属性,没有属性,才增加。 if field.widget.attrs: field.widget.attrs["class"] = "form-control" field.widget.attrs["placeholder"] = field.label else: field.widget.attrs = { "class": "form-control", "placeholder": field.label }

自定义类

class BootStrapModelForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 循环ModelForm中的所有字段,给每个字段的插件设置 for name, field in self.fields.items(): # 字段中有属性,保留原来的属性,没有属性,才增加。 if field.widget.attrs: field.widget.attrs["class"] = "form-control" field.widget.attrs["placeholder"] = field.label else: field.widget.attrs = { "class": "form-control", "placeholder": field.label } class UserEditModelForm(BootStrapModelForm): class Meta: model = models.UserInfo fields = ["name", "password", "age",] 12.文件归类操作

提取公共的类

ModelForm拆分出来 

视图函数的归类



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有