Django学习3——靓号管理

目录

靓号管理

表结构和数据

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

在数据库生成表

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

靓号列表

新建靓号

编辑靓号

删除靓号

搜索靓号



靓号管理

表结构和数据

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

python 复制代码
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)

在数据库生成表

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

靓号列表

pretty_list.html

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">
                        <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>
                </form>
            </div>

        </div>
        <div class="panel panel-default">
            <!-- Default panel contents -->
            <div class="panel-heading">
                <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span>
                靓号列表
            </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>
                        <th>{{ obj.id }}</th>
                        <td>{{ obj.mobile }}</td>
                        <td>{{ obj.price}}</td>
                        <td>{{ obj.get_level_display }}</td>
                        <td>{{ obj.get_status_display }}</td>
                        <td>
                            <a class="btn btn-primary btn-xs" href="/pretty/{{ obj.id }}/edit/">编辑</a>
                            <a class="btn btn-danger btn-xs" href="/pretty/{{ obj.id }}/delete/">删除</a>
                        </td>
                    </tr>
                {% endfor %}

                </tbody>
            </table>
        </div>
        <div class="clearfix">
            <ul class="pagination">
                {{ page_string }}
            </ul>

        </div>

    </div>
{% endblock %}

新建靓号

复制代码

pretty_add.html

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">
{#          不加action,表示提交到当前地址#}
{#          novalidate不让浏览器校验#}
            <form method="POST" novalidate>
                {% csrf_token %}
                {% for field in form %}
                   <div class="form-group">
                   <label>{{ field.label }}</label>
                       {{ field }}
{#                       错误信息,是一个列表[错误1,错误2]#}
                       <span style="color: red">{{ field.errors.0 }}</span>
               </div>
                {% endfor %}
              <button type="submit" class="btn btn-primary" >提交</button>
            </form>
          </div>
        </div>
    </div>
{% endblock %}

对用户提交进行校验的两种方式(字段+正则和钩子方法)

编辑靓号

pretty_edit.html

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">
{#          不加action,表示提交到当前地址#}
{#          novalidate不让浏览器校验#}
            <form method="POST" novalidate>
                {% csrf_token %}
                {% for field in form %}
                   <div class="form-group">
                   <label>{{ field.label }}</label>
                       {{ field }}
{#                       错误信息,是一个列表[错误1,错误2]#}
                       <span style="color: red">{{ field.errors.0 }}</span>
               </div>
                {% endfor %}
              <button type="submit" class="btn btn-primary" >提交</button>
            </form>
          </div>
        </div>
    </div>
{% endblock %}

删除靓号

搜索靓号

python 复制代码
```python
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)
```

```python
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)
```

如果输入了关键字,就往字典中写入一个词,根据关键字去搜索。如果value没有值相当于data_dict相当是一个空字典,就返回所有的

接下来要解决的是:url上边这个条件应该如何构造?不应该有我们手动输,应该页面有个框,通过点击提交实现,如下图所示:

最终实现:

分页

但是考虑到页面不止有5个,得根据数据库有多少数据来算,所以页码如图所示放是有问题的。所以可以把页面放在后台生成,然后传到前端页面。

分页组件的封装

优化------时间选择组件

把组件直接复制到相应位置

在user_add页面使用

在母版中预留自定义css和js的位置

实现效果

在user_model_form_add中使用

优化------BootStrap样式父类

相关推荐
行然梦实2 分钟前
学习日记_20241126_聚类方法(自组织映射Self-Organizing Maps, SOM)
学习·数据挖掘·聚类
ps酷教程1 小时前
webrtc视频会议学习(三)
学习·webrtc
楚疏笃2 小时前
鸿蒙学习自由流转与分布式运行环境-跨端迁移(2)
分布式·学习·harmonyos
guihong0043 小时前
JAVA面试题、八股文学习之JVM篇
java·jvm·学习
CQXXCL3 小时前
MySQL-学习笔记
笔记·学习·mysql
多喝开水少熬夜3 小时前
FedGraph: Federated Graph Learning With Intelligent Sampling论文阅读
学习·论文·联邦学习
咔叽布吉4 小时前
【前端学习笔记】AJAX、axios、fetch、跨域
前端·笔记·学习
谢白羽5 小时前
深度神经网络模型压缩学习笔记三:在线量化算法和工具、实现原理和细节
笔记·学习·dnn
楚疏笃5 小时前
鸿蒙学习自由流转与分布式运行环境-价值与架构定义(1)
学习·架构·harmonyos