django - 手机靓号管理 - 实现 添加不重复 - 删除 - 编辑手机号不能更改

1. model.py

  生成数据库代码

#手机靓号
class Number(models.Model):
    '''手机靓号'''
    mobile = models.CharField(max_length=11, verbose_name='手机号码')
    price = models.IntegerField(default=0, verbose_name='价格')

    ji_bie = {
        (1, '1级'),
        (2, '2级'),
        (3, '3级'),
    }
    ji = models.SmallIntegerField(choices=ji_bie, default=1, verbose_name='级别')

    zhuang_tai = {
        (1, '使用'),
        (2, '未使用'),
    }
    zhuang = models.SmallIntegerField(choices=zhuang_tai, default=2, verbose_name='状态')

 


 

 

2. list . html 

  首页面显示代码 

{% extends 'layout.html' %}

{% block content %}

         <div style="margin-bottom: 10px;"> <a href="/number_add/" class="btn btn-success">
            <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> 新增靓号 </a> </div>
        <div class="panel panel-default">
            <div class="panel-heading">  <span class="glyphicon glyphicon-th-list" aria-hidden="true"></span> 靓号列表</div>
            <table class="table table-bordered">
              <thead>
                <tr>
                    <th>ID</th>
                    <th>号码</th>

                    <th>价格</th>
                    <th>级别</th>
                    <th>状态</th>
                    <th>操作</th>
                </tr>
              </thead>
              <tbody>
              {% for item in response %}
                <tr>
                    <th>{{ item.id }}</th>
                    <td>{{ item.mobile }}</td>
                    <td>{{ item.price }}</td>
                    <td>{{ item.get_ji_display }}</td>
                    <td>{{ item.get_zhuang_display }}</td>
                    <td>
                       <a href="/number/{{ item.id }}/edit/" type="button" class="btn btn-success btn-xs">编辑</a>
                      <a href="/number/{{ item.id }}/detele/" type="button" class="btn btn-danger btn-xs">删除</a>
                    </td>
                </tr>
              {% endfor %}
              </tbody>
            </table>
        </div>
{% endblock%}

 


 

 

3. views.py

  views 代码显示 完成版代码 , 查询 , 分页 ,  验证手机是否存在 , 修改时手机号码不可修改 

 

from django.core.exceptions import ValidationError
from app import models
from django import forms
from django.shortcuts import render, redirect
from app.utils.pagetions import Pagetions

def number_list(request):
    # 查询所有数据
    # 查询 电话号码 mobile
    data_dict = {}
    value = request.GET.get('q', '')
    if value:
        data_dict['mobile__contains'] = value
    response = models.Number.objects.filter(**data_dict).order_by('-id')

    # 分页
    page_object = Pagetions(request, response)

    context = {
        'value': value,
        'response': page_object.page_queryset,
        'page_string': page_object.html()
    }
    return render(request, 'number_list.html', context)



# 手机号添加类
# 正则校验需要的模块
from django.core.validators import RegexValidator

class NumberModelForm(forms.ModelForm):

    # 重新定义一次 手机号的格式问题
    mobile = forms.CharField(
        label='手机号',
        validators=[RegexValidator(r'^1[3-9]\d{9}$', '手机号格式错误')],
    )

    class Meta:
        model = models.Number
        # 1. 方法1  fields = ['mobile', 'price', ....] 使用的字段
        # 2. 方法2  exclude = ['mobile']  排除的字段
        # 3. 方法3  fields = '__all__' 全部字段
        fields = '__all__'

    # 重定义方法 添加input 样式
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 循环出所有字段, 并用插件 插入 clas 样式
        for name, field in self.fields.items():
            # if name == 'name':
            #     continue
            field.widget.attrs = {"class": "form-control", "placeholder": field.label}


    #钩子方法  必须引入模块
    #   
    # 天验证手机号码已存在方法 clean_字段名(self)
    def clean_mobile(self):
        mobile = self.cleaned_data['mobile']
        extend = models.Number.objects.filter(mobile=mobile).exists()
        if extend:
            raise ValidationError('手机号已存在')
        return mobile

# 手机号添加
def number_add(request):
    if request.method == 'GET':
        # 实例化
        form = NumberModelForm()
        return render(request, 'number_add.html', {'form': form})
    # 校验数据
    form = NumberModelForm(data=request.POST)
    # 校验数据
    if form.is_valid():
        form.save()
        return redirect('/number_list/')
    return render(request, 'number_add.html', {'form': form})



# 手机号删除
def number_detele(request, nid):
    models.Number.objects.filter(id=nid).delete()
    return redirect('/number_list/')


# 手机号编辑 ,可以自己重新写class 类
# 修改手机号码信息时 , 不可更改手机号码
class NumberEditModelForm(forms.ModelForm):
    # 重新定义手机号 ,显示不可修改
    mobile = forms.CharField(disabled=True, label='手机号码')

    class Meta:
        model = models.Number
        # 1. 方法1  fields = ['mobile', 'price', ....] 使用的字段
        # 2. 方法2  exclude = ['mobile']  排除的字段
        # 3. 方法3  fields = '__all__' 全部字段
        fields = '__all__'

    # 重定义方法 添加input 样式
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 循环出所有字段, 并用插件 插入 clas 样式
        for name, field in self.fields.items():
            field.widget.attrs = {"class": "form-control", "placeholder": field.label}


def number_edit(request, nid):
    row_obj = models.Number.objects.filter(id=nid).first()
    if request.method == 'GET':
        # 获取编辑id 的数据 对象
        # instance=row_obj 显示编辑框中的默认值
        form = NumberEditModelForm(instance=row_obj)
        return render(request, 'number_edit.html', {'form': form})
    # 校验编辑数据  instance=row_obj ->指定需要修改的数据
    form = NumberEditModelForm(data=request.POST, instance=row_obj)
    if form.is_valid():
        form.save()
        return redirect('/number_list/')
    return render(request, 'number_edit.html', {'form': form})


 


 

urls

    # 手机号
    path('number_list/', number.number_list),
    path('number_add/', number.number_add),
    path('number/<int:nid>/detele/', number.number_detele),
    path('number/<int:nid>/edit/', number.number_edit),

 

目录 

 

posted @ 2022-05-27 14:09  我在春天等伱  阅读(129)  评论(0)    收藏  举报