靓号管理
9.1表结构
根据表结构的需求,在models.py中创建类(由类生成数据库中的表)。
class PrettyNum(models.Model): """"靓号表""" mobile = models.CharField(verbose_name="手机号", max_length=11) 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)
9.2靓号列表
- 9.3列表点击跳转:/pretty/add/
- URL
- ModelForm类
from django import forms class PrettyModelForm(forms.ModelForm): ...
- 函数
实例化类的对象
通过render将对象传入到HTML中。
模板的循环展示所有的字段。
- 点击提交
- 数据校验
- 保存到数据库
- 跳转回靓号列表。
9.4编辑靓号
- 列表页面:/pretty/数字/edit/
- URL
- 函数
根据ID获取当前编辑的对象
ModelForm配合,默认显示数据。
提交修改。
不允许手机号重复。
添加:【正则表达式】【手机号不能存在】
#[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)
9.5 搜索手机号
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
data_dict = {"mobile":"19999999991","id":123}
models.PrettyNum.objects.filter(mobile_contain='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
#1.根据用户想要访问的页码,计算出起止位置 page = int(request.GET.get('page',1)) page_size =10 #每页显示10条数据 start = (page-1)*page_size end = page*page_size queryset = models.PrettyNum.objects.filter(**data_dict).order_by("-level")[start:end] #数据总条数 total_count = models.PrettyNum.objects.filter(**data_dict).order_by("-level").count() queryset = models.PrettyNum.objects.filter(**data_dict).order_by("-level")[start:end]
9.6分页
queryset=models.PrettyNum.objects.all() queryset=models.PrettyNum.objects.filter(id=1)[0:10] #第1页 queryset=models.PrettyNum.objects.all()[0:10] #第2页 queryset=models.PrettyNum.objects.all()[10:20] #第3页 queryset=models.PrettyNum.objects.all()[20:30]
data = models.PrettyNum.objects.all().count() data = models.PrettyNum.objects.filter(id=1).count()
- 分页的逻辑和处理规则
- 封装分页类
从头到尾开发
写项目用【pagination.py】公共组件。
- 小Bug,搜索+分页情况下。
分页时候,保留原来的搜索条件。
两个链接网站:1、
2、
#总页码 total_page_count,div = divmod(total_count,page_size) if div: total_page_count += 1 #计算出,显示出当前页的前五页、后五页 start_page = page - 5 #页码 page_str_list =[] for i in range(1,total_page_count +1): else = '<li></li>'.format(i,i) page_str_list.append(ele) page_string = mark_safe("".join(page_str_list)) return render(request,'prettty_list.html
10、时间插件
11、ModelForm和BootStrap
ModelForm可以帮助我们生成HTML标签。
class UserModelForm(forms.ModelForm): name = forms.CharField(min_length=3,label="用户名") class Meta: model = models.UserInfo fields = ["name","password",] form = UserModelForm() {{form.name}} 普通的input框 {{form.password}} 普通的input框
12、管理员编辑
if request .method=="GET“ form = AminEditModelForm(instance=row_object)
return render(request.'change.html',{"form",form,"title":title})
form=AminEditModelForm(data=request.POST,instance = row_object)
if form.is_valid():
form.save()
return redirect('/admin/list/')
return render(request
13、用户登录
http无状态短连接
什么是cookie和session?
http://127.0.0.1:8000/admin/list/
https://127.0.0.1:8000/admin/list/
1、保存在浏览器上的键值
2、发送请求时,自动携带。
字典cookie、
响应体、响应头(cookie)
15、Ajax请求
浏览器向网站发送请求时:URL和表单的形式提交。
- GET
- POST
特点:页面刷新。
除此之外,也可以基于Ajax向后台发送请求(偷偷的发送请求)。
- 依赖jQuery
- 编写ajax代码
$.ajax({ url:"发送的地址", type:"get", data:{ n1:123, n2:456 }, success:function(res){ console.log(res); } })
15.1 GET请求
$.ajax({ url:'/task/ajax/' type:"get" data:{ n1:123, n2:456 }, success:function(res){ console.log(res); } })
from django.shortcuts import render, HttpResponse def task_list(request): """"任务列表""" return render(request,"task_list.html") def task_ajax(request): print(request.GET) return HttpResponse("成功了")
浙公网安备 33010602011771号