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),
目录


浙公网安备 33010602011771号